Php Debugger ...

Snowflake

Пользователь
Подскажите кто знает, нормальный php редактор с отладчиком, что бы можно было за переменными следить и т.п? Что бы работал с внешним (локальным) сервером.
И если не трудно, объясните как настроить ... а то взял с сидюка PHP Expert Editor, а там непонятно как debugger прикручивать, в help'е указаны библиотеки для разных версий, которых на самом деле в наличии почему-то нема!
 

Mike22

Местный
... а то взял с сидюка PHP Expert Editor
Зарегистрировать его не забыли?
Это бесплатно, и при этом вы получите полнофункциональную версию программы.
http://www.ankord.com/ru/phpxedit.html
http://www.ankord.com/ru/phpxedit_reg.html
, а там непонятно как debugger прикручивать, в help'е указаны библиотеки для разных версий, которых на самом деле в наличии почему-то нема!
Я так понимаю, проблема ваша вот в чём -
В дистрибутив "PHP Expert Editor" не входит собственно сам PHP-интерпретатор а он для работы отладчика и необходим.
Установите PHP (последние версии можно скачать с www.php.net ) и будет вам счастье.

Про разные версии библиотек - PHP существует двух версий 5 и 4. Это немножко разные языки.
 

NightAngel

Новичок
Прикручивать отладчик к PhpExpertEditor довольно геморно. Я просто по отдельности работаю с каждым. Беру расставляю брэйк-поинты и запускаю через браузер скрипт с нужными опциями. Установка и запуск описаны очень подробно в хелпе к Expert Debugger. Только вот очень редко я встречаю ситуации в которой нужно прибегать именно к отладчику. В большинстве случаев достаточно всего одной функции - var_dump =)
А библиотеки для отладки есть во всех дистрибутивах PhpExpertEditor. Видимо плохо смотрели. Они лежат в папке DBG/PHP_DBG.DLL
Там куча dll`ек расширение которых - версия для которой они предназначены:
php_dbg.dll-5.0.0
php_dbg.dll-4.4.2
php_dbg.dll-4.4.0
и т.д. Переименовываете и кидаете в папку модулей PHP.
 

Snowflake

Пользователь
Во-во ... у меня в архиве PHP Expert Editor просто небыло файла php_dbg.dll-5.2.x, скачал с сайта там их полный набор. Php у меня стоит 5.2.5, тоже с сайта качал, правда не инстал, а архив. В инете посмотрел как его прикрутить, в php.ini что надо было поменял! С Apache не хотелось возиться, по этому стоит Small HTTP Server. Там в параметрах указывается только путь к php.exe. Вроде все работает, php внедренный в html срабатывает, правда не могу понять как отдельно скрипт запустить!

Теперь про PHP Expert Editor, делал как в help'е написано:

Copy php_dbg.dll into directory where you have other php extensions installed. The php_dbg.dll files includes in this distributive.
Скопировал php_dbg.dll-5.2.x (php_dbg.dll) в папочку php\ext\ ...

Edit php.ini. Find list of extension= entries and add:
extension=php_dbg.dll
Somewhere below extension=php_dbg.dll line add the following section:
[Debugger]
debugger.enabled=true
debugger.profiler_enabled=true
Дописал ...

PHP buffering a output, and it is necessary to disable this option in php.ini. Otherwise the result may not be displayed at debugging. Please set option output_buffering to off in the file php.ini.
Исправил ...

Там еще в папке куда установил PHP Expert Editor есть файлик \DBG\register.bat ... что-то он там в сервисы заносит или что-то в этом роде, выполнил его.

А дальше вообще непонятно ...

To start debugging use URL of the following format:
http://<URL>?DBGSESSID=session[@host][:port][;{flags}]

For Example:
http://localhost/index.php?DBGSESSID=1@clienthost:7869
http://localhost/index.php?DBGSESSID=1@cli...st:7869;d=1,p=1
http://localhost/index.php?DBGSESSID=1;d=1,p=0
http://localhost/index.php?DBGSESSID=1:7869;d=1,p=0,s=5

Note: The DbgListener.exe must be started on your computer or on the server before start of debug.

Все перепробовал ... запускал http://localhost/index.phtml?DBGSESSID=1@clienthost:7869 c включеным PHP Expert Editor и PHP DBG Listener, открывал в браузере и просто видел результат! Никакого Expert Debugger'а не появляется!

Может это из-за настроек самого Small HTTP Server? Или я что-то еще забыл сделать?
 

NightAngel

Новичок
Дебаггер должен срабатывать на брейк-поинты. Их надо расставить для начала и в ходе выполнения он будет выскакивать предоставляя возможность покопаться в переменных.
 

Snowflake

Пользователь
Пробовал ... в PHP Expert Editor ставлю точку останова в начале цикли и ничего, все пролетает и никакого дебага! (
 

NightAngel

Новичок
Довольно странно...я конечно с SmallHttp не работал (уже несколько лет пользуюсь денвером) но может действительно в нём глюк.
А Вам вообще для каких целей понадобился именно отладчик? Вроде всегда помогают die(),var_dump() и print_r()
 

Snowflake

Пользователь
Ответ ради вопроса! Что такое die(),var_dump() и print_r() я не знаю, т.к. с php не работал ... общий синтаксис очень похож на С++, а больше мне это ни о чем не говорит! Как отлаживать я так и не понял! Куда пихать эти die(),var_dump() и print_r()? У меня почему-то даже внешний скрипт не пашет ... только внедренный в html! (

А вот заметил такой касячок, правда не знаю чей ... может мой: работает внедренный php ...

Код:
<html>
<head>
<title>*</title>

<meta http-equiv="Content-Type" content="text/html;charset=windows-1251">
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
<style type="text/css">
body {font-family:Tahoma;
font-size:8pt;
cursor:default;}

...

</style>
</head>
<body topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0">

<table width="100%" height="0" cellpadding="0" cellspacing="2">

<?php

$inF = fopen("такой-то файл","r");
$i=0;

if ($inF)
...

Все срабатывает ... стоит только убрать пустую строку между <title>*</title> и <meta http-equiv="Content-Type" content="text/html;charset=windows-1251"> как таблица стилей воспринимается как простой текст, соответственно и все оформление насмарку! В чем проблема?
 

Cosinus

Новичок
с примером

die() - Эквивалент exучше()
допустим нам надо подключиться к базе и проверить подключилось ли и если нет то остановить выполнение скрипта

Код:
mysql_connect("lolcalhost","user","pass") or die("Не получилось");

в данном случае если не подконектиться то выведет ошибку не получилось и скрипт перестанет выполняться...

print_r() - выводит всю информацию о переменной используется чаще для массивов.

Код:
<?php
$rf=array("sdfsdf","sdfsdfs");
print_r($rf);
?>
выведет
Код:
Array ( [0] => sdfsdf [1] => sdfsdfs )

var_dump() - выводит информацию о переменной что то наподобии print_r() тока выводит еще тип переменной и количество символов (элементов)
Код:
<?php
$rf=array("sdfsdf","sdfsdfs");
var_dump($rf);
?>

выведет
Код:
array(2) { [0]=> string(6) "sdfsdf" [1]=> string(7) "sdfsdfs" }
 

Snowflake

Пользователь
Спасибо! )
Конечно не так удобно как с нормальным дебагером, но уже что-то ... )
 

Snowflake

Пользователь
Не стал новую тему создавать ... может вообще отдельный раздел сделать, типа программирование или скриптинг и все такое!

Вопрос по php ...
Смысл в том, что бы сделать обозреватель файлов http сервера, только не говорите что он встроенный есть, мне приспичело ... )))
Русские имена файлов почему-то не обрабатываются, хотя php выдает результат уже в виде html ссылки ... но ссылка не срабатывает, выходит на страницу ошибки! Вот и думаю, в чем проблема, может и не в php вовсе?
Small HTTP server + php 5.2.5
 

Mike22

Местный
Не совсем ясно что и куда у вас PHP выдаёт. Код приведите.
А так-же обратите внимание на языковые настройки самого сервера и PHP.
Ещё не забудьте о CP866, пробелах в именах и т.д. и т.п :D
Надо внимательно с вашим Small HTTP server разбираться.
А проще его выкинуть и взять lighttpd или Apache и воспользоваться встроенной возможностью просмотра каталогов.
Ну или ищите готовые скрипты, их масса, например - http://www.hotscripts.com/PHP/Scripts_and_...ment/index.html
(только опять-же нужно тестировать их работу с русскими именами файлов)
 

Snowflake

Пользователь
В Small HTTP server есть втроенный просмотрщик ... и он, как оказалось, тоже невоспринимает русские имена ... плохо! Так что не в пирогах дело ...
lighttpd под win есть?
 

Snowflake

Пользователь
Такая ситуевина ... типа гостевая книга ... )
Короче передаются данные формы методом post в скрипт для записи в файл, все нормально ... но когда обнавляешь страницу (не отправляя форму, а просто обновить жмешь) то вновь отправляется та же форма и пишется в файл. Как сделать что бы при обновлении повторной отправки не происходило?

Apache 2.2.9 + PHP 5.2.5
 

Snowflake

Пользователь
Предполагаю надо как-то убить текущую сессию ... но как ... кака-то процедура должна быть по видимому!
 

PMAP

Пользователь
Такая ситуевина ... типа гостевая книга ... )
Короче передаются данные формы методом post в скрипт для записи в файл, все нормально ... но когда обнавляешь страницу (не отправляя форму, а просто обновить жмешь) то вновь отправляется та же форма и пишется в файл. Как сделать что бы при обновлении повторной отправки не происходило?
Если я правильно понял, то...
Отправлять форму на пустую страницу с моментальным редиректом на гостевую.
Ну или можно на страницу с фразой типа "Запись успешно добавлена", а по истечении пары-тройки секунд обратно в гостевую.
 

Cosinus

Новичок
после того как инфа в файл записана добавить

Код:
header("Location: http://www.example.com/");

УРЛ свой =)
 

Snowflake

Пользователь
Нифига не понял ... )

Мой код:
Код:
<?php
$gb = "message";

if(getenv("REQUEST_METHOD")=="POST"){

$fgb = fopen($gb,"a+");

fputs($fgb,"$_name\n");
fputs($fgb,"$_msg\n");
fclose($fgb);

}

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//RU">
<html>
<head>
<title>new document</title>
<meta http-equiv="cache-control" content="no-cache">
<meta name="keywords" content="">
<meta name="description" content="">
</head>
<body topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0">

<form action="index.phtml" method="post">
Имя: <input type="text" name="_name"><br>
Сообщение: <textarea name="_msg" rows="10" cols="40"></textarea><br>
<input type="submit" value="Отправить">
</form>

</body>
</html>
И как редирект сделать? )

Нашел в инете: http://www.sb-news.net/?n=142
Код:
<?php

//получаем ссылку для безопасного обновления
function GetSafeUrl(){
return 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?t='.time();
}

$is_send = isset($_POST['s']);
$value1 = isset($_POST['value1']) ? isset($_POST['value1']) : '';

if ($is_send){
//обрабатываем параметры формы
//..

//редирект для защиты от обновления
header('Location: '.GetSafeUrl());
exit;	
}

echo '<form action="'.$_SERVER['PHP_SELF'].'" method=POST>
Поле: <INPUT size=10 maxlength=10 value="" name="value1"><br>
<input type="hidden" name="s" value="s">
<input name="r" type=submit value="Отправить">
</form>';
?>
Но так и не сообразил как прикрутить ... то не так обрабатывает, то ругается на тот самый header ... (
 

PMAP

Пользователь
И как редирект сделать?
Направить данные на другую страницу:
Код:
<form action="send.phtml" method="post">
А в той странице, в заголовке:
Код:
<META HTTP-EQUIV="refresh" CONTENT="1;URL=index.phtml">
 
Сверху