Версия для печати
Журналы: Игорь_Vasinsky -> PHP во сне и на яву
09 сентября 2011
 00:39   Отладка скриптов PHP, мониторинг глоб.массивов
Наверника все и не раз сталкивались с моментом, когда во время отладки кода теряются какие либо переменные глобальных массивов, или же вы просто забываете как называется елемент какого либо глобального массива.

Этот момент легко контролировать 2 известными мне вариантами:

1. var_dump()

Цитата
var_dump($_SESSION);


2. print_r (Более красивый и удобный)


Цитата
echo "<pre>";
print_r($_POST);
echo </pre>;


Мне конечно удобней использовать 2й вариант, так как он выводит красивое дерево массива, но каждый раз писать (даже эти 3 строчки) мне становиться лень, темболее, что иногда это делаю я по нескольку десятков раз в день.

Именно по этому я решил написать функцию, которая бы заменила эти 3 строчки в несколько символов;

Назвал я её по началу globalsView(), но из-за лени переименовал в gview() (g-оставил, для красоты!)

Функция имеет всего один аргумент в качестве которого можно указать один из 4 суперглобальных массивов: POST, GET, FILES, SESSION (но указываются они не как элементы php, а как строки - в ковычках)

Цитата

function gview($globals)
{   
    if($globals == "POST"){$title = "<strong style='color:blue'>Массив POST</strong>"; $arr = $_POST;}
    elseif($globals == "GET"){$title = "<strong style='color:blue'>Массив GET</strong>"; $arr = $_GET;}
    elseif($globals == "FILES"){$title = "<strong style='color:blue'>Массив FILES</strong>"; $arr = $_FILES;}
    elseif($globals == "SESSION"){$title = "<strong style='color:blue'>Массив SESSION</strong>"; $arr = $_SESSION;} 
       
    ob_start();
    
    echo "<pre>";
    print_r($arr);
    echo "</pre>";
   
    $buffer = ob_get_contents();
    ob_end_clean(); 

    if($globals == $_GET)
        $title = "<strong style='color:blue; font-size:15px'>Массив GET</strong>";
           
    if($globals == $_FILES)
        $title = "<strong style='color:blue'>Массив FILES</strong>";           
   
    if($globals == $_SESSION)
        $title = "<strong style='color:blue'>Массив SESSION</strong>";
   
    $strings = array("Array", "[", "]", "=>", ",", ")", "(", "<br />");
    $repalce = array($title,"<strong style='color:red;'>", "</strong>", "<span style='color:blue;'>-></span>","", "", "", "");
   
    $buffer = str_replace($strings,$repalce ,$buffer);
    $buffer = "<div style='border: 1px solid gray; background: white; padding: 10px; margin: 2px'>".$buffer."</div>";
    echo $buffer;
}


Потом я один раз её подключаю, где нить в самом верх index.php (в моих сайтах он всегда роутер)

Вызов функции, как я и говорил - несколько символов:

Цитата

gview("POST");
gview("GET");
gview("FILES");
gview("SESSION");


А работает она так (Как дополнительный вспомогательный BOX):

user posted image


Эх.. не победил я ещё регулярки (т.е. паттерны), а так бы раскрасить можно было по красивше.

p/s Рассматривал так же возможность одного вызова, использовав 4 аргумента (под 4 массива) и так же если время будет - подкорректировать её под любой массив. Вообщем эти 2 момента оставлю на апгрейт.

Комментарии :6

Написал: neadekvat - 01:44 09/09/2011
Три строчки можно заменить одной:

echo '<pre>'. print_r($arr, 1) .'</pre>';


Написал: Игорь_Vasinsky - 01:46 09/09/2011
не.. это не мой стиль)))) да и потом так симпотичней...

Написал: inpost - 12:48 09/09/2011
ob_start();

echo "<pre>";
print_r($arr);
echo "</pre>";

$buffer = ob_get_contents();
ob_end_clean();

Вот весь этот мусор заменяется одной: $buffer = '<pre>'. print_r($arr, 1) .'</pre>';

Весь этот мусор:

if($globals == $_GET)
$title = "<strong style='color:blue; font-size:15px'>Массив GET</strong>";

if($globals == $_FILES)
$title = "<strong style='color:blue'>Массив FILES</strong>";

if($globals == $_SESSION)
$title = "<strong style='color:blue'>Массив SESSION</strong>";

Заменяется коротко:
Массив $globals;


Ну и название: gview не особо нравится, у меня вообще wtf(); , то есть перевод: "что произошло?" smile.gif
А ещё, ты передаёшь так: gview("POST"); , а я бы передавал так: $_POST, то есть можно как глобальную переменную передавать, так и обычную переменную, допустим: $var, которая тоже может быть массивом, и которую тоже неплохо было бы проверить.


И в заключение, обрати внимание на концовку моей функции, а именно на $status (п.с. после просмотра твоей функции, я свою немного перепишу, так же красиво сделаю):
function wtf($data,$status = false)
{
echo '<pre>';
print_r($data);
if(!$status)
exit();
else
echo '</pre>';
}

Написал: Игорь_Vasinsky - 12:51 09/09/2011
да... апгрейдить да апгрейдить.

Написал: Invis1ble - 22:54 16/10/2011
установка и настройка xdebug дает гораздо более вкусные плюшки wink.gif

Написал: Игорь_Vasinsky - 00:05 16/12/2011
ну ты сравнил... это оч просто для всех - по сравнению установкой и настройкой xdebug biggrin.gif


mJournal v1.05   © 2003-2004 by UriSoft and IBResource.ru