php - 当 WP_DEBUG_LOG 设置为 true 时,debug.log 中没有显示调试输出,为什么?

标签 php debugging wordpress

我正在尝试使用 WordPress 为我正在开发的插件启用基本调试输出。到目前为止我设法得到了一些,但未能将其重定向到 wp-content/debug.log。我一直在大致关注 the guide by Douglas Neiner .这是我所做的:

我将这段代码添加到 wp-config.php 的末尾:

@ini_set ('display_errors', 0);
define ('WP_DEBUG', true);
define ('WP_DEBUG_DISPLAY', false);
define ('WP_DEBUG_LOG', true);

我手动创建了 debug.log 文件并确保它可以被 www-data 用户访问(我在本地运行 WordPress,在 Ubuntu 12.04 上):

septi@norbert:~$ sudo su www-data -c 'ls -l /usr/share/wordpress/wp-content/debug.log'
-rw-rw-r-- 1 root www-data 0 Dec  9 22:12 /usr/share/wordpress/wp-content/debug.log
septi@norbert:~$ sudo su www-data -c 'ls -l /srv/www/localhost/wp-content/debug.log'
-rw-rw-r-- 1 root www-data 0 Dec  9 22:12 /srv/www/localhost/wp-content/debug.log
septi@norbert:~$ sudo su www-data -c 'echo i can write >> /usr/share/wordpress/wp-content/debug.log'
septi@norbert:~$

在插件激活 Hook 中添加了一些假设的调试输出语句,以及故意错误:

include ('i fail wp');

register_activation_hook (__FILE__, 'hello_world_activate');

function hello_world_activate()
{
    error_log ('I love debug output when it works!');
}

我期望的是关于 debug.log 中缺少包含文件的错误消息以及“我喜欢调试输出,当它工作时!”消息,页面上没有任何内容。我得到的是页面消息中缺少包含文件,debug.log 中没有任何内容。但是,调试输出消息并没有完全丢失。我在 /var/log/apache2/error.log 中找到了它:

[Sun Dec 09 22:58:18 2012] [error] [client 127.0.0.1] PHP Warning:  include(i fail wp): failed to open stream: No such file or directory in /usr/share/wordpress/wp-content/plugins/helloworld2085/helloworld2085.php on line 28, referer: http://localhost/wp/wp-admin/plugins.php?deactivate=true&plugin_status=all&paged=1&s=
[Sun Dec 09 22:58:18 2012] [error] [client 127.0.0.1] PHP Warning:  include(): Failed opening 'i fail wp' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /usr/share/wordpress/wp-content/plugins/helloworld2085/helloworld2085.php on line 28, referer: http://localhost/wp/wp-admin/plugins.php?deactivate=true&plugin_status=all&paged=1&s=
[Sun Dec 09 22:58:18 2012] [error] [client 127.0.0.1] I love debug output when it works!, referer: http://localhost/wp/wp-admin/plugins.php?deactivate=true&plugin_status=all&paged=1&s=
[Sun Dec 09 22:58:18 2012] [error] [client 127.0.0.1] PHP Warning:  include(i fail wp): failed to open stream: No such file or directory in /usr/share/wordpress/wp-content/plugins/helloworld2085/helloworld2085.php on line 28, referer: http://localhost/wp/wp-admin/plugins.php?deactivate=true&plugin_status=all&paged=1&s=
[Sun Dec 09 22:58:18 2012] [error] [client 127.0.0.1] PHP Warning:  include(): Failed opening 'i fail wp' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /usr/share/wordpress/wp-content/plugins/helloworld2085/helloworld2085.php on line 28, referer: http://localhost/wp/wp-admin/plugins.php?deactivate=true&plugin_status=all&paged=1&s=

我怀疑 error_log() 函数不是用于输出到 debug.log 的正确函数,但我没有找到正确的方法。哦,当然我可以硬编码文件路径并附加到它,但是,你知道......

最佳答案

我在 Fedora 19 上的 Apache 2.4 中运行的 WordPress 遇到了同样的问题。error_log() 的输出登陆/var/log/httpd/error_log 而不是 wp-content/debug.log。 httpd 进程对/var/www/html/wp-content 目录具有写入权限 (+775),但无法创建 wp-content/debug.log 文件。

我的 wp-config.php 调试设置是:

@ini_set(‘display_errors’,0);
define('WP_DEBUG',         true);
define('WP_DEBUG_DISPLAY', false);
define('WP_DEBUG_LOG', true);

事实证明,真正的原因是 SELinux。我更改了 SELinux 策略并允许 httpd 使用以下命令写入 wp-content。 (请参阅 SELinux 疑难解答以获取安装的实际命令)

semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/wp-content'
restorecon -v '/var/www/html/wp-content'

此调试消息开始出现在 wp-content/debug.log 中。

关于php - 当 WP_DEBUG_LOG 设置为 true 时,debug.log 中没有显示调试输出,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13788660/

相关文章:

php - 我怎样才能替换数组中的一些东西?

javascript - 如何在适用于 Android 平台的 PhoneGap 应用程序中接收即时通知,告知您收件箱中有来自管理员的新消息

php - Laravel:更新 hasMany/BelongsTo 关系

iPhone应用程序崩溃: Assertion failed function evict_glyph_entry_from_strike,文件Fonts/CGFontCache.c

javascript - Royalslider - 属性 'ev' 在 'slider.ev.on' 上未定义

php - 有没有一种方法可以使用对 SEO 友好的包含对 html 页面进行编码?

ios - Xcode 奇怪的调试器问题?

java - Java 中的 DebugBreak 等价物?

wordpress - 如何从 WordPress 中的帖子中获取帖子 slug?

jquery - map 在 jqueryui 选项卡上显示不正确