Empaquetage binaire
webman permet d’empaqueter le projet en un fichier binaire unique, afin de l’exécuter sur Linux sans environnement PHP.
Remarque
Le fichier empaqueté ne fonctionne actuellement que sur des systèmes Linux x86_64. Windows et macOS ne sont pas pris en charge.
Désactivez l’option phar dansphp.inien définissantphar.readonly = 0.
Installer l’outil en ligne de commande
composer require webman/console
Empaquetage
Exécutez la commande
php webman build:bin
Vous pouvez préciser la version de PHP utilisée pour l’empaquetage, par exemple
php webman build:bin 8.1
Après l’empaquetage, un fichier webman.bin est généré dans le répertoire build.
Démarrage
Uploadez webman.bin sur votre serveur Linux et exécutez ./webman.bin start ou ./webman.bin start -d pour démarrer.
Principe
- Le projet webman local est d’abord empaqueté dans un fichier phar
- Puis php8.x.micro.sfx est téléchargé à distance
- php8.x.micro.sfx et le fichier phar sont concaténés en un fichier binaire unique
Points à retenir
- Il est fortement recommandé d’utiliser la même version de PHP en local et pour l’empaquetage (ex. PHP 8.1 pour les deux) afin d’éviter les problèmes de compatibilité
- L’empaquetage télécharge le code source de PHP 8 mais ne l’installe pas localement, donc sans impact sur l’environnement PHP local
- webman.bin ne fonctionne actuellement que sur Linux x86_64 et ne supporte pas macOS
- Les projets empaquetés ne supportent pas reload ; les mises à jour du code nécessitent un redémarrage
- Par défaut, le fichier env n’est pas empaqueté (contrôlé par exclude_files dans
config/plugin/webman/console/app.php). Au démarrage, le fichier env doit être dans le même répertoire que webman.bin - Un répertoire runtime est créé dans le répertoire de webman.bin pendant l’exécution pour stocker les logs
- webman.bin ne lit pas les fichiers php.ini externes. Pour personnaliser php.ini, configurez custom_ini dans
config/plugin/webman/console/app.php - Certains fichiers n’ont pas besoin d’être empaquetés ; configurez les exclusions dans
config/plugin/webman/console/app.phppour éviter un paquet trop volumineux - L’empaquetage binaire ne supporte pas les coroutines Swoole
- Ne stockez jamais les fichiers uploadés par les utilisateurs dans le paquet binaire. Opérer dessus via le protocole
phar://est très risqué (vulnérabilité de désérialisation phar). Les fichiers uploadés doivent être stockés séparément sur disque, en dehors du paquet - Si votre application doit envoyer des fichiers vers le répertoire public, placez le répertoire public à côté de webman.bin, configurez
config/app.phpainsi et ré-empaquetez :'public_path' => base_path(false) . DIRECTORY_SEPARATOR . 'public',
Télécharger PHP statique séparément
Si vous avez seulement besoin d’un exécutable PHP sans déployer un environnement PHP complet, téléchargez PHP statique ici.
Astuce
Pour spécifier un fichier php.ini pour PHP statique :php -c /your/path/php.ini start.php start -d
Extensions prises en charge
apcu, bcmath, bz2, calendar, Core, ctype, curl, date, dba, dom, event, exif, fileinfo, filter, ftp, gd, gmp, hash, iconv, imagick, imap, intl, json, libxml, mbstring, mysqli, mysqlnd, openssl, pcntl, pcre, PDO, pdo_mysql, pgsql, Phar, posix, protobuf, readline, redis, Reflection, session, shmop, SimpleXML, soap, sockets, sodium, SPL, sqlite3, standard, swoole, sysvmsg, sysvsem, sysvshm, tokenizer, xml, xmlreader, xmlwriter, xsl, Zend OPcache, zip, zlib
Source du projet
https://github.com/crazywhalecc/static-php-cli
https://github.com/walkor/static-php-cli