命令行执行php-fpm代码无法得到与php cli相同结果如何解决
PHP-FPM 不支持
-r 参数的原因及解决方法 - 核心原因:
php和php-fpm是PHP的两种完全不同的SAPI(服务器应用编程接口),面向的使用场景完全不同:- 常用的
php命令是CLI(命令行接口)SAPI,专门设计用于终端场景下执行PHP脚本、单行代码,原生支持-r参数直接运行单行PHP代码,所以执行php -r 'echo php_ini_scanned_files();'可以正常返回结果。 php-fpm是FastCGI进程管理器SAPI,设计目标是和Web服务器(Nginx、Apache等)配合响应HTTP Web请求,没有设计命令行直接执行单行代码的能力,本身就不支持-r参数,传入不支持的参数时就会默认返回使用说明。
- 常用的
- 如果你需要获取php-fpm模式下加载的ini文件列表,可以用以下两种方案实现:
- 直接读取php-fpm的运行信息:执行
php-fpm -i命令输出php-fpm模式下的phpinfo内容,直接搜索Scan this dir for additional .ini files和Additional .ini files parsed字段,就能得到对应的ini扫描路径和已加载的ini文件列表。 - 模拟FastCGI请求执行代码:先创建一个临时PHP文件,比如
/tmp/get_ini.php,写入内容<?php echo php_ini_scanned_files(); ?>,再使用cgi-fcgi工具向php-fpm发起请求,命令示例如下(根据你实际的php-fpm监听地址调整,socket监听就替换为对应sock路径):SCRIPT_FILENAME=/tmp/get_ini.php REQUEST_METHOD=GET cgi-fcgi -bind -connect 127.0.0.1:9000
- 直接读取php-fpm的运行信息:执行
内容的提问来源于stack exchange,提问作者Amine
相关产品推荐
相关产品推荐

