2011-04-29 62 views
1

我有以下代码:是否有一个PHP配置设置可以防止在设置之前使用变量?

<?php 
    if ($foo) { 
    echo $foo; 
    } 
?> 

不过,我的网页是扔一个500内部服务器错误(我知道这通常意味着有被记录一个错误,并在页面过早放弃)我没有访问错误日志(作为主机正在记录到syslog)。

我可以通过以下操作解决它:

<?php 
    if (isset($foo) && $foo) { 
    echo $foo; 
    } 
?> 

但是这不是我的问题。是否有一个服务器设置会杀死试图使用未设置变量的页面? AFAIK,它只记录一个'通知',通常不足以杀死页面。

这里是phpinfo()函数输出(声明:我没有Windows + FastCGI的设置体验)的第一位 enter image description here

更新 我添加了一个自定义错误处理程序和简单的输出$错误号和$ errstr。正如预期的那样,这是一个E_NOTICE(8),带有'Undefined variable'的消息。我猜测500内部错误与它如何记录到系统日志有关。

+1

你想让页面被杀死,还是它抛出503而你不想要它? “通知”级别的错误不会导致503.什么是503? – Cole 2011-04-29 02:33:50

+0

@Cole我添加了一个自定义错误处理程序,实际上它是E_NOTICE查杀页面。为什么,我不确定。这是我试图找出。 – DTest 2011-04-29 12:47:22

回答

4

执行custom error handler,你可以做任何你想要的(大部分)!

+0

添加了一个自定义错误处理程序,并输出$ errno和$ errstr。正如预期的那样,这是一个E_NOTICE(8),带有'Undefined variable'的消息。我猜测500内部错误与它如何记录到系统日志有关。 – DTest 2011-04-29 12:45:40

0

我不知道任何设置可以做到这一点......我怀疑其他的东西是错误的,之后,也许是因为变量没有设置。这里最好的选择是大卫建议并做一个快速的自定义错误处理程序,以便您可以获得有关实际发生情况的报告。

作为一边你的主机应该给你一些访问错误日志,即使他想发送错误到系统日志。我不认为曾经在没有提供错误日志的主机上。如果可以的话,我建议切换主机。这是每个人都期待的东西......

1

根据我的经验,第500个错误通常是由无限循环(无论是直接在代码中,还是因为无止境的重定向)造成的。或者它与display_errors设置php.ini文件有关。

如果您无法访问服务器日志,我会建议您使用VirtualBox(或其他一些虚拟化工具)并在VM中设置相同的服务器环境,然后查看日志中的确切内容。

P.S.为什么你不能在一个正常的NIX服务器上用最新的PHP版本托管你的页面?!

+0

哈。如果它是我的服务器,我会的。我正在为一个朋友调试问题:/至于display_errors,根本没有帮助(我尝试的第一件事)。自定义错误处理程序的确没有无限循环,没有语法错误......只是带有未设置变量$ foo的E_NOTICE。 – DTest 2011-04-29 13:04:18

+0

也为最新的PHP版本建议+1 – DTest 2011-04-29 13:04:49

相关问题