从5.2.17升级到5.3.27时引入了PHP错误

时间:2013-12-10 22:17:05

标签: php internal-server-error

环境: Windows Server 2012运行Parallel的Plesk v11.5.30更新#25,最后更新于2013年12月6日上午01:58。

我有一个PHP脚本,适用于PHP版本5.2.17,但当我切换到PHP版本5.3.27时,我在一段代码上遇到500服务器错误。

我在标题首字母的顶部使用正确的语法,第一项脚本,以显示错误但不起作用。

ini_set('display_errors', 'On');
error_reporting(E_ALL);

以下是有问题的代码:

MyScript.php

<?php
     // Include PHP scripts.
     include_once( "../Scripts/Header.php" );
     ...

的header.php

<?php
    ini_set('display_errors', 'On');
    error_reporting(E_ALL);
    ...
    include_once("myPeople.php");
    include_once("Tools.php");
    ...

Tools.php(功能片段)

// Create the needed objects.
$oPeople = new myPeople($IdPerson);

// Handle the request.
$oPeople->IsVerified($IdPerson, &$IdVerified);

IsVerified()方法可以解决问题。奇怪的是,我只包含文件,而不是执行它。我试着注释掉这个函数,只是有一个空函数,但这没有帮助。唯一有帮助的就是注释掉这条线。

function IsVerified($IdPerson, &$IdVerified)
{
}

所以我的问题是:

  1. PHP版本5.3.17(以及更高版本,因为我试过5.4.16和同样的问题)导致脚本跳闸的内容发生了什么变化?
  2. 为什么我不能再看到任何错误消息,即使我启用了错误消息?

1 个答案:

答案 0 :(得分:3)

这是因为您在运行时通过引用传递。这在以前的PHP版本中产生了waringn,从PHP 5.4开始,这是一个致命的错误。请查看此示例:http://3v4l.org/dQWEt

您需要更改此行:

$oPeople->IsVerified($IdPerson, &$IdVerified);

为:

$oPeople->IsVerified($IdPerson, $IdVerified);

你当然应该解决这个问题,因为在下次升级之后这将是一个致命错误,但是,你只是升级到5.3,因此不应该导致致命的错误。您是否使用set_error_handler()注册了自定义错误处理程序?这可能是您没有看到任何错误消息的原因,并且已弃用的消息会导致HTTP 500响应。