Как я могу записать результат var_dump в строку? - PullRequest
560 голосов
/ 26 сентября 2008

Я хотел бы захватить вывод var_dump в строку.

Документы PHP говорят;

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

Может кто-нибудь привести пример того, как это может работать?

print_r() недопустимая возможность, потому что она не даст мне ту информацию, которая мне нужна.

Ответы [ 12 ]

0 голосов
/ 27 апреля 2019

Мне действительно нравится подробный вывод var_dump(), и он не был удовлетворен выводом var_export() или print_r(), потому что он не давал столько информации (например, отсутствует тип данных, отсутствует длина).

Чтобы написать безопасный и предсказуемый код, иногда полезно различать пустую строку и нулевую. Или между 1 и истинным. Или между нулем и ложью. Поэтому я хочу, чтобы мой тип данных в выводе.

Несмотря на свою полезность, я не нашел простого и понятного решения в существующих ответах, чтобы преобразовать цветной вывод var_dump() в удобочитаемый вывод в строку без тегов html и включить все детали из var_dump().

Обратите внимание, что если у вас есть цветной var_dump(), это означает, что у вас установлен Xdebug, который переопределяет php по умолчанию var_dump() для добавления цветов html.

По этой причине я создал небольшое изменение, дающее именно то, что мне нужно:

function dbg_var_dump($var)
    {
        ob_start();
        var_dump($var);
        $result = ob_get_clean();
        return strip_tags(strtr($result, ['=>' => '=>']));
    }

Возвращает следующую красивую строку:

array (size=6)
  'functioncall' => string 'add-time-property' (length=17)
  'listingid' => string '57' (length=2)
  'weekday' => string '0' (length=1)
  'starttime' => string '00:00' (length=5)
  'endtime' => string '00:00' (length=5)
  'price' => string '' (length=0)

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 20 января 2015

С http://htmlexplorer.com/2015/01/assign-output-var_dump-print_r-php-variable.html:

Функции var_dump и print_r могут выводиться только непосредственно в браузер. Таким образом, вывод этих функций может быть получен только с использованием функций управления выводом php. Приведенный ниже метод может быть полезен для сохранения вывода.

function assignVarDumpValueToString($object) {
    ob_start();
    var_dump($object);
    $result = ob_get_clean();
    return $result;
}

ob_get_clean () может очистить только последние данные, введенные во внутренний буфер. Так Метод ob_get_contents будет полезен, если у вас несколько записей.

Из того же источника, что и выше:

function varDumpToErrorLog( $var=null ){
    ob_start();                    // start reading the internal buffer
    var_dump( $var);          
    $grabbed_information = ob_get_contents(); // assigning the internal buffer contents to variable
    ob_end_clean();                // clearing the internal buffer.
    error_log( $grabbed_information);        // saving the information to error_log
}
...