将我的MAMP PRO(在OS X Yosemite 10.10.3上)更新到最新版本3.2.1后,它停止显示错误。在MAMP PRO中,您可以在PHP选项卡上的GUI中设置错误显示选项。那里的所有东西都有一个复选框(它用德语表示,但它表示类似"所有错误" [已选中],"显示" [已选中])。
当我检查phpinfo()时,display_errors
为On
而error_reporting
为32767
(应该等同于E_ALL
)。
但是,如果我执行array_merge(false, array())
之类的操作,我就不会收到任何错误。如果我错过了分号(语法错误),我会得到一个空白页面。
我尝试完全删除MAMP PRO并重新安装多次,即使重新启动后也无济于事。所有"解决方案"在那里说你应该放display_errrors = On
和error_reporting = E_ALL
这就是我所拥有的,它也使用我用phpinfo()验证的正确的php.ini。
当我把
error_reporting(E_ALL);
ini_set('display_errors', 'On');
在我的PHP代码中,就在错误之上,例如对于array_merge(false, array())
,我终于得到一条错误消息"消息:array_merge():参数#1不是数组"这是我的期望,但我希望得到该消息,而不必在我的PHP代码中使用ini_set。此外,即使使用此方法,语法错误仍未显示。
我在这上花了几个小时,非常感谢任何帮助来解决这个问题。
答案 0 :(得分:1)
好的,我终于明白了。我正在使用的应用程序是使用Codeigniter,而在index.php中,ENVIRONMENT
常量被错误地设置为' production'然后将error_reporting设置为0,如下所示:
case 'production':
error_reporting(0);
break;
将ENVIRONMENT
常量设置为'开发'后,它会按预期工作。
那为什么在升级到最新的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的更改日志说:
每个主机都在/ etc / hosts
中获取IPv6条目:: 1
非常棘手的东西。我现在使用$_SERVER['HTTP_HOST']
代替$_SERVER['SERVER_ADDR']
来设置ENVIRONMENT
常量。