CLI模式下需显式启用错误显示:用php -d display_errors=1 -f script.php,或同时设error_reporting=32767;若脚本内禁用则需修改代码;调试时注意输出缓冲、换行及环境变量模拟,并正确配置XDEBUG_MODE适配PHP版本。
默认情况下,CLI 模式会隐藏 PHP 错误提示(display_errors=Off),哪怕脚本里有 parse error 也只报个空行或 Segmentation fault。必须显式开启错误输出:
-d display_errors=1 参数:比如 php -d display_errors=1 -f script.php
error_reporting:比如 php -d error_reporting=32767 -d display_errors=1 -f script.php(32767 = E_ALL)
error_reporting(0) 或 ini_set('display_errors', '0'),命令行参数会被覆盖,得去代码里删或注释掉CLI 下 var_dump() 默认不带换行和 HTML 格式,容易被后续输出“盖掉”,尤其在循环或管道中;print_r() 默认也不换行。常见表现是:明明执行了,终端却没反应。
var_dump($data); fflush(STDOUT);
var_dump($data); echo "\n";
print_r($data, true) 避免直接输出干扰流程(比如写入日志前拼接字符串)die() 就不会停住,要主动 exit; 或 die(); 中断流程看中间态很多 CLI 脚本会检查 $_SERVER['REQUEST_METHOD'] 或读取 $_ENV['APP_ENV'],直接运行会因缺失而逻辑异常。
APP_ENV=production php script.php(Linux/macOS)或
set APP_ENV=production && php script.php(Windows cmd)
$_SERVER 项:$_SERVER['REQUEST_METHOD'] = 'CLI'; $_SERVER['SCRIPT_NAME'] = __FILE__;
php_sapi_name() === 'cli' 更可靠getenv() 和 $_ENV 行为受 variables_order 影响,CLI 下默认可能不自动填充 $_ENV,优先用 getenv('KEY')
Web 版 xdebug 常配了 xdebug.mode=debug + 浏览器插件触发,但 CLI 默认不监听,也不传 XDEBUG_SESSION_START。
XDEBUG_MODE=debug php script.php
xdebug.client_host 指向你的 IDE(如 127.0.0.1),且 xdebug.client_port 和 IDE 监听端口一致(默认 9003)XDEBUG_MODE=debug,旧版的 XDEBUG_CONFIG="idekey=PHPSTORM" 已失效php -m | grep xdebug和
php -i | grep -A5 "xdebug.mode"
display_errors 和 error_reporting 是否生效,再查环境变量和 xdebug 模式是否匹配当前 PHP 版本。