【问题标题】:Removing var_dump from PHP code从 PHP 代码中删除 var_dump
【发布时间】:2015-02-24 19:39:01
【问题描述】:

我们有一个庞大的代码库,用于测试且未删除/注释的 var_dump 经常突然出现。使用 XDebug (http://devzone.zend.com/1135/tracing-php-applications-with-xdebug/) 有一个混乱的解决方案,但也许有一些巧妙的东西可以在 PHP 运行时完成。

另外,我不想通过正则表达式修改或搜索代码。我试过使用自己的 var_dump_v2,但很快就失效了。

【问题讨论】:

    标签: php


    【解决方案1】:

    是否可以使用 php.ini 中的 disable_functions 操作来禁用生产服务器上的 var_dump?我不确定这个设置的结果是什么(即它是否因错误而失败,或者是静默失败)文档不是很清楚。

    http://php.net/manual/en/ini.core.php - 见“disable_functions”

    还有override_function:

    <?php
    override_function('var_dump', '$a', 'return 0;');
    ?>
    

    http://php.net/manual/en/function.override-function.php

    【讨论】:

    • 正是我想要的,简直不敢相信它存在
    【解决方案2】:

    如果您有可用的 PECL 并安装了runkit,实际上有很多方法可以做到这一点。如果您在 php.ini 中将 runkit.internal_override 设置为“1”,您可以让 runkit 能够覆盖 PHP 的内部函数。

    要删除 var_dump 函数,您可以使用:

    runkit_function_remove('var_dump');
    

    在你的情况下,为了不出错,你应该改用这样的东西:

    runkit_function_redefine('var_dump', '','');
    

    看看runkit extensions documentation here

    您可能还想看看“Advanced PHP debugger”,另一个似乎提供override_function() 的扩展程序。

    【讨论】:

      【解决方案3】:

      你可以使用猴子补丁。

      只需在文件的第一行定义一个命名空间并定义函数 var_dump

           <?php
           namespace monkey;
           function var_dump($obj) {}
      

      当然,这意味着您没有在当前文件中使用命名空间

      您可以使用函数 var_dump() 为其添加根命名空间() 前缀:\var_dump()

      当然,只要您不在命名空间中覆盖它们,所有其他本机函数将继续照常工作。

      【讨论】:

        【解决方案4】:

        如果您有一个大型数据库,为什么不使用serialize()json_encode()?这将非常有用。

        但请注意,serialize() 会给你一个有点像这样的 1 行输出:

        's:0:"";s:5:"value";'
        

        所以你需要了解serialize()的解剖结构才能使用它:PHP Serialize

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-16
        • 2013-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多