MAMP PRO 3.2.1 未显示 PHP 个错误

MAMP PRO 3.2.1 not displaying PHP errors

将我的 MAMP PRO(在 OS X Yosemite 10.10.3)更新到最新版本 3.2.1 后,它停止显示错误。在 MAMP PRO 中,您可以在 PHP 选项卡上的 GUI 中设置错误显示选项。一切都有一个复选框(它是德语,但它说的是 "All errors" [checked],"Display" [checked])。

当我用 phpinfo() 检查时,display_errorsOnerror_reporting32767(应该等同于 E_ALL)。

但是,如果我执行类似 array_merge(false, array()) 的操作,我不会收到任何错误。如果我错过了一个分号(语法错误),我会得到一个空白页。

我尝试完全删除 MAMP PRO 并重新安装多次,即使在重新启动后也无济于事。所有 "solutions" 都说你应该放 display_errrors = Onerror_reporting = E_ALL,这是我所拥有的,而且它使用的是正确的 php.ini,我用 phpinfo() 验证了这一点。

当我把

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

在我的 PHP 代码中,就在错误上方,例如对于 array_merge(false, array()),我终于收到一条错误消息 "Message: array_merge(): Argument #1 is not an array",这正是我所期望的,但我想获得该消息而不必在我的 PHP 代码中使用 ini_set。此外,即使使用此方法,语法错误仍未显示。

我在这上面花了几个小时,非常感谢任何帮助来解决这个问题。

好吧,我终于明白了。我正在处理的应用程序正在使用 Codeigniter,在 index.php 中,ENVIRONMENT 常量被错误地设置为 'production',这又将 error_reporting 设置为 0,如下所示:

case 'production':
    error_reporting(0);
break;

一旦我将 ENVIRONMENT 常量设置为 'development',它就会按预期工作。

那么为什么升级到最新的MAMP PRO 3.2.1后会出现这种情况呢?设置 ENVIRONMENT 常量的代码检查是否 $_SERVER['SERVER_ADDR'] == '127.0.0.1' 如果为真,则将环境设置为开发:

if ($_SERVER['SERVER_ADDR'] == '127.0.0.1') {
    define('ENVIRONMENT', 'development');   
}

在最新的 MAMP PRO 中,$_SERVER['SERVER_ADDR'] 不再是 127.0.0.1,而是 ::1。 v3.2 的变更日志说:

Every host gets the IPv6 entry ::1 in /etc/hosts

非常棘手的事情。我现在使用 $_SERVER['HTTP_HOST'] 而不是 $_SERVER['SERVER_ADDR'] 来设置 ENVIRONMENT 常量。