140 votes

Convertir un script PHP en un exécutable Windows autonome

Je veux automatiser une tâche assez simple. Pour cela, j'ai écrit un petit script PHP que je lance depuis la ligne de commande en utilisant PHP-CLI. Maintenant, je veux remettre ce script à quelqu'un mais je ne veux pas le faire :

  • donner le code source
  • demandez-lui d'installer PHP sur le système

Existe-t-il un moyen de créer une version .exe du script de PHP. Je ne suis pas vraiment préoccupé par la décompilation ; je suis plus inquiet de demander aux gens d'installer et de configurer PHP.

2 votes

Avez-vous entendu parler de bamcompile (r) ?

1 votes

J'utilise Bambalam depuis un certain nombre d'années. Il est bloqué depuis une éternité maintenant - et plus précisément, il n'est compatible qu'avec PHP4.4.4. Cependant, tant que vous n'avez pas besoin du support UTF8 et autres, et que vous pouvez supporter les foreach() cassés et quelques autres, cela devrait fonctionner pour vous. Notez qu'il est impossible de gérer, par exemple, les noms de fichiers UTF8 dans un répertoire, avec PHP4.4.4. Rappelez-vous également qu'il crée des fichiers dans %TEMP% qui ne sont jamais supprimés (php[0-F]{2}.tmp), vous devrez les nettoyer.

0 votes

Les binaires de PHP peuvent être portés. Vous pouvez simplement dire aux gens d'extraire un dossier entier et de créer un fichier batch qui exécute quelque chose comme "php.exe -c php.ini script.php".

201voto

Mark Baker Points 90240

Peachpie

http://www.peachpie.io

https://github.com/iolevel/peachpie

Peachpie est un compilateur PHP 7 basé sur Roslyn de Microsoft et s'inspirant du populaire Phalanger. Il permet d'exécuter PHP dans .NET/.NETCore en compilant le code PHP en MSIL pur.

Phalanger

http://v4.php-compiler.net/

http://wiki.php-compiler.net/Phalanger_Wiki

https://github.com/devsense/phalanger

Phalanger est un projet qui a été lancé à l'Université Charles à Prague et qui a été soutenu par Microsoft. Il compile le code source écrit dans le langage de script PHP en byte-code CIL (Common Intermediate Language). Il gère le début d'un processus de compilation qui est complété par le composant compilateur JIT du .NET Framework. Il ne s'occupe pas de la génération de code natif ni de l'optimisation. Son but est de compiler les scripts PHP en assemblages .NET, unités logiques contenant du code CIL et des méta-données.

Bambalam

https://github.com/xZero707/Bamcompile/

Bambalam PHP EXE Compiler/Embedder est un outil gratuit en ligne de commande pour convertir les applications PHP en applications Windows .exe autonomes. Les fichiers exe produits sont totalement autonomes, pas besoin de dlls php, etc. Le code php est encodé à l'aide de la bibliothèque Turck MMCache Encode. C'est donc une solution parfaite si vous souhaitez distribuer votre application tout en protégeant votre code source. Le convertisseur est également adapté à la production de fichiers .exe pour les applications PHP fenêtrées (créées en utilisant par exemple la bibliothèque WinBinder). Il est également utile pour créer des serveurs/clients PHP Socket autonomes (en utilisant l'extension php_sockets.dll). Ce n'est PAS vraiment un compilateur dans le sens où il ne produit pas de code machine natif à partir de sources PHP, mais il fonctionne !

ZZEE PHPExe

http://www.zzee.com/phpexe/

ZZEE PHPExe compile les fichiers PHP, HTML, Javascript, Flash et autres fichiers web en exes GUI Windows. Vous pouvez développer rapidement des applications Windows GUI en utilisant le paradigme web familier de PHP. Vous pouvez utiliser le même code pour les applications en ligne et Windows avec peu ou pas de modifications. Il s'agit d'un produit commercial.

phc-win

http://wiki.swiftlytilting.com/Phc-win

L'extension PHP bcompiler est utilisée pour compiler le code PHP script en bytecode PHP. Ce bytecode peut être inclus comme n'importe quel fichier php tant que l'extension bcompiler est chargée. Une fois que tous les fichiers de bytecode ont été créés, un Embeder modifié est utilisé pour emballer tous les fichiers du projet dans l'exe du programme.

Nécessite

  • php5ts.dll
  • php_win32std.dll
  • php_bcompiler.dll
  • php-embed.ini

ExeOutput

http://www.exeoutput.com/

Commercial

WinBinder

http://winbinder.org/

WinBinder est une extension open source de PHP, le langage de programmation script. Il permet aux programmeurs PHP de créer facilement des applications Windows natives, produisant des résultats rapides et gratifiants avec un minimum d'efforts. Même de courts scripts de quelques dizaines de lignes peuvent générer un programme utile, grâce à la puissance et à la flexibilité de PHP.

PHPDesktop

https://github.com/cztomczak/phpdesktop

PHP Desktop est un projet open source fondé par Czarek Tomczak en 2012 pour fournir un moyen de développer des applications de bureau natives en utilisant des technologies web telles que PHP, HTML5, JavaScript et SQLite. Ce projet est plus qu'un simple compilateur PHP vers EXE, il intègre un navigateur web (Internet Explorer ou Chrome embarqué), un serveur web Mongoose et un interpréteur PHP. Le flux de travail de développement auquel vous êtes habitué reste le même, l'étape consistant à transformer un site web existant en une application de bureau est essentiellement une question de copie dans le répertoire "www/". L'utilisation de la base de données SQLite est facultative, vous pouvez intégrer une base de données mysql/postgresql dans le programme d'installation de l'application.

PHP Nightrain

https://github.com/kjellberg/nightrain

Grâce à PHP Nightrain, vous serez en mesure de déployer et d'exécuter des applications web HTML, CSS, JavaScript et PHP en tant qu'application de bureau native sur les systèmes d'exploitation Windows, Mac et Linux. Les Frameworks PHP les plus populaires (par exemple CakePHP, Laravel, Drupal, etc ) sont bien supportés !

phc-win "fork" (fourchette)

https://github.com/RDashINC/phc-win

Une version plus ou moins bifurquée de phc-win, elle utilise les mêmes techniques que phc-win mais supporte presque toutes les versions modernes de PHP. (5.3, 5.4, 5.5, 5.6, etc) Il peut aussi utiliser Enigma VB pour combiner la dll php5ts.dll avec votre exe, ainsi que le compresser avec UPX. Enfin, il a win32std et winbinder compilés statiquement dans PHP.

EDIT

Une autre option consiste à utiliser

http://www.appcelerator.com/products/titanium-cross-platform-application-development/

un compilateur en ligne capable de créer des exécutables pour un certain nombre de plates-formes différentes, à partir d'un certain nombre de langages différents, dont le PHP.

TideSDK

http://www.tidesdk.org/

TideSDK est en fait le projet Titanium Desktop renommé. Titanium est resté concentré sur le mobile, et a abandonné la version desktop, qui a été reprise par certaines personnes qui l'ont mis en open source et l'ont baptisé TideSDK.

En général, TideSDK utilise HTML, CSS et JS pour rendre les applications, mais il prend en charge les langages de script comme PHP, en tant que module d'extension, ainsi que d'autres langages de script comme Python et Ruby.

0 votes

Je peux confirmer que phc-win fonctionne pour créer un fichier console exe avec le code PHP 5.3. Il suffit d'avoir le script PHP dans le même dossier que l'exe de php-win.

0 votes

J'ai utilisé le compilateur bambalam. Il est plutôt cool et facile et supporte aussi win-builder, mais ne supporte pas php5 :(

0 votes

PHP-Nightrain est une très bonne alternative à PHPDesktop - et est multiplateforme (Windows, OSX, Linux). Alors qu'il avait une mauvaise réputation à cause de sa dépendance à Java, il a maintenant adopté Python comme enveloppe, et est un très bon choix pour développer des logiciels multiplateformes basés sur PHP. -- github.com/naetech/nightrain

12voto

toster-cx Points 1276

J'ai eu des problèmes avec la plupart des outils dans les autres réponses car ils sont tous très dépassés.

Si vous avez besoin d'une solution qui "fonctionne", emballez une version de base de php avec votre projet dans une archive SFX WinRar, configurez-la pour qu'elle extraie tout dans un répertoire temporaire et exécutez php your_script.php .

Pour exécuter un script de base, les seuls fichiers requis sont les suivants php.exe et php5.dll (ou php5ts.dll selon la version).

Pour ajouter des extensions, emballez-les avec un fichier php.ini :

[PHP]
extension_dir = "."
extension=php_curl.dll
extension=php_xxxx.dll
...

0 votes

Bonjour, votre solution est très intéressante. Elle est similaire au serveur web quickphp. Avez-vous un exemple simple pour cela ? J'espère que vous pourrez fournir une source. Bonne idée d'ailleurs.

0 votes

C'est vraiment intéressant ! Mais le truc c'est que l'OP ne veut pas "donner le code source", et même un débutant pourrait juste extraire le script de SFX.

9voto

J'ai essayé la plupart des solutions données dans la première réponse, la seule qui me reste est la suivante qui a fonctionné pour moi et est non-commercial est php-desktop .

Je place simplement mes fichiers php dans le répertoire www/ a changé le nom du dossier .exe et j'ai pu exécuter mon php comme un exe ! !!

Il existe également une documentation complète, un support à jour, une compatibilité avec Windows et Linux (et bientôt Mac) et les options peuvent être facilement modifiées.

2 votes

PHP Desktop supporte maintenant Linux, voir sa version initiale : github.com/cztomczak/phpdesktop/releases/tag/linux-v72.0

7voto

dkellner Points 818

RapidEXE est exactement pour ce travail :

Il convertit un projet php en un exe autonome. J'en ai eu assez de tous les autres compilateurs, je les ai essayés un par un et ils m'ont tous déçu d'une manière ou d'une autre. Soyez mon invité, les commentaires sont toujours les bienvenus !

Remarque : le mécanisme qui le sous-tend est assez similaire à l'approche de WinRAR SFX : extraire le moteur, extraire la source, puis exécuter. C'est juste plus rapide et plus facile à utiliser. Compilation en une seule commande, compressé, déballage intelligent, nettoyage automatique, configuration facile, contrôle complet du moteur et de la version php ; également extensible avec un effort minimal.

Bon développement !

0 votes

J'ai essayé d'utiliser votre outil mais j'obtiens l'erreur suivante Cannot find myself (D:\Desktop\phpflexer\phpflexer.exe)

0 votes

C'est prometteur mais pourriez-vous y ajouter quelques bibliothèques ? Par exemple, j'ai besoin de GD2 pour que mes scripts puissent fonctionner sur des images.

0 votes

@Tom : bien sûr, il y a une nouvelle version et si vous avez envie de la tester, je peux vous donner un lien de téléchargement. (Pas de malware, je te le promets.) C'est en fait beaucoup mieux maintenant et c'est php 7.2, de plus je pense qu'il sera capable de gérer d'autres langues. Mon gmail est kellnerdenes.

3voto

djot Points 2308

http://winbinder.org/

"WinBinder est une nouvelle extension open source pour PHP, le langage de programmation script. Elle permet aux programmeurs PHP de créer facilement des applications Windows natives."

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