(xdebug + notepad++) === php ide ?

крупнее
Всем хорош xdebug, но как непосредственно дебаггер использовать его было крайне неудобно. А IDE которые якобы поддерживают xdebug либо крайне неуклюжи (komodo), (либо|и) дОроги.
Но вот появился свет в окне – обнаружен плагин к notepad++, который превращает этот шустрый и удобный редактор в полноценную php ide. Превращает он пока не очень хорошо (плагин не вышел из alpha-версий) – не работают половина hotkey-ев (вероятно из-за конфликтов с другими плагинами) да и интерфейсные глюки имеются,но уже сейчас отладка проходит на ура.
Настройка окружения тривиальна: скачиваете xdebug (если вы по непонятным причинам не сделали этого раньше), и делаете несколько шаманских пассов над php.ini:

zend_extension_ts=/path/to/php_xdebug.dll
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.idekey=default

и рестартите apache. Сам dbgpPlugin имеет в данный момент минимальные настройки – укажите ip сервера, DOCUMENT_ROOT на сервере и локальный, например:

127.0.0.1 | default | /home/site.name/public_html | d:\wwwroot\home\site.name\public_html

А вот стартовать debug-сессию из notepad++ у меня не получилось. Но это не беда, поскольку есть xdebug helper – extension для firefox, с помощью которого усилием мысли одним кликом эту самую сессию можно стартовать.

Счастливой отладки… ;o)

Technorati Tags: , ,

file_post_contents

Довольно часто встречающийся вопрос – как средствами php отправить POST запрос (и обработать ответ). И традиционные ответы на этот вопрос:

  1. curl (самый очевидный ответ, к сожалению не везде доступный)
  2. fsockopen (самый распространённый способ)
  3. http (extension появился сравнительно недавно и советуют его нечасто)

Спешу поделиться другим способом:

$postfields = http_build_query( array ('var1' => 'value 1', 'var2' => 'value 2',));
$opts = array('http' =>
   array(
      'method'  => 'POST',
      'header'  => 'Content-type: application/x-www-form-urlencoded',
      'content' => $postfields,
   )
);
$context  = stream_context_create($opts);
$result = file_get_contents('http://example.com/action.php', false, $context);

Как видно – не нужны никакие дополнительные extension-ы и в отличии от способа с fsockopen большую часть “грязной” работы возьмёт на себя stream_context_create.

Подсмотрено вон там.

P.S.
Название поста глупое, но другого в голову не идёт. ;o)

Technorati Tags: ,

17.09.07  |   | 3 comments

jspacker и другие приключения Шурика

Напишу-ка я ещё разок про packer. phing, нормы бухгалтерского учёта и ещё про чё-то.

В предыдущей своей чудовищной заметке про компрессию javascript-ов я упоминал perl-версию packer-а Дэна Эдвардса.
Её приходилось запускать через exec (и соответственно нужен perl). А вот совсем недавно нашёл реализацию этого мега-алгоритма на php и даже не одну.

Соответственно первая реализация была “впендюрена” в phing.task.ext.JsPacker.Task, а вторая напомнила о том что давно собирался изложить.
А именно – про gzip-сжатие js-файлов:

Собственно проблем ровно никаких – mod_gzip в apache, gzip on; в nginx и можно тему закрывать. Но как обычно “есть нюансы”: не всегда эти модули установлены на сервере, не всегда их получается установить, ну и главный “нюанс”: файлы статические, закономерно возникает мысль – зачем их упаковывать при каждом запросе? Вот об этом я и хотел рассказать, но не буду ;o)

Собственно решение прямо в лоб – упаковать файлы один раз и “задеплоить” на сервер. Я это(сжатие) делаю с помощью всё того же phing-а, а решение о том какой файл (сжатый или нет) отдать клиенту принимает mod_rewrite:

RewriteEngine on
RewriteRule ^(.*\.js\.gz)$ – [L]
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule ^(.*)$ $1.gz

Это содержимое .htaccess который лежит в директории с js (или httpd.conf в секции Directory/Location отвечающей за эту же директорию).

Смысл вроде прозрачен, но я поясню – если рядом с файлом moi-super-bolshoy-javascript.js будет находиться его сжатая копия moi-super-bolshoy-javascript.js.gz и в запросе будет явно указано, что клиент поддерживает gzip-encoding, то ему(клиенту) выдадут именно сжатую копию. В противном случае (сжатие не поддерживается или сжатого файла нет) в ответ вернётся оригинальный файл.

В итоге уменьшили трафик сервера(и естественно клиентов) и снизили нагрузку на сервер.

Естественно этот фокус можно (и даже наверное нужно) проделать с css.

P.S.
Далеко не все файлы стоит упаковывать зипом . И не каждый файл стоит упаковывать packer-ом – стоит проверить результат на jsl(int)-ом – не редки случаи “поломки” скриптов. Ну а как упаковать оптимальнее – решать индивидуально с каждым файлом предстоит вам.

Update

А вот нашёлся способ отдачи gzip-ованного контента даже лучший, чем описал я.

05.05.07  |  , ,  | 11 comments

осторожно – вас снимает скрытая камера!

hiding errors

Есть о чём подумать ;o)

via ru_pohape

firebug и все,все,все

Вышел багфикс-релиз firebug – 1.03 пока верстался номер 1.04
Подробностей не сообщается – известно лишь то что это заплатка от некого 0-day эксплойта – всем рекомендуется обновиться.

Случайно наткнулся на XdebugHelper – кнопочка в статусбаре, с помощью которой можно стартить/стопить xdebug-сессию.

Вдогонку ещё одно девелоперское расширение для FF – FirePHP – занятная идея – нечто подобное я хотел реализовать на замену стандартной debug-консоли smarty, но передумал :)
Расширение пока сырое, глючное, но… но зато на сайте проекта есть мануал по расширению firebug-а (расширению расширения) – firephp добавляется как дополнительная панелька в firebug.

Ну и раз пошла такая пьянка распространю слухи из собственной кузницы идей – уже довольно давно делаю(точнее пытаюсь довести до ума) расширение для FF, которое визуально показывает из каких smarty-шаблонов состоит сгенерированная страница и даёт возможность открыть шаблон для редактирования прямо из браузера (естественно шаблоны должны быть доступны локально). Рабочее название SmartyTpl (застолбил). Кому-либо кроме меня такая “фенечка” была бы интересна?

Technorati Tags: , ,

05.04.07  |   | 9 comments

xdebug 2.0.0RC2

Вчера (24.12.06) вышел xdebug2.0.0RC2.

Чуток изменений, немного исправлений и приличное количество исправленных багов описаны на официальном сайте.

Сегодня (25.12.06) появились сборки под win32 (например php5.2+).

Из нового и “вкусного” – в stack trace теперь появились локальные переменные, что значительно сберегает нервные клетки и продлевает жизнь.

Technorati Tags: , ,

25.12.06  |   | стань первым

mail() logging for PHP

Ilia Alshanetsky выложил интересный патч для PHP. Суть его в том, чтобы логировать вызовы функции mail – добавлением дополнительного заголовка в письмо, в котором будет путь к скрипту и uid вызвавшего процесса(в режиме mod_php имхо бесполезный), и записью в лог с подробными данными о вызвавшем скрипте и параметрах функции mail. Патч будет интересен в первую очередь сисадминам публичных хостингов для борьбы с нерадивыми клиентами.

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

Technorati Tags: , ,

14.12.06  |   | стань первым

Performance Optimization WordPress Plugins by W3 EDGE