Você pode "compilar" o código PHP?

Eu sei que o PHP é compilado para código byte antes de ser executado no servidor, e então esse código byte pode ser cache para que todo o script não tenha que ser re-interpretado com cada acesso à web.

mas você pode "compilar" o php e enviar um arquivo binário-ish, que será apenas executado pelo interpretador de código byte?

 201
Author: sepp2k, 2009-09-11

11 answers

Depois que esta pergunta foi feita, o Facebook lançou HipHop para PHP que é provavelmente o compilador de PHP mais bem testado até à data (visto que executou um dos 10 maiores sites do mundo). No entanto, o Facebook o descontinuou em favor do HHVM, que é uma máquina virtual, não um compilador.

Para além disso, pesquisei no Google várias soluções de terceiros.

Phalanger

Phc

  • compila para binários nativos
  • não muito ativo agora – fevereiro de 2014) - última versão em 2011, Última alteração no verão de 2013

Compilador de PHP Roadsend

Compilador

  • extensão PECL do PHP
  • experimental
  • compila para o bytecode PHP, mas pode envolvê - lo no binário do Windows que carrega o interpretador de PHP (ver bcompiler_write_exe_footer() manual)
  • parece descontinuado agora – fevereiro de 2014) - última alteração em 2011

Projecto Zero

  • Wikipedia, IBM
  • Incubadora de alterações da WebSphere sMash
  • suportado pela IBM
  • compila para bytecode Java
  • parece descontinuado agora – fevereiro de 2014) - site para baixo, parece big hype em 2008 e 2009

Bambalam

  • compila para os binários autónomos do Windows
  • os binários contêm bytecode e um lançador
  • parece descontinuado agora (Fevereiro de 2014) - última alteração em 2006

Binarifo

  • compila para C++
  • parece descontinuado agora – fevereiro de 2014) - última alteração em 2003
 216
Author: Frank Farmer, 2017-12-08 23:40:57
A resposta curta é"não".

A actual implementação do PHP é a de uma linguagem interpretada. Você pode argumentar os aspectos teóricos do fato de que qualquer linguagem pode tecnicamente ser interpretada ou compilada, mas como está, as implementações atuais são tais que o código PHP requer um intérprete para executar, e o intérprete gerencia o ambiente de execução.

Para responder à sua pergunta sobre o upload de bytecode PHP pré-compilado, provavelmente é possível, mas ... você teria que implementar uma maneira para o intérprete PHP ler em tal arquivo e trabalhar com ele. Com os caches opcode existentes lá fora já, não parece uma tarefa que iria colher muita recompensa.
 21
Author: zombat, 2009-09-11 00:31:33

Desde que a pergunta foi feita pela primeira vez, houve uma mudança nessa resposta de um "não" para um "tipo de"

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

Hip Hop para PHP era um compilador que pegou no código PHP e o transformou em C++altamente optimizado. Aparentemente, algumas funções não são suportadas (por exemplo 'explode')

Encontrei esta pergunta enquanto procurava mais informações sobre como implementar o HipHop e pensei em falar mais alto:)

Desde O Facebook 2013 deixou de usá-lo, no entanto, e foi descontinuado em favor do HHVM, que não é um compilador: https://en.wikipedia.org/wiki/HipHop_for_PHP

 16
Author: Alex C, 2016-01-28 13:24:54

Também há

Que objectivos

  • codificar o programa inteiro numa aplicação PHP proprietária
  • codificar algumas classes e / ou funções numa aplicação PHP proprietária
  • para permitir a produção de aplicações php-gtk que poderiam ser usadas em computadores de secretária do cliente, sem a necessidade de um php.exe.
  • para realizar o estudo de viabilidade de um conversor PHP A C

A extensão está disponível no PECL.

 10
Author: Gordon, 2010-12-18 23:54:02

O Phc permite-lhe compilar programas de PHP em bibliotecas partilhadas, que poderão ser carregadas para o servidor. O programa PHP é compilado em binários. É feito de forma a suportar {[[0]} s, include s, e toda a biblioteca padrão PHP.

 8
Author: Paul Biggar, 2009-09-26 14:36:39

Se você está simplesmente procurando produzir um executável binário a partir de um script PHP, então por favor evite tentar fazer sua pergunta extremamente precisa, porque ele fará parecer que você sabe exatamente o que você precisa. Além disso, a maioria dos desenvolvedores PHP têm absolutamente nenhuma pista sobre o que é um bytecode.

Dito isto, as respostas são sim. Acabei de compilar um script PHP em um binário. E não um binário qualquer. I have used the CDE application (link to Wayback Machine, The original link is now broken) to turn it into an portable binary that can be distributed with all the dependencies and executed without any issue ... and it works lindamente.

Só precisas de usar o phc .

 8
Author: asiby, 2014-11-09 22:04:26
Alguém ouviu falar de Zend Guard, que faz exactamente o que esta pessoa está a pedir. Code PHP code into "machine code".
 7
Author: John Dillick, 2011-01-27 15:47:51

Existem vários "compiladores" de código PHP. A maioria deles não suporta todos os recursos PHP, uma vez que estes simplesmente devem ser interpretados durante o tempo de execução.

Estamos a usar Phalanger - http://www.php-compiler.net/ - que suporta até mesmo as características dinâmicas sujas do PHP, e ainda é capaz de compilá-las como conjunto.NET, que pode ser distribuído como um DLL autônomo.
 2
Author: Jakub Míšek, 2011-05-11 21:08:42

Ver 5.5.x com o módulo integrado OPcache, volátil em uma memória compartilhada, muito mais desempenho e o princípio dinamismo do php permanecem intocados.

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

 1
Author: cplusplus, 2013-12-11 20:57:52

No php 7 existe a opção php ini opcache.o ficheiro _cache que grava o 'bytecode' numa pasta específica. Em poderia ser útil para o script php cli que são "compilados" e salvos em uma pasta específica para uma reutilização otimizada.

O Opcache não está a compilar, mas é algo semelhante.
 1
Author: caiofior, 2017-09-15 07:21:12

O PHP não é compilado como acontece com muitos programas. Pode usar o codificador do Zend para torná-lo ilegível.

 0
Author: Joe, 2009-09-11 00:25:25