Pregunta

Sé que PHP se compila a un código de bytes antes de ejecutarse en el servidor, y luego ese código de bytes se puede almacenar en caché para que no se tenga que reinterpretar todo el script con cada acceso web.

Pero puedes " compilar " php y cargue un archivo binario-ish, que solo será ejecutado por el intérprete de códigos de bytes?

¿Fue útil?

Solución

Luego de hacer esta pregunta, Facebook lanzó HipHop para PHP , que es probablemente el compilador de PHP mejor probado hasta la fecha (dado que es uno de los 10 sitios web más grandes del mundo). Sin embargo, Facebook lo descontinuó en favor de HHVM, que es una máquina virtual, no un compilador.

Más allá de eso, googlear en compilador PHP da como resultado una serie de soluciones de terceros.

Phalanger

phc

  • compila a binarios nativos
  • no muy activo ahora (febrero de 2014): última versión en 2011, último cambio en el verano de 2013

Compilador PHP de Roadsend

bcompiler

  • extensión PECL de PHP
  • experimental
  • compila a bytecode PHP, pero puede envolverlo en el binario de Windows que carga el intérprete de PHP (consulte bcompiler_write_exe_foot_footer () manual )
  • parece discontinuado ahora (febrero de 2014) - último cambio en 2011

Project Zero

  • Wikipedia , IBM
  • incubadora de cambios para WebSphere sMash
  • soportado por IBM
  • compila a bytecode de Java
  • parece descontinuado ahora (febrero de 2014): el sitio web no funciona, parece un gran despliegue publicitario en 2008 y 2009

Bambalam

  • compila a binarios de Windows independientes
  • los binarios contienen un código de bytes y un lanzador
  • parece suspendido ahora (febrero de 2014) - último cambio en 2006

BinaryPHP

  • compila a C ++
  • parece descontinuado ahora (febrero de 2014) - último cambio en 2003

Otros consejos

La respuesta corta es " no " ;.

La implementación actual de PHP es la de un lenguaje interpretado. Puede argumentar los aspectos teóricos del hecho de que cualquier lenguaje puede ser interpretado o compilado técnicamente, pero tal como están, las implementaciones actuales son tales que el código PHP requiere que se ejecute un intérprete, y el intérprete administra el entorno de ejecución.

Para responder a su pregunta sobre la carga de código de bytes de PHP precompilado, probablemente sea posible, pero tendría que implementar una forma para que el intérprete de PHP lea ese archivo y trabaje con él. Con los cachés de opcode existentes ya fuera, no parece una tarea que coseche muchas recompensas.

Desde que se hizo la pregunta por primera vez, ha habido un cambio en esa respuesta desde un principio hacia fuera " no " a un " tipo de "

http://github.com/facebook/hiphop-php/wiki

Hip Hop para PHP fue un compilador que tomó código PHP y lo convirtió en C ++ altamente optimizado Aparentemente, algunas funciones no son compatibles (por ejemplo, 'explotar')

Encontré esta pregunta mientras buscaba más información sobre cómo implementar HipHop y pensé que hablaría :)

Sin embargo, desde 2013, Facebook ya no lo usa y se ha descontinuado a favor de HHVM, que no es un compilador: https://en.wikipedia.org/wiki/HipHop_for_PHP

También hay

que apunta

  
      
  • Para codificar el script completo en una aplicación de PHP propietaria
  •   
  • Para codificar algunas clases y / o funciones en una aplicación propietaria de PHP
  •   
  • Para habilitar la producción de aplicaciones php-gtk que podrían usarse en escritorios de clientes, sin la necesidad de un php.exe.
  •   
  • Para realizar el estudio de viabilidad de un convertidor de PHP a C
  •   

La extensión está disponible en PECL.

phc le permite compilar programas PHP en bibliotecas compartidas, que se pueden cargar en el servidor. El programa PHP se compila en binarios. Se realiza de tal manera que sea compatible con eval s, include s y toda la biblioteca estándar de PHP.

Si simplemente está buscando producir un ejecutable binario a partir de un script PHP, evite tratar de hacer que su pregunta sea extremadamente precisa porque hará que parezca que sabe exactamente lo que necesita. Además, la mayoría de los desarrolladores de PHP tienen absolutamente ninguna pista sobre qué es un código de bytes.

Dicho esto, las respuestas son . Acabo de terminar de compilar un script PHP en un binario. Y no cualquier binario. He utilizado la aplicación CDE (enlace a Wayback Machine, el enlace original ahora está roto) para activarlo en un binario portátil que puede distribuirse con todas las dependencias y ejecutarse sin ningún problema & # 8230; y funciona muy bien.

Todo lo que necesitas es usar phc .

Um, alguien ha oído hablar de Zend Guard , que hace exactamente lo que esta persona es preguntando. Codifica / ofusca el código PHP en " código de máquina " ;.

Hay varios " compiladores " de código PHP. La mayoría de ellos no son compatibles con todas las funciones de PHP, ya que simplemente deben interpretarse durante el tiempo de ejecución.

Estamos utilizando Phalanger - http://www.php-compiler.net/ - eso admite incluso las funciones dinámicas de PHP, y aún puede compilarlas como ensamblado .NET, que se puede distribuir como una DLL independiente.

vea 5.5.x con el módulo OPcache integrado, volátil en una memoria compartida, mucho más rendimiento y el principio de dinamismo de php permanece intacto.

http://www.php.net/manual/en/opcache. installation.php

En php 7 está la opción phi ini opcache.file_cache que guarda el bytecode en una carpeta específica. Podría ser útil en el script php cli que se compila " " y guardado en una carpeta específica para una reutilización optimizada.

Opcache no está compilando, pero es algo similar.

PHP realmente no se compila como con muchos programas. Sin embargo, puedes usar el codificador de Zend para que sea ilegible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top