2015-02-24 2 views
1

У нас есть большая база кода, и каждый раз var_dump, используемый для тестирования и не удаляемый/комментируемый, неожиданно появляется из ниоткуда. Существует беспорядочное решение с использованием XDebug (http://devzone.zend.com/1135/tracing-php-applications-with-xdebug/), но, возможно, есть что-то гениальное, что можно сделать в PHP во время выполнения.Удаление var_dump из PHP-кода

Кроме того, я не хочу изменять или искать код с помощью регулярного выражения. Я пробовал использовать свой собственный var_dump_v2, но он быстро выпадает из употребления.

ответ

2

Возможно ли использовать операцию disable_functions в php.ini для отключения 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

+0

именно то, что я смотрел ng for, вряд ли можно верить, что он существует – user1122069

-1

Почему бы вам не использовать serialize() или json_encode(), если у вас есть база данных? Это будет очень полезно.

Но принять к сведению, serialize() даст вам выход на 1-линии примерно так:

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

Таким образом, вы должны изучить анатомию serialize() использовать его: PHP Serialize

+0

И, 'сериализации()' и 'json_encode()' являются намного быстрее при использовании в больших база данных: [Benchmarking Cac Transcoders в PHP] (http://nitschinger.at/Benchmarking-Cache-Transcoders-in-PHP) – Andreas

+0

Я думаю, вы хотели опубликовать это по другому вопросу –

0

Есть на самом деле способов для этого, если у вас есть PECL и runkit. Вы можете сделать runkit способным переопределять внутренние функции PHP, если вы в php.ini установите runkit.internal_override на «1».

Для удаления функции var_dump, вы можете использовать:

runkit_function_remove('var_dump'); 

В вашем случае, чтобы не получить сообщение об ошибке, вы должны, вероятно, вместо того, чтобы использовать что-то вроде этого:

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

Посмотрите на runkit extensions documentation here.

Вы также можете взглянуть на «Advanced PHP debugger», другое расширение, которое, как представляется, предлагает override_function().

0

Вы можете использовать исправление обезьяны.

Просто определяет пространство имен на первой строке файла и определяет функцию var_dump

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

Конечно, это означает, что вы не используете пространство имен в текущем файле

Вы можете использовать функция var_dump(), префикс которой имеет корневое пространство имен(): \var_dump()

Конечно, все остальные встроенные функции будут работать как обычно, если вы не переопределяете их в своем пространстве имен.