Closed wensenz closed 1 year ago
有最小复现的 phar 包吗?(如果涉及闭源代码或不方便分享的代码,建议先裁剪,或者提供一个 phar 文件打包的流程、static-php-cli 构建 micro.sfx 的流程以及运行 welldone 二进制的系统环境(架构、发行版)。
使用的系统是mac 13.4.1 (22F82), 编译的工具是 box:https://github.com/box-project/box, phar包是开源的yii2基础包:composer create-project --prefer-dist yiisoft/yii2-app-basic basic ,https://www.yiiframework.com/doc/guide/2.0/zh-cn/start-installation
phar包也可以提供, 我可以怎么发送给您?
如果不大的话,可以直接发邮件到我的邮箱 admin@zhamao.me。比较大的话可以通过任意网盘发给我。
补充下信息: 我使用的PHP版本是:8.2.8 yii2的版本是:2.0.48.1 网盘地址:链接: https://pan.baidu.com/s/1sFBVJ-VD-mMwbWKIcFUygQ?pwd=wg6h 提取码: wg6h 复制这段内容后打开百度网盘手机App,操作更方便哦
使用box打包的box.json: { "alias": "basic.phar", "chmod": "0755", "directories": [ "/Users/zhongzhengwen/www/basic" ], "finder": [ { "name": "*.php", "exclude": [ "tests", "Tests" ], "in": "/Users/zhongzhengwen/www/basic/vendor" } ], "main": "/Users/zhongzhengwen/www/basic/yii", "output": "basic.phar" }
排查了半天,可能是由于 static-php-cli 编译 PHP 时候的优化参数在部分 macOS 会导致裁剪错乱,从而导致任何 phar 包都可能无法正常执行。
但内存过大可能还是因为项目本身的原因,目前排除掉裁剪优化的问题后其他 phar 包正常,但是 basic.phar 目前我无法操作。但通过对 phpmicro 注入 ini 文件内容 memory_limit=2G
再打包项目即正常运行。
有关给 phpmicro 注入 ini 配置见 Wiki。
但目前看起来这个打包的项目无法直接运行,猜测可能是 Yii 框架启动 Web 服务是调用了 php -S
内置服务器启动运行代码,这种运行方式和传统的 php-cgi、php-fpm 类似,为每次运行代码后销毁进程内容的模式,本项目的 micro.sfx 仅支持启动 CLI 为基础的项目,例如 Workerman、Swoole、Amphp 等,如果使用 PHP_BINARY -S
方式运行的话,会出现无法找到 PHP_BINARY
的问题。目前架构下的 phpmicro 是不支持 php -S
方式运行自身代码的,只支持 CLI 项目。
Allowed memory 问题已经通过注入ini的方式解决了, 感谢!
但目前看起来这个打包的项目无法直接运行,猜测可能是 Yii 框架启动 Web 服务是调用了
php -S
内置服务器启动运行代码,这种运行方式和传统的 php-cgi、php-fpm 类似,为每次运行代码后销毁进程内容的模式,本项目的 micro.sfx 仅支持启动 CLI 为基础的项目,例如 Workerman、Swoole、Amphp 等,如果使用PHP_BINARY -S
方式运行的话,会出现无法找到PHP_BINARY
的问题。目前架构下的 phpmicro 是不支持php -S
方式运行自身代码的,只支持 CLI 项目。
我的意图也不是需要用php -s 来执行项目, 我想知道配合nginx, 我该怎么去做, @crazywhalecc 你看能不能提供一点思路
以下是源码nginx配置:
server {
charset utf-8;
client_max_body_size 128M;
listen 80; ## listen for ipv4
#listen [::]:80 default_server ipv6only=on; ## listen for ipv6
server_name mysite.test;
root /path/to/basic/web;
index index.php;
access_log /path/to/basic/log/access.log;
error_log /path/to/basic/log/error.log;
location / {
# Redirect everything that isn't a real file to index.php
try_files $uri $uri/ /index.php$is_args$args;
}
# uncomment to avoid processing of calls to non-existing static files by Yii
#location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
# try_files $uri =404;
#}
#error_page 404 /404.html;
# deny accessing php files for the /assets directory
location ~ ^/assets/.*\.php$ {
deny all;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
#fastcgi_pass unix:/var/run/php5-fpm.sock;
try_files $uri =404;
}
那我打包后应该是怎样的
如果你的项目是传统 fpm 架构的话,其实并不推荐你使用本项目将 PHP 本身打包为单一二进制,或者将 PHP 和 PHP 代码打包为一个可执行文件。如果是对于项目分发有需求要打包为单一文件的话,可以只使用 box 将项目打包为 phar,并投放到 web 目录。我记得可以直接将 phar 配置为 web 根目录,但具体配置我也不是很清楚,很久不写 fpm 的项目了。
错误如图
我用yii2 打包成执行文件提示内存不够, 原basic.phar是可用的:
我build micro.sfx 时已经尝试将php.ini改成1024M但还是提示不行
也试了将basic项目首行添加ini_set('memory_limit', '-1');, 也不行