添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

如何从wordpress中的php文件打印到控制台

12 人关注

我有一个php文件,是一个wordpress插件的一部分。我需要对我们遇到的一个问题进行调试。我想知道一个变量的值是什么。我怎样才能把变量的值打印到控制台?有人建议用echo或chrome或firefox扩展。我无法让echo输出到控制台 echo “$variablename"; ),也无法使用firefox的firefp扩展。

1 个评论
假设你不想用 var_dump() )直接在页面上转储数值,为什么不使用 file_put_contents() 将数值输出到一个临时的日志文件呢?
php
wordpress
grabury
grabury
发布于 2015-10-22
4 个回答
Josef Engelfrost
Josef Engelfrost
发布于 2018-08-02
0 人赞同

为了回答你的问题,你 可以 这样做。

echo '<script>console.log("PHP error: ' . $error . '")</script>';

但我建议做@Ishas建议的其中一件事来代替。确保$error不包含任何可能扰乱你的脚本的东西。

lshas
lshas
发布于 2018-08-02
已采纳
0 人赞同

如果你考虑的是javascript控制台,你不能在PHP中这样做。

你有几个选择,你可以选择。

  • 创建一个日志文件
  • xdebug
  • 为了快速检查一个变量的值,我会使用var_dump,它还会显示变量的数据类型。当你请求页面时,这将被输出到浏览器。

    Martin Braun
    Martin Braun
    发布于 2018-08-02
    0 人赞同

    从WordPress中的PHP登录到DevTools控制台

    在这里,你可以看到我在调试WooCommerce中的优惠券逻辑时对该问题的解决方案。这个解决方案仅仅是为了调试的目的。(注意:截图不是最新的,它也会暴露出私人成员。)

  • 允许在渲染开始之前和之后打印
  • 在前端和后端工作
  • 打印任何数量的变量
  • 对数组和对象进行编码
  • 暴露对象的私有和受保护成员
  • 同时记录到日志文件中
  • 在生产环境中安全而容易地选择退出(如果你保留电话)。
  • 打印调用者类别、功能和钩子(生活质量的提高)。
  • wp-debug.php

    function console_log(): string {
        list( , $caller ) = debug_backtrace( false );
        $action = current_action();
        $encoded_args = [];
        foreach ( func_get_args() as $arg ) try {
            if ( is_object( $arg ) ) {
                $extract_props = function( $obj ) use ( &$extract_props ): array {
                    $members = [];
                    $class = get_class( $obj );
                    foreach ( ( new ReflectionClass( $class ) )->getProperties() as $prop ) {
                        $prop->setAccessible( true );
                        $name = $prop->getName();
                        if ( isset( $obj->{$name} ) ) {
                            $value = $prop->getValue( $obj );
                            if ( is_array( $value ) ) {
                                $members[$name] = [];
                                foreach ( $value as $item ) {
                                    if ( is_object( $item ) ) {
                                        $itemArray = $extract_props( $item );
                                        $members[$name][] = $itemArray;
                                    } else {
                                        $members[$name][] = $item;
                            } else if ( is_object( $value ) ) {
                                $members[$name] = $extract_props( $value );
                            } else $members[$name] = $value;
                    return $members;
                $encoded_args[] = json_encode( $extract_props( $arg ) );
            } else {
                $encoded_args[] = json_encode( $arg );
        } catch ( Exception $ex ) {
            $encoded_args[] = '`' . print_r( $arg, true ) . '`';
        $msg = '`📜`, `'
            . ( array_key_exists( 'class', $caller ) ? $caller['class'] : "\x3croot\x3e" )
            . '\\\\'
            . $caller['function'] . '()`, '
            . ( strlen( $action ) > 0 ? '`🪝`, `' . $action . '`, ' : '' )
            . '` ➡️ `, ' . implode( ', ', $encoded_args );
        $html = '<script type="text/javascript">console.log(' . $msg . ')</script>';
        add_action( 'wp_enqueue_scripts', function() use ( $html ) {
            echo $html;
        add_action( 'admin_enqueue_scripts', function() use ( $html ) {
            echo $html;
        error_log( $msg );
        return $html;
    

    wp-config.php(部分)。

    // ...
    define( 'WP_DEBUG', true );
    // ...
    /** Include WP debug helper */
    if ( defined( 'WP_DEBUG' ) && WP_DEBUG && file_exists( ABSPATH . 'wp-debug.php' ) ) {
        include_once ABSPATH . 'wp-debug.php';
    if ( ! function_exists( 'console_log' ) ) {
        function console_log() {
    /** Sets up WordPress vars and included files. */
    require_once( ABSPATH . 'wp-settings.php' );
    
  • 在HTML<head>被渲染之前。
  • console_log( $myObj, $myArray, 123, "test" );
    
  • 在HTML<head>呈现后(在模板等/当上述方法不奏效时使用)。
  • echo console_log( $myObj, $myArray, 123, "test" );
    
    📜 <caller class>\<caller function>() 🪝 <caller action/hook>  ➡️  <variables ...>
    
  • Andre Medeiros负责财产提取方法
  • Rao Abid
    Rao Abid
    发布于 2018-08-02
    0 人赞同

    你可以写一个这样的实用函数。

    function prefix_console_log_message( $message ) {
        $message = htmlspecialchars( stripslashes( $message ) );
        //Replacing Quotes, so that it does not mess up the script
    $message = str_replace( '"', "-", $message );
        $message = str_replace( "'", "-", $message );
        return "<script>console.log('{$message}')</script>";
    

    你可以像这样调用该函数。

    echo prefix_console_log_message( "Error Message: This is really a 'unique' problem!" );
    

    而这将会像这样输出到控制台。

    Error Message: This is really a -unique- problem!
    

    注意引号被替换为"-"。这样做是为了使信息不至于像@Josef-Engelfrost所指出的那样搞乱你的脚本。

    你也可以更进一步,做这样的事情。

    function prefix_console_log_message( $message, $type = "log" ) {
        $message_types = array( 'log', 'error', 'warn', 'info' );
        $type          = ( in_array( strtolower( $type ), $message_types ) ) ? strtolower( $type ) : $message_types[0];
        $message       = htmlspecialchars( stripslashes( $message ) );
        //Replacing Quotes, so that it does not mess up the script
    $message = str_replace( '"', "-", $message );
        $message = str_replace( "'", "-", $message );
        return "<script>console.{$type}('{$message}')</script>";