从PHP代码中删除var_dump

时间:2015-02-24 19:39:02

标签: php

我们有一个很大的代码库,每隔一段时间就会出现一个用于测试但未删除/注释的var_dump。使用XDebug(http://devzone.zend.com/1135/tracing-php-applications-with-xdebug/)有一个混乱的解决方案,但也许可以在运行时在PHP中完成一些巧妙的事情。

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

4 个答案:

答案 0 :(得分:3)

是否可以在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

答案 1 :(得分:0)

如果您有可用的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()的扩展程序。

答案 2 :(得分:0)

你可以使用猴子补丁。

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

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

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

您可以使用函数var_dump()将其作为前缀名称空间()的前缀:\var_dump()

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

答案 3 :(得分:-1)

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

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

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

因此,您需要了解serialize()的解剖结构才能使用它:PHP Serialize