环境: Windows Server 2012 运行 Parallel 的 Plesk v11.5.30 Update #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" );
...
标题.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)
{
}
所以我的问题是:
- 在 PHP 5.3.17 版(和更高版本,因为我尝试了 5.4.16 和同样的问题)中有什么变化导致脚本运行失败?
- 为什么我再也看不到任何错误消息,即使我启用了错误消息?
最佳答案
这是因为您在运行时通过引用传递。这在以前的 PHP 版本中产生了一个警告,从 PHP 5.4 开始它是一个 fatal error 。检查此示例:http://3v4l.org/dQWEt
你需要改变这一行:
$oPeople->IsVerified($IdPerson, &$IdVerified);
到:
$oPeople->IsVerified($IdPerson, $IdVerified);
您当然应该修复此问题,因为在下次升级后这将是一个 fatal error ,但是,您只是升级到 5.3,因此这不应导致 fatal error 。您是否使用 set_error_handler()
注册了自定义错误处理程序?这可能是您看不到任何错误消息并且不推荐使用的消息导致 HTTP 500 响应的原因。
关于从 5.2.17 升级到 5.3.27 时引入的 PHP 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20506510/