Empaquetado binario

Webman admite empaquetar proyectos en un archivo binario, lo que permite que Webman funcione en sistemas Linux sin un entorno PHP.

Nota
Los archivos empaquetados actualmente solo son compatibles con sistemas Linux de arquitectura x86_64 y no son compatibles con sistemas Windows y Mac.
Debe desactivar la opción de configuración phar en php.ini, es decir, establecer phar.readonly = 0.

Instalación de la herramienta de línea de comandos

composer require webman/console

Empaquetado

Ejecute el comando:

php webman build:bin

También puede especificar qué versión de PHP usar para el empaquetado, por ejemplo:

php webman build:bin 8.1

Después del empaquetado, se generará un archivo webman.bin en el directorio bulid.

Inicio

Suba webman.bin al servidor Linux y ejecute ./webman.bin start o ./webman.bin start -d para iniciar.

Principio

  • Primero, empaqueta el proyecto local de Webman en un archivo phar.
  • Luego, descarga php8.x.micro.sfx de forma remota a la máquina local.
  • Combina php8.x.micro.sfx y el archivo phar en un archivo binario.

Consideraciones

  • Se recomienda encarecidamente que la versión de PHP local coincida con la versión empaquetada; por ejemplo, si la local es PHP 8.1, use PHP 8.1 para el empaquetado, para evitar problemas de compatibilidad.
  • El empaquetado descargará el código fuente de PHP 8, pero no lo instalará localmente, no afectará el entorno PHP local.
  • webman.bin actualmente solo es compatible con sistemas Linux de arquitectura x86_64 y no es compatible con sistemas Mac.
  • El proyecto empaquetado no admite reload, se requiere reiniciar para actualizar el código.
  • Por defecto, no se empaquetará el archivo env (controlado por exclude_files en config/plugin/webman/console/app.php), por lo que el archivo env debe colocarse en el mismo directorio que webman.bin al iniciar.
  • Durante la ejecución, se generará un directorio runtime en el mismo directorio que webman.binpara almacenar archivos de registro.
  • Actualmente, webman.bin no leerá el archivo php.ini externo. Si necesita un php.ini personalizado, configúrelo en el campo custom_ini del archivo /config/plugin/webman/console/app.php.
  • Algunos archivos pueden no necesitar ser empaquetados, y puede configurarlo para excluirlos en config/plugin/webman/console/app.php para evitar que el archivo empaquetado sea demasiado grande.
  • El empaquetado binario no admite el uso de corutinas de Swoole.
  • No almacene archivos subidos por el usuario dentro del paquete binario, ya que operar con archivos subidos por el usuario utilizando el protocolo phar:// es muy peligroso (vulnerabilidad de deserialización de phar). Los archivos subidos por el usuario deben almacenarse por separado en un disco fuera del paquete.
  • Si su negocio requiere subir archivos al directorio public, debe extraer el directorio public y colocarlo en el mismo directorio que webman.bin, en este caso, debe configurar config/app.php de la siguiente manera y volver a empaquetar.
    'public_path' => base_path(false) . DIRECTORY_SEPARATOR . 'public',

Descarga de PHP estático por separado

A veces, solo desea un archivo ejecutable de PHP sin desplegar el entorno de PHP. Haga clic aquí para descargar PHP estático.

Sugerencia
Si necesita especificar un archivo php.ini para PHP estático, use el siguiente comando php -c /your/path/php.ini start.php start -d.

Extensiones soportadas

Core, date, libxml, openssl, pcre, sqlite3, zlib, amqp, apcu, bcmath, calendar, ctype, curl, dba, dom, sockets, event, hash, fileinfo, filter, gd, gettext, json, iconv, SPL, session, standard, mbstring, igbinary, imagick, exif, mongodb, msgpack, mysqlnd, mysqli, pcntl, PDO, pdo_mysql, pdo_pgsql, pdo_sqlite, pdo_sqlsrv, pgsql, Phar, posix, readline, redis, Reflection, shmop, SimpleXML, soap, sodium, sqlsrv, sysvmsg, sysvsem, sysvshm, tokenizer, xlswriter, xml, xmlreader, xmlwriter, xsl, zip, memcache, Zend OPcache.

Fuentes del proyecto

https://github.com/crazywhalecc/static-php-cli
https://github.com/walkor/static-php-cli