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

PHP脚本Shebang行被include时输出内容的问题及解决咨询

问题原因

这不是PHP的bug,是正常行为:

  • PHP只会解析<?php和?>标签之间的代码,标签之前的所有文本都会直接输出到终端或网页。
  • PHP CLI在直接执行脚本时,会自动跳过第一行以#!/开头的shebang行,所以命令行执行时不会输出这行;但当用include引入脚本时,PHP不会跳过这行,因此会被当作普通文本输出。
解决方案

可以通过判断脚本是否被引入,结合输出缓冲来过滤掉shebang行,既保留命令行直接执行的能力,又避免include时输出多余内容。

修改你的mytest.php如下:

#!/usr/bin/env php
<?php
// 判断当前脚本是否被其他文件include
$isIncluded = (__FILE__ !== $_SERVER['SCRIPT_FILENAME']);

if ($isIncluded) {
    // 开启输出缓冲,捕获所有输出内容
    ob_start();
}

// --------------------------
// 这里写你的业务代码
echo "测试内容";
// --------------------------

if ($isIncluded) {
    // 获取缓冲内容并清理缓冲
    $output = ob_get_clean();
    // 移除开头的shebang行
    $output = preg_replace('/^#!/usr/bin/env php\s+/', '', $output);
    // 输出处理后的内容
    echo $output;
}

原理说明

  • 当直接执行./mytest.php时,__FILE__等于$_SERVER['SCRIPT_FILENAME'],不会触发缓冲逻辑,PHP CLI自动忽略shebang行,正常输出业务内容。
  • 当被include时,开启输出缓冲捕获所有内容(包括shebang行),然后通过正则移除开头的shebang行,再输出处理后的内容,避免多余输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:00:59