使用php7

时间:2017-04-03 10:52:51

标签: ajax php-7 http-status-code-500

我将我的网站从php5.5切换到php7,我现在有一个非常奇怪的错误:当我做一个包含重定向的特定ajax请求时,服务器回答一个http 500错误代码,同时返回好的html内容(我可以从Chrome控制台看到它。)

当我在php5中执行完全相同的请求时,我没有更多错误。当我在没有ajax的新选项卡中在php7中执行完全相同的请求时,我没有更多错误。更奇怪的是,当我有时在我的代码中添加一个var_dump时,我没有更多的错误。

当我有500个错误代码时,我的日志中没有任何内容,并且html内容中没有显示错误。

以下是响应标题错误:

HTTP/1.1 500 Internal Server Error
Date: Mon, 03 Apr 2017 10:44:20 GMT
Server: Apache
Expires: Tue, 04 Apr 2017 10:44:20 GMT
Accept-Ranges: bytes
Set-Cookie: PHPSESSID=25e73849544a66f7512533246cde4d21; path=/
Last-Modified: Mon, 03 Apr 2017 10:44:20 GMT
Content-Length: 11718
Connection: close
Content-Type: text/html; charset=utf-8

没有错误(在我添加var_dump之后):

HTTP/1.1 200 OK
Date: Mon, 03 Apr 2017 10:45:44 GMT
Server: Apache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 3223
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

你知道可能出现什么问题吗?

1 个答案:

答案 0 :(得分:0)

我发现了问题,我使用的代码中有一个自定义异常,默认情况下启动了一个带有500个http错误的标头,但是在异常启动标头后脚本没有被杀死所以它非常很难找到它:

  public function __construct($message = "Critical error", $code = 500, Exception $previous = Null) {
    parent::__construct($message, $code, $previous);
    if($this->getHttpHeader())
      header($this->getHttpHeader());
  }

  public function getHttpHeader() {
   $header = get_header_for_code($this->getCode());
   $this->http_header = $header;
   return $this->http_header;
  }

但是我仍然不知道为什么问题只出现在php7中并且只是在某种情况下,我没有时间找到。