【问题标题】:PHP - Why does the system() method add a header also?PHP - 为什么 system() 方法还要添加标题?
【发布时间】:2015-03-25 11:47:25
【问题描述】:

我正在创建一个 php 图片上传脚本。该脚本发送一个 post 请求并且(应该)收到一个 json 响应。

这是检查 mime 类型的行。

$mimetype = system("file -bi -- ".escapeshellarg($_FILES["file"]["tmp_name"])); //line 63

几行之后,我设置了 JSON 标头:

header('Content-Type: application/json'); //line 124

但是 js 不起作用。在 chrome 中检查网络选项卡:

【问题讨论】:

    标签: php json system


    【解决方案1】:

    这是因为system() 函数将所有内容从 shell 写入脚本输出(类似于自动回显)。在从脚本发送一些输出并且它发生后,您不能使用 header() - system() 发送输出(警告之前网络选项卡中的“image/png; charset=binary”)。

    尝试改用exec()

    【讨论】:

    • 但是如果系统不发送到html文件,以及到标准输出,为什么html文件部分会受到影响?
    • PHP 脚本在第一个字符写入标准输出后自动发送标题。 system() 函数的行为类似于 echo 并且它“回显”在 shell 中生成的命令输出。这就是为什么当前发送标头并且您不能再使用 header() 的原因。在 system() 之前调用 header() 并且警告应该消失。
    • 根据此文档http://php.net/manual/en/wrappers.php.php。它不完全写入标准输出php://stdout,而是写入php://output。脚本写入php://output 的所有内容都会作为响应的一部分发送回客户端。
    【解决方案2】:

    它自己不发送headers,它只是发送执行结果,一旦发送,发送headers就来不及了。

    我建议首先发送标头,或者按照@kbarborak 的建议使用 exec() 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多