问题 PHP升级后第0行的未知错误[关闭]


我如何解决这个奇怪的问题呢?我在我的VPS上将PHP更新到5.6.0,现在在这个特定的脚本上,当我之前没有得到它们时,我得到了这两个错误,而且他们真的不给我任何东西。

<br />
<b>Deprecated</b>:  Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in <b>Unknown</b> on line <b>0</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent in <b>Unknown</b> on line <b>0</b><br />

此脚本只是通过一些命令运行各种服务的状态 shell_exec 并以JSON的形式返回响应。它不会使用任何帖子数据,甚至不包含 $_POST 在文件中。我脚本中的第一件事是:

<?php

error_reporting(0);

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

我注释掉了最后一行,并且仍然收到有关修改标题信息的警告。我不知道为什么这些错误会在旧版本(5.5.16)上正常工作时出现


3709
2017-09-22 23:31


起源

您需要修复错误消息中描述的第一个问题 - John Conde
那么当你做了消息所说的并编辑了php.ini并将'always_populate_raw_post_data'设置为'-1'时发生了什么?
这个问题似乎是偏离主题的,因为答案是在问题本身中提供的
刚遇到同样的问题。可以通过在没有发布数据的情况下发出jquery post请求来复制。添加帖子数据解决了这个问题。 $ HTTP_RAW_POST_DATA不在任何地方使用。不知道为什么,现在没有时间调查,但认为值得一提 - Steve
@WilliamStam我进一步挖了一下,原来是一个php 5.6 bug,可能不会修复: bugs.php.net/bug.php?id=66763  HTTP_RAW_POST_DATA 不必在用户代码中用于触发错误。唯一的解决方案是更改ini变量,如果您没有访问权限,请自己或唠叨主机。我已经投票重新开放,因此可以提供更好的答案 - Steve


答案:


一旦将文本输出到浏览器,就不能使用header()。通过在错误消息中说:

在php.ini中将'always_populate_raw_post_data'设置为'-1'并使用php://输入流代替

你应该摆脱那些错误输出。


8
2017-09-22 23:38



我不知道你为什么被投票,你的回答是正确的(我会在一会儿之后将其标记为正确)。我认为我正在做的是触发警告。 - Ian Spence
@ecnepsnai很高兴它有所帮助 - Adam Sinclair
好吧,它的正确性重复了警告告诉你的事情。 - 但有些人我猜需要被告知两次;-)


$HTTP_RAW_POST_DATA 不推荐使用(这会导致标题出现问题)

尝试这个:

<?php
$postdata = file_get_contents("php://input");
?> 

http://php.net/manual/en/reserved.variables.httprawpostdata.php


5
2017-09-22 23:44