【问题标题】:List all PHP variables列出所有 PHP 变量
【发布时间】:2011-07-03 09:11:52
【问题描述】:

是否可以在 PHP 脚本中转储所有全局变量?说这是我的代码:

<?php
$foo = 1;
$bar = "2";
include("blah.php");
dumpall();
// displays $foo, $bar and all variables created by blah.php

另外,是否可以在 PHP 脚本中转储所有定义的常量。

【问题讨论】:

    标签: php variables global-variables


    【解决方案1】:

    使用get_defined_vars 和/或get_defined_constants

    $arr = get_defined_vars();
    print_r($arr);
    

    【讨论】:

    • get_defined_constants 用于常量
    • $nico:这也适用于在eval() 中创建的变量吗?
    • @Salman 只要在eval() 之后调用get_defined_vars()/get_defined_constants(),那么可以。
    • 仅适用于那些正在复制/粘贴并希望将其放在一行中的人echo "&lt;pre&gt;"; print_r(get_defined_vars()); die; 复制您想要的任何内容。
    【解决方案2】:

    在尝试使用诸如WinMerge(免费软件)之类的程序进行调试以查看各种数组和变量之间的差异时,您需要ksort(),否则您会得到很多误报。它还有助于使用 HTML pre 元素进行可视化格式化...

    <?php
    $everything = get_defined_vars();
    ksort($everything);
    
    ?>
    

    编辑:不得不回到这一点并意识到我有一个更好的答案,$GLOBALS

    $a = print_r(var_dump($GLOBALS),1);
    echo '<pre>';
    echo htmlspecialchars($a);
    echo '</pre>';
    

    编辑 2:正如 mpag 提到的那样,print_r() 如果您使用的软件大量使用,则可能容易出现内存不足的情况。假设没有输出或者它被明显截断并且你可以访问php.ini文件你可以adjust the memory这样使用:

    ini_set('memory_limit', '1024M');
    

    【讨论】:

    • 这个答案对我来说是黄金。
    • 三个 cmets:1) print_r 在使用重类 CMS 时内存不足,但 json_encode($GLOBALS)console.logging javascript 可以工作。 2) 不要忘记 $_ 变量(SERVER、SESSION、ENV、FILES、COOKIE、GET、POST、REQUEST)。 3)为了更深入的调试,我还做了一个get_declared_classes 并迭代到get_class_varsget_class_methods
    • @mpag 是的,我见过一些软件使用了可笑的内存量;显然,解决这个问题的方法显然是要么不使用这样的系统,但很多人不会有这个选项,所以stackoverflow.com/a/16423653/606371 有望为他们工作。另外,如果我没记错的话,应该从$GLOBALS 中提取$_ 变量。感谢您的评论,我会尽快查看get_declared_classesget_class_vars。 :-)
    • 我已经将我的限制设置为 512M,而且我相信在我的情况下,加倍到 1024 不太可能解决这个问题。我相信 2048M 是 php 的硬性限制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 2023-04-07
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    相关资源
    最近更新 更多