online - ¿Se puede "compilar" el código PHP?
php es un lenguaje interpretado (11)
Desde que se hizo la pregunta por primera vez, ha habido un cambio en esa respuesta de un "no" rotundo a un "tipo de"
http://github.com/facebook/hiphop-php/wiki
Hip Hop para PHP fue un compilador que tomó el 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 lo diría :)
Sin embargo, desde 2013, Facebook ya no lo usa y se ha descontinuado en favor de HHVM, que no es un compilador: https://en.wikipedia.org/wiki/HipHop_for_PHP
Sé que PHP se compila a un código de bytes antes de que se ejecute en el servidor, y luego ese código de bytes se puede almacenar en caché para que el script completo no tenga que ser reinterpretado con cada acceso web.
¿Pero puede "compilar" php y cargar un archivo binario-ish, que será ejecutado por el intérprete de código de bytes?
Después de que se hizo esta pregunta, Facebook lanzó HipHop para PHP, que es probablemente el compilador de PHP mejor probado hasta la fecha (dado que corre uno de los 10 sitios web más grandes del mundo). Sin embargo, Facebook lo suspendió en favor de HHVM, que es una máquina virtual, no un compilador.
Más allá de eso, al compilar PHP compiler
Google se encuentran varias soluciones de terceros.
- compila a binarios nativos
- no muy activa ahora (febrero de 2014) - última versión en 2011, último cambio en verano de 2013
- GitHub , GitHub de una reescritura
- Implementación gratuita y de código abierto de PHP con compilador.
- compila a binarios nativos (Windows, Linux)
- suspendido desde 2010 hasta que se encuentren colaboradores : el sitio web está inactivo, permanece en GitHub donde el último cambio es desde principios de 2012
- 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 el manual
bcompiler_write_exe_footer()
) - Parece descontinuado ahora (febrero de 2014) - último cambio en 2011
- Wikipedia , IBM
- Incubadora de cambios para WebSphere sMash.
- soportado por IBM
- compila a bytecode Java
- Parece descontinuado ahora (febrero de 2014): el sitio web ha caído, parece un gran despliegue publicitario en 2008 y 2009
- compila a los binarios de Windows independientes
- Los binarios contienen un bytecode y un lanzador.
- Parece discontinuado ahora (febrero de 2014) - último cambio en 2006
- compila a c ++
- Parece suspendido ahora (febrero de 2014) - último cambio en 2003
En php 7 existe la opción php 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 se guarda en una carpeta específica para una reutilización optimizada.
Opcache no está compilando pero es algo similar.
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 - Phalanger - que soporta incluso esas características dinámicas de PHP sucio, y aún es capaz de compilarlas como ensamblado .NET, que puede distribuirse como una DLL independiente.
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 cosecharía muchas recompensas.
PHP realmente no se compila como con muchos programas. Sin embargo, puedes usar el codificador de Zend para que sea ilegible.
Si simplemente está buscando producir un ejecutable binario a partir de un script PHP, evite tratar de hacer que su pregunta sea extremadamente precisa, ya que parecerá 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 SI . 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 convertirlo en un binario portátil que puede distribuirse con todas las dependencias y ejecutarse sin ningún problema ... y funciona a la perfección.
Todo lo que necesitas es usar phc .
También hay
cuales objetivos
- Para codificar el script completo en una aplicación propietaria de PHP.
- 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 cliente, sin la necesidad de un php.exe.
- Realizar el estudio de viabilidad de un convertidor de PHP a C.
La extensión está disponible en PECL.
Um, alguien escuchó sobre Zend Guard , que hace exactamente lo que esta persona está preguntando. Codifica / ofusca el código PHP en "código de máquina".
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.
phc 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.