Je sais que PHP est compilé en code octet avant qu'il ne soit exécuté sur le serveur. Ce code octet peut ensuite être mis en cache afin que le script ne doive pas être réinterprété avec chaque accès Web.
Mais pouvez-vous "compiler" PHP le code et télécharger un fichier binary-ish, qui sera simplement exécuté par l'interpréteur de code octet?
Après que cette question a été posée, Facebook a lancé HipHop pour PHP , qui est probablement le compilateur le mieux testé PHP à ce jour a dirigé l’un des 10 plus grands sites Web au monde). Cependant, Facebook l'a abandonné en faveur de HHVM, qui est une machine virtuelle, pas un compilateur.
Au-delà de cela, googler PHP compiler
trouve un certain nombre de solutions tierces.
bcompiler_write_exe_footer()
)La réponse courte est non".
L'implémentation actuelle de PHP est celle d'un langage interprété. Vous pouvez argumenter les aspects théoriques du fait que n'importe quel langage peut être interprété ou compilé techniquement, mais dans l'état actuel des choses, les implémentations actuelles sont telles que le code PHP nécessite l'exécution d'un interprète, qui gère l'exécution. environnement.
Pour répondre à votre question sur le téléchargement de bytecode PHP pré-compilé, il est probablement possible, mais vous devrez implémenter un moyen permettant à l'interprète PHP de lire un tel fichier et de l'utiliser. il. Avec les caches d'opcode existants, cela ne semble pas être une tâche qui rapporterait beaucoup.
Depuis que la question a été posée pour la première fois, cette réponse est passée d’un "non" catégorique à une "sorte de"
http://github.com/facebook/hiphop-php/wiki
Hip Hop for PHP était un compilateur qui prenait PHP code et le transformait en C++ hautement optimisé. Apparemment, certaines fonctions ne sont pas prises en charge (par exemple, "éclaté")
J'ai trouvé cette question en cherchant plus d'informations sur la mise en œuvre de HipHop et je pensais parler plus haut :)
Cependant, depuis 2013, Facebook ne l'utilise plus et il a été abandonné en faveur de HHVM, qui n'est pas un compilateur: https://en.wikipedia.org/wiki/HipHop_for_PHP
Il y a aussi
qui a pour but
- Pour encoder l'intégralité du script dans une application propriétaire PHP
- Pour encoder des classes et/ou des fonctions dans une application propriétaire PHP
- Pour permettre la production d'applications php-gtk pouvant être utilisées sur des postes de travail clients, sans avoir besoin d'un php.exe.
- Réaliser l'étude de faisabilité pour un convertisseur PHP en C
L'extension est disponible auprès de PECL.
Si vous cherchez simplement à produire un exécutable binaire à partir d'un script PHP, évitez donc de tenter de rendre votre question extrêmement précise, car cela ferait apparaître que vous savez exactement ce dont vous avez besoin. En outre, la plupart des PHP développeurs n'ont absolument aucune idée de ce qu'est un bytecode.
Cela dit, la réponse est OUI. Je viens de terminer la compilation d'un script PHP en binaire. Et pas n'importe quel binaire. J'ai utilisé le application CDE (lien vers Wayback Machine, le lien d'origine est maintenant cassé) pour le transformer en un binaire portable pouvant être distribué avec toutes les dépendances et exécuté sans aucun problème… et cela fonctionne à merveille.
Tout ce dont vous avez besoin est d'utiliser phc .
phc vous permet de compiler des programmes PHP dans des bibliothèques partagées, qui peuvent être téléchargées sur le serveur. Le programme PHP est compilé en binaires. Ceci est fait de manière à supporter eval
s, include
s et toute la bibliothèque standard PHP.
Euh, n'importe qui a entendu parler de Zend Guard , qui fait exactement ce que cette personne demande. Il code/obscurcit le code PHP en "code machine".
Il existe plusieurs "compilateurs" de PHP code. La plupart d'entre eux ne supportent pas toutes les fonctionnalités de PHP, celles-ci devant simplement être interprétées lors de l'exécution.
Nous utilisons Phalanger - http://www.php-compiler.net/ - qui prend en charge même les fonctionnalités dynamiques sales PHP et est toujours en mesure de les compiler. NET Assembly, qui peut être distribué en tant que DLL autonome.
Dans php 7, il y a l'option inp (php) ini opcache.file_cache qui enregistre le bytecode dans un dossier spécifique. In pourrait être utile dans php script cli qui sont "compilés" et enregistrés dans un dossier spécifique pour une réutilisation optimisée.
Opcache ne compile pas mais est quelque chose de similaire.
voir 5.5.x avec le module OPcache intégré, volatile dans une mémoire partagée, beaucoup plus de performances et le principe de dynamisme de php restent inchangés.
PHP n'est pas vraiment compilé comme avec beaucoup de programmes. Vous pouvez cependant utiliser l'encodeur de Zend pour le rendre illisible.