240 votes

Pouvez-vous "compiler" du code PHP et télécharger un fichier binaire qui sera simplement exécuté par l'interpréteur de code d'octet ?

Je sais que PHP est compilé en byte code avant d'être exécuté sur le serveur, et qu'ensuite ce byte code peut être mis en cache afin que l'ensemble du script n'ait pas à être réinterprété à chaque accès web.

Mais pouvez-vous "compiler" du code PHP et télécharger un fichier binaire qui sera simplement exécuté par l'interpréteur de codes d'octet ?

0 votes

Une question connexe : Compilateur PHP pour Windows

3 votes

Veuillez ne pas étiqueter ceci avec hhvm ni hiphop . HHVM n'est pas une partie inhérente de la question, juste une réponse possible. meta.stackexchange.com/a/149347/238706

0 votes

@HalayemAnis Je pense que vous avez mentionné un mauvais lien Pouvez-vous fournir le lien correct pour ce tutoriel ? ou une dernière mise à jour ?

247voto

Frank Farmer Points 16159

Après que cette question ait été posée, Facebook a lancé HipHop pour PHP qui est probablement le compilateur PHP le mieux testé à ce jour (puisqu'il a fait tourner l'un des dix plus grands sites web du monde). Cependant, Facebook l'a abandonné au profit de HHVM, qui est une machine virtuelle et non un compilateur.

Au-delà de ça, googler PHP compiler fait apparaître un certain nombre de solutions tierces.

PeachPie

  • PeachPie GitHub
  • compile PHP vers .NET et .NET Core
  • peut être compilé dans un fichier binaire autonome
  • fonctionne sur Mac, Linux, Windows, Windows Core, ARM, ...

Phalanger

  • GitHub (télécharger), Wikipedia
  • compile vers .NET (CIL) semble abandonné depuis juillet 2017 et ne semble pas supporter PHP 7.

phc

  • compile en binaires natifs
  • pas très actif actuellement (février 2014) - dernière version en 2011, dernière modification en été 2013

Compilateur PHP Roadsend

bcompilateur

  • Extension PECL de PHP
  • expérimental
  • compile le bytecode PHP, mais peut l'envelopper dans un binaire Windows qui charge l'interpréteur PHP (cf. bcompiler_write_exe_footer() manuel )
  • semble abandonné maintenant (février 2014) - dernier changement en 2011

Projet zéro

  • Wikipedia , IBM
  • incubateur de changements pour WebSphere sMash
  • soutenu par IBM
  • compile en bytecode Java
  • ne semble plus exister aujourd'hui (février 2014) - site web en panne, ressemble au grand succès de 2008 et 2009.

Bambalam

  • compile en binaires Windows autonomes
  • les binaires contiennent du bytecode et un lanceur
  • semble abandonné maintenant (février 2014) - dernier changement en 2006

BinaryPHP

  • compile en C++
  • semble abandonné maintenant (février 2014) - dernier changement en 2003

0 votes

Qu'en est-il de l'hôte web partagé ? Pourrais-je compiler mon script PHP avec l'un de ces compilateurs, puis le télécharger sur mon hôte web basé sur linux ?

2 votes

Cela dépend de votre hôte, mais si je devais deviner, je dirais que beaucoup d'hôtes ne le permettent pas.

2 votes

Aucun des projets ci-dessus ne semble plus être maintenu. Existe-t-il un compilateur généralement accepté depuis les deux dernières années ou pourquoi tous ces projets sont-ils négligés/abandonnés ?

22voto

zombat Points 46702

La réponse courte est "non".

L'implémentation actuelle de PHP est celle d'un langage interprété. Vous pouvez discuter des aspects théoriques du fait que tout langage peut techniquement être interprété ou compilé, mais en l'état actuel des choses, les implémentations actuelles sont telles que le code PHP nécessite un interpréteur pour fonctionner, et l'interpréteur gère l'environnement d'exécution.

Pour répondre à votre question sur le téléchargement de bytecode PHP pré-compilé, c'est probablement possible, mais vous devrez implémenter un moyen pour l'interpréteur PHP de lire un tel fichier et de travailler avec lui. Avec les caches d'opcode déjà existants, cela ne semble pas être une tâche très rentable.

3 votes

Il est souvent nécessaire d'avoir un interpréteur pour exécuter correctement les programmes PHP, mais cela ne veut pas dire qu'un compilateur ne peut pas le fournir dans le code compilé. phc (phpcompiler.org) gère tous les problèmes que vous décrivez. Pour autant que je sache, Roadsend (roadsend.com) le fait aussi.

30 votes

Cette réponse est périmée : HipHop est sorti 6 mois après qu'elle ait été postée, en février 2010.

1 votes

@FrankFarmer Avez-vous eu une expérience avec HipHop ? Est-ce que HipHop fonctionne correctement avec include et require ? Par exemple, si un script PHP est habituellement inclus avec include( 'controller/' . $controller_name . '.php' ) Est-ce que cela fonctionnera automatiquement avec HipHop ? Merci.

15voto

Alex C Points 3409

Depuis que la question a été posée, la réponse a changé, passant d'un "non" catégorique à un "en quelque sorte".

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

Hip Hop for PHP était un compilateur qui prenait le code PHP et le transformait en C++ hautement optimisé. Apparemment, certaines fonctions ne sont pas supportées (par exemple 'explode').

J'ai trouvé cette question en cherchant plus d'informations sur la façon de mettre en œuvre le HipHop et j'ai pensé que je devais en parler :)

Depuis 2013, Facebook ne l'utilise cependant plus, et il a été abandonné au profit de HHVM, qui n'est pas un compilateur : https://en.wikipedia.org/wiki/HipHop_for_PHP

3 votes

C'est ce qu'utilise facebook je crois

0 votes

Le "genre de" se situe maintenant quelques années en arrière et comme HHVM (HipHop Php) s'améliore de jour en jour, il y a finalement un moyen (je pense). En utilisant HHVM, il est aujourd'hui possible de pre-analyze le code php. En conséquence, vous obtenez un fichier de cache binaire. Avec ce fichier et la configuration correcte de HHVM, il est possible d'exécuter une page Web uniquement avec le bytecode, plus besoin des fichiers sources ;)<br>J'espère avoir bien compris.

0 votes

@Andrea, qu'entendez-vous par HHVM déprécié ? Il semble maintenu et vivant en tant que projet. Ou voulez-vous dire que le nom a changé de Hip Hop for PHP à HHVM ? Dans ce cas, parler de dépréciation est trompeur.

11voto

Gordon Points 156415

Il existe également

qui vise

  • Pour encoder tout le script dans une application PHP propriétaire
  • Pour encoder certaines classes et/ou fonctions dans une application PHP propriétaire
  • Permettre la production d'applications php-gtk qui pourraient être utilisées sur les bureaux des clients, sans avoir besoin d'un php.exe.
  • Faire l'étude de faisabilité d'un convertisseur de PHP en C

L'extension est disponible auprès de PECL.

8voto

Paul Biggar Points 7108

phc vous permet de compiler les programmes PHP en bibliothèques partagées, qui peuvent être téléchargées sur le serveur. Le programme PHP est compilé en binaires. C'est fait de manière à supporter eval s, include et l'ensemble de la bibliothèque standard de PHP.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X