You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP CLI -B选项执行后主脚本未运行且进程阻塞问题排查

问题:PHP CLI使用-B选项后主脚本阻塞不执行

在Linux Shell中执行PHP解释器时,使用-B选项指定初始化代码后,初始化代码已执行,但进程陷入阻塞,主脚本f2.php并未运行。问题复现步骤如下:

$ php -v
PHP 8.1.13 (cli) (built: Nov 22 2022 14:42:07) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.13, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.13, Copyright (c), by Zend Technologies
$ cat f2.php 
<?php
 echo "f2 running.\n";
?>
$ php f2.php 
f2 running.
$ php  -B 'echo "init
";' f2.php 
init

执行后Shell陷入阻塞,需按下ctrl+C才能回到提示符,原本预期f2.php会被正常执行。

原因与解决方法

问题出在**-B选项传递的代码中包含了实际换行符**:

在Shell单引号包裹的代码里,echo "init ";中的换行是直接输入的实际换行,这会导致PHP CLI认为你输入的初始化代码不完整,进入交互模式等待补全代码,因此进程阻塞,不会继续执行后续的f2.php。

解决方法很简单,把代码中的实际换行替换为转义换行符\n,或者将代码写在一行:

  1. 使用转义换行符:
php -B 'echo "init\n";' f2.php
  1. 将代码写在一行:
php -B 'echo "init";' f2.php

执行上述修改后的命令,初始化代码执行后,f2.php会正常运行,不会再出现阻塞。

内容的提问来源于stack exchange,提问作者jonasmike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:57:07