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

标签 php internal-server-error

环境: 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)
{
}

所以我的问题是:

  1. 在 PHP 5.3.17 版(和更高版本,因为我尝试了 5.4.16 和同样的问题)中有什么变化导致脚本运行失败?
  2. 为什么我再也看不到任何错误消息,即使我启用了错误消息?

最佳答案

这是因为您在运行时通过引用传递。这在以前的 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/

相关文章:

php: 从表单元素中读取属性

php - 如何知道最近对 MySQL 创建的条目的 id(自增)?

php - 从价格数据集中移除异常值的算法

javascript - 我的 PHP/PDO 查询本应返回 9 条记录,但只返回 7 条记录

Heroku 上的 Symfony 产生 500 Internal server error 但没有消息

ruby-on-rails - 在 Rails 中提交嵌套表单时出现 500 Internal Server Error

php - 表单提交遗漏了一个值

c# - WWW POST 给我内部服务器错误

wordpress - wp 管理、更新和插件 (Wordpress) 中的 500 内部服务器错误

ASP.NET:HTTP 错误 500.19 – 内部服务器错误 0x8007000d