如何打开仅在子文件夹中的PHP错误显示
我不希望PHP错误显示/ html,但我希望它们显示在/ html / beta / usercomponent中。一切都已设置好,因此根本不会显示错误。如何获得仅显示在该文件夹(及其子文件夹)中的错误?
解决方案
我不相信有一个简单的答案,但是我当然希望被证明是错误的。
编辑:事实证明,可以从.htaccess文件进行控制。谢谢大家! :)
不过,我们可以使用error_reporting()http://docs.php.net/manual/en/function.error-reporting.php逐个脚本地切换设置。如果我们碰巧每次都在/ html / beta / usercomponent中包含一个脚本,那么就可以解决问题。
在.htaccess
中:
php_value error_reporting 2147483647
根据文档,此数字应启用"所有"错误,无论版本如何,如果我们想要更细致的设置,请手动将值或者在一起或者运行
php -r 'echo E_ALL | E_STRICT ;'
让php为我们计算价值。
你需要
AllowOverride All
在apache主配置中以启用.htaccess文件。
可以在这里找到更多阅读内容:
- PHP /错误报告标志
- PHP /错误报告值
- PHP /不同的设置方式
注意如果我们使用的是Php-CGI而不是mod_php,则此方法可能无法像宣传的那样工作,并且我们将得到的只是内部服务器错误,除了在每个站点上启用整个站点范围内的操作之外,我们将没有其他选择。脚本基础
error_reporting( E_ALL | E_STRICT );
或者类似的构造,然后再发生错误。
我的建议是禁用向用户显示错误,并大量使用php的error_log功能。
display_errors = 0 error_logging = E_ALL | E_STRICT error_log = /var/log/php
如果我们对此过于嘈杂有疑问,这不是我们仅需要有选择地消除错误报告的征兆,而是有人应该修复代码的征兆。
罗杰
是的,我们也可以在apache配置中的<
Directory>构造中使用它,但是,这种情况下的.htaccess是等效的,并且使其更可移植,尤其是当我们具有同一代码库的多个有效结帐副本并且我们想要将此更改分发给所有人。
如果我们有多个虚拟主机,则需要在相应的虚拟主机定义中使用该构造,否则,是
<Directory /path/to/wherever/on/filesystem> <IfModule mod_php5.c> php_value error_reporting 214748364 </IfModule> </Directory>
添加的" ifmodule"命令只是一个安全网,因此,如果没有mod_php,则不会出现上述与apache dying有关的问题。
最简单的方法是控制.htaccess文件中的错误报告。但这是假设我们正在使用Apache,并且/ html / beta / usercomponent中的脚本是从该目录调用的,而不是从其他目录包含的脚本。
.htacess
php_value error_reporting [int]
我们将必须自己根据error_reporting文档中的说明从列表中编写整数值,因为在Apache解释.htaccess时未定义诸如E_ERROR之类的常量。
这是一个简单的按位标志,因此值12例如为E_WARNING + E_PARSE + E_NOTICE。
我们可以使用环境变量来完成此操作。这样,我们不仅可以为特殊目录打开/关闭错误报告,还可以有更多选择。在我们想要更改一组特定目录或者运行模式的行为的代码中,检查是否设置了环境变量。像这样:
if ($_ENV['MY_PHP_APP_MODE'] == 'devel') { // show errors and debugging info } elseif ($_ENV['MY_PHP_APP_MODE'] == 'production') { // show some cool message to the user so he won't freak out // log the errors and send email to the admin }
当我们在开发环境中运行应用程序时,可以在.htaccess文件中设置一个env变量,如下所示:
setenv MY_PHP_APP_MODE devel
或者当我们处于生产状态时:
setenv MY_PHP_APP_MODE production
同样的技术也适用于情况。在要执行特殊操作的目录(打开错误报告)中,设置一些env变量,然后在代码中进行检查。