Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-为什么system()方法还添加了一个头?_Php_Json_System - Fatal编程技术网

PHP-为什么system()方法还添加了一个头?

PHP-为什么system()方法还添加了一个头?,php,json,system,Php,Json,System,我正在创建一个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图像上传脚本。脚本发送post请求,并且(应该)收到json响应

这是检查mime类型的行

$mimetype = system("file -bi -- ".escapeshellarg($_FILES["file"]["tmp_name"])); //line 63
在几行之后,我设置了JSON头:

header('Content-Type: application/json'); //line 124
但是js不起作用。在chrome中检查网络选项卡时:

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


尝试改用。

它本身并不发送头,它只是发送执行结果,一旦发送,就太晚了,无法发送头


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

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