执行PHP CLI脚本出现预期输出同时报错的原因与解决方法求助
问题原因
你遇到的报错是系统没有正确识别PHP解释器的Shebang声明,直接用默认Shell执行了PHP脚本导致的:
Shell执行到<?php echo "Hello world of PHP CLI!"; ?>这行时,会把左尖括号<识别为输入重定向符号,尝试读取名为?php的文件作为输入,所以抛出第一行?php: No such file or directory的错误;中间的echo "Hello world of PHP CLI!"语句刚好是Shell也支持的语法,被Shell正常执行输出了预期内容;最后的?>不符合Shell语法,就抛出了后续的语法错误。
常见导致Shebang失效的场景有2种:
- 脚本第一行的Shebang(
#!/usr/bin/php -q)前存在多余内容:包括不可见的UTF-8 BOM头、空格、制表符,或前面有空行,导致系统无法识别#!开头的解释器声明 - 脚本使用了Windows格式的CRLF换行符,Shebang行末尾的
\r不可见字符会被系统当成解释器路径的一部分,找不到/usr/bin/php\r这个程序,fallback到Shell执行脚本
解决方案
按照优先级依次排查即可:
- 首先确认Shebang行是文件的第一行,且行首没有任何空格、空行
- 转换脚本的换行符为Unix格式的LF:可以用
dos2unix test.php命令直接转换,也可以在编辑器的右下角设置换行格式为LF后重新保存文件 - 如果是UTF-8 BOM导致的问题,用编辑器把文件编码改为「UTF-8 无BOM」格式后重新保存即可
- 验证修改结果:修改完成后执行
./test.php,只会输出Hello world of PHP CLI!就说明修复成功
内容的提问来源于stack exchange,提问作者user7375077
相关产品推荐
相关产品推荐

