Eu sei que o PHP é compilado para código de bytes antes de ser executado no servidor e, em seguida, esse código de bytes pode ser armazenado em cache para que todo o script não precise ser reinterpretado a cada acesso à Web.
Mas você pode "compilar" o código PHP e fazer upload de um arquivo binário-ish, que será executado apenas pelo interpretador de código de bytes?
Respostas:
Depois que essa pergunta foi feita, o Facebook lançou o HipHop para PHP, que provavelmente é o compilador PHP mais testado até o momento (visto que ele executava um dos 10 maiores sites do mundo). No entanto, o Facebook o interrompeu em favor do HHVM, que é uma máquina virtual, não um compilador.
Além disso, o Google busca
PHP compiler
várias soluções de terceiros.Torta de pêssego
Phalanger
phc
Compilador Roadsend PHP
bcompiler
bcompiler_write_exe_footer()
manual )Projeto Zero
Bambalam
BinaryPHP
fonte
A resposta curta é não".
A implementação atual do PHP é a de uma linguagem interpretada. Você pode argumentar os aspectos teóricos do fato de que qualquer linguagem pode ser tecnicamente interpretada ou compilada, mas, como está, as implementações atuais são tais que o código PHP exige que um intérprete seja executado, 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 de o interpretador PHP ler esse arquivo e trabalhar com ele. Com os caches de opcode existentes já disponíveis, não parece uma tarefa que receba muita recompensa.
fonte
include
erequire
? Por exemplo, se um script PHP geralmente está incluídoinclude( 'controller/' . $controller_name . '.php' )
, isso funcionará automaticamente com o HipHop? CheersThe short answer is "no". The current implementation of PHP is that of an interpreted language. You can argue the theoretical aspects…
Não há nada teórico sobre isso, muitas linguagens interpretadas têm compiladores; viz AutoIt / AutoHotkey, ou mesmo em BASIC. Existem muitos programas que foram escritos nesses e compilados para serem usados pelo público como programas independentes. Não há nada de especial no PHP para impedir que ele seja compilável, e é por isso que existem muitos compiladores, mas, diferentemente do AHK, não há um compilador oficial, testado - o Zend Guard não conta.Desde que a pergunta foi feita pela primeira vez, houve uma alteração nessa resposta de um "não" para um "tipo de"
http://github.com/facebook/hiphop-php/wiki
O Hip Hop para PHP foi um compilador que pegou o código PHP e o transformou em C ++ altamente otimizado Aparentemente, algumas funções não são suportadas (por exemplo, 'explodir')
Encontrei essa pergunta enquanto procurava mais informações sobre como implementar o HipHop e pensei em falar :)
Desde 2013, o Facebook não usa mais, no entanto, e foi descontinuado em favor do HHVM, que não é um compilador: https://en.wikipedia.org/wiki/HipHop_for_PHP
fonte
pre-analyze
o código php. Como resultado, você obtém um arquivo de cache binário. Com esse arquivo e a configuração correta do HHVM, é possível executar uma página da Web apenas com bytecode, sem a necessidade dos arquivos de origem;) <br> Espero ter acertado.Há também
que visa
A extensão está disponível no PECL.
fonte
O phc permite que você compile programas PHP em bibliotecas compartilhadas, que podem ser carregadas no servidor. O programa PHP é compilado em binários. É feito de maneira a suportar
eval
s, seinclude
toda a biblioteca padrão do PHP.fonte
Se você está simplesmente procurando produzir um executável binário a partir de um script PHP, evite tentar tornar sua pergunta extremamente precisa, pois fará parecer que você sabe exatamente o que precisa. Além disso, a maioria dos desenvolvedores de PHP não tem absolutamente nenhuma pista sobre o que é um bytecode.
Com isso dito, as respostas são SIM . Acabei de compilar um script PHP em um binário. E não apenas qualquer binário. Eu usei o aplicativo CDE (link para Wayback Machine, o link original agora está quebrado) para transformá-lo em um binário portátil que pode ser distribuído com todas as dependências e executado sem nenhum problema ... e funciona lindamente.
Tudo que você precisa é usar phc .
fonte
Alguém ouviu falar de Zend Guard , que faz exatamente o que essa pessoa está pedindo. Ele codifica / ofusca o código PHP em "código de máquina".
fonte
Existem vários "compiladores" de código PHP. A maioria deles não suporta todos os recursos do PHP, pois eles devem ser interpretados durante o tempo de execução.
Estamos usando o Phalanger - http://www.php-compiler.net/ - que suporta até mesmo esses recursos dinâmicos PHP sujos e ainda é capaz de compilá-los como um assembly .NET, que pode ser distribuído como uma DLL independente.
fonte
veja 5.5.x com o módulo OPcache integrado, volátil em uma memória compartilhada, muito mais desempenho e o princípio de dinamismo do php permanecem intocados.
http://www.php.net/manual/en/opcache.installation.php
fonte
No php 7, existe a opção php ini opcache.file_cache que salva o bytecode em uma pasta específica. In pode ser útil no script php cli que é "compilado" e salvo em uma pasta específica para uma reutilização otimizada.
Opcache não está compilando, mas é algo semelhante.
fonte
O PHP realmente não é compilado como em muitos programas. Você pode usar o codificador do Zend para torná-lo ilegível.
fonte
Se você tem permissão para executar binários nativos reais, este é o seu compilador:
https://github.com/ircmaxell/php-compiler
É um compilador PHP escrito em PHP!
Ele compila o código PHP para seu próprio código de VM. Esse código da VM pode ser interpretado por seu próprio intérprete (também escrito em PHP, não é louco?) Ou pode ser traduzido para o Bitcode. E usando a estrutura do compilador LLVM (
clang
e co), esse Bitcode pode ser compilado em um binário nativo para qualquer plataforma compatível com o LLVM (praticamente qualquer plataforma que seja importante hoje). Você pode optar por fazer isso estaticamente ou a cada vez imediatamente antes da execução do código (estilo JIT). Portanto, os únicos dois requisitos para esse compilador funcionar em seu sistema são um interpretador PHP instalado e umclang
compilador instalado .Se você não tiver permissão para executar binários nativos, poderá usar o compilador acima como um intérprete e deixá-lo interpretar seu próprio código de VM. No entanto, isso será lento, pois você estará executando um intérprete PHP que está sendo executado em um mecanismo PHP, portanto você tem uma "dupla interpretação".
fonte
Também existe o bcgen (uma porta PHP7 do bcompiler):
https://github.com/vjardin/bcgen/
(Apenas PHP7.2)
fonte