页面上出现print_r()的error_log()输出

时间:2017-12-16 作者:Cedon

我正在调试一个插件并使用error_log() 在不同的地方看到不同的东西。我正在使用以下内容:

error_log( print_r( $variable ) );
当我看着debug.log, 我所看到的是1 以及error_log() 函数被发送到浏览器。

我知道另一个插件没有这样做,因为除了我正在编写的插件之外,所有插件都被禁用。在我的wp-config.php, 我已经定义了WP_DEBUG_DISPLAYfalse.

如果我使用var_dump()var_export(). 其他功能,如gettype() 工作很好。

有什么方法可以将输出输入debug.log?

3 个回复
最合适的回答,由SO网友:Shibi 整理而成

这个print_r 函数接受第二个参数return 因此它重新运行变量,而不是打印它。

print_r($expression, $return)
所以你可以

error_log( print_r( $variable, true ) );

SO网友:Johansson

如果您的变量只是一个字符串,那么您可以简单地使用error_log ( $variable ). 如果是对象或数组,而不是使用print_r(), 您也可以序列化它:

error_log ( serialize ( $variable ) );

SO网友:butlerblog

虽然被接受的答案是正确的,但为了清晰起见,我想包括一个扩展解释的答案。

print_r() 接受两个论点(see the documentation for this function), 第二个是可选的,您已经省略了。第一个参数是要打印的表达式。第二个指定是返回值还是打印值。

省略第二个参数时,其默认值为false 因此它会立即打印结果。如果此参数为false,print_r() 将返回true (在错误日志中显示为“1”)。

$result = print_r( $variable );
此处返回的结果为true (显示为“1”)。

您正在传递返回的结果print_r()error_log(). 出于上述原因,此结果为“1”,这就是为什么日志中的条目为1。

以获取包含表达式的结果$variable 并将其传递给error_log() 功能,您需要print_r() 返回表达式作为结果。可以通过将第二个参数指定为TRUE来实现这一点。

$result = print_r( $variable, true );
现在返回的结果print_r() 表达式是否包含在$variable 你可以把它传给error_log():

$result = print_r( $variable, true );
error_log( $result );

OR:

error_log( print_r( $variable, true ) );
如果您想进一步了解这一点,可以编写一个实用程序函数,用于写入日志,以确定$variable 是数组或对象,因此需要print_r(), 或者如果它可以简单地作为字符串传递。这使得处理调试日志记录变得很容易,因为您不必关心变量类型,就可以将其传递给日志记录。我写过这样的a utility along with a detailed explanation here.

Side note on the PHP functions you mentioned: 无论您的经验有多丰富,查看您正在使用的函数的文档总是很有帮助的,以确保您了解它们的实际功能。我已链接到print_r() 上面的文档准确地描述了本文档和公认答案中所讨论的内容。但也提到了其他一些PHP函数,它们可以工作,也可以不工作。让我们考虑一下:

var_dump(): 文档表明此函数不返回结果。为了把东西传给error_log() 要包含在错误日志中,它需要是包含在变量中的表达式。此函数不返回任何内容,只输出到屏幕。所以你不能用它来传递任何东西给error_log().

var_export(): 类似print_r() 因为您有第二个可选参数,用于返回结果或打印到屏幕。将第二个参数定义为true 能够返回的结果error_log().

gettype() 始终返回变量的类型。所以你有东西可以传给error_log() 默认情况下。这就是它成功的原因。

结束

相关推荐

使用自己的php脚本从wp标题批量生成wp分类标签

我想使用插件将wp标题生成到标签中,https://wordpress.org/plugins/wp-full-auto-tags-manager/,因为我有数百万个帖子,所以日程表/cronjob工作不正常。所以我想用self-php脚本手动执行,我可以使用插件中的一段代码并在ssh终端上独立运行它吗,这是一段代码:$nsw_sql_gen_tags = $wpdb - > prepare(\" SELECT ID, post_title FROM $wpdb->posts WHERE po