чтоб тебе пусто было!

Коллега(привет Денис) столкнулся с багом в php-mssql, который может съесть ваш мозг.

Предупреждаю – пустые строки вовсе не пустые! Говорят это ошибка в либе, хотя и воспроизводиться и в win и в *nix (т.е. либы разные). Написал разработчику – а вдруг поможет.

А пока имейте ввиду – если в resultset могут быть пустые строки – надо их сделать таковыми самостоятельно (примерно так: $row["field"] = ($row["field"] != " ") ? $row["field"] : "";) – разумеется, если у вас за каким-то лесом в базе храняться одиночные пробелы, вам очень не повезло ;o)

19.01.08  |   | 2 comments

xdebug.ini

Нашёлся добрых дел мастер, собравший полную информацию о доступных директивах, которые добавляет xdebug в php.ini.

Technorati Tags: ,

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

phing.tasks.ext.FtpUploadTask

Вычищая комментарии от спама (достали, честное октябрятское) наткнулся на незаслуженно позабытый вопрос товарища altern-a про обещанный ftpupload-таск. Вы спросили – мы ответили: нет, мне не сложно – делюсь.

Собственно сам класс FtpUploadTask.php. И небольшие пояснения.

Код по означенной ссылке необходимо сохранить в файл %PHING_HOME%/classes/phing/tasks/ext/FtpUploadTask.php (Разумеется вы уже знаете что такое Phing и он у вас установлен и готов к использованию).
Для работы требуется установленный в include_path PEAR::Net_FTP, которому в свою очередь необходим php-extension FTP.

На заметку виндузятникам
Первое можно установить посредством выполнения магического пасса в командной строке:
>pear install –all-deps net_ftp
Второе в виндовом php уже вкомпилено.

Параметры, которые принимает task (на всякий случай на моём террибл инглиш ):

Name Type Description Default Required
host String Hostname. n/a Yes
port Integer Ftp server’s port. 21 No
username String Ftp user n/a Yes
password String Ftp password n/a Yes
targetDir String Path to destination directory . (FTP-user’s home) No
mode String Upload FTP-mode. Binary No
cleanDir Boolean Cleanup target directory before upload? False No
overwriteExisten Boolean Overwrite existen files? True No
passiveMode Boolean use passive or active ftp-data connection True No

И пример использования : привожу часть build.xml необходимую и достаточную для запуска таска.

<!-- //skip -->
<taskdef classname="phing.tasks.ext.FtpUploadTask" name="ftpupload" />
<!-- //skip -->
<target name="deploy">
   <ftpupload host="example.com" username="joe" password="$ecr3t" targetDir="/remote/project_home/">
      <fileset dir="/path/to/local/project">
         <include name="**" />
         <exclude name="**/*.dist" />
         <exclude name="src/*" />
      </fileset>
   </ftpupload>
</target>
<!-- //skip -->

Разумеется taskdef удобнее перенести в defaults.properties, для того чтобы не таскать его из проекта в проект.

И снова повторюсь – “таким образом программист может за три часа написать программу, которая сделает за пять минут то, что другой человек делал бы целый час…” ;o)

Technorati Tags: , ,

15.11.07  |  ,  | 4 comments

JS-Trojan-HTML-IFRAME-etc

Наверное многим веб-мастерам в последнее время пришлось познакомиться с разного рода вирусами, которые каким-то макаром оказались на главных страницах подопечных сайтов. Вот тут даже один товарищ раздаёт бесплатные советы, которые впрочем не помогут защитить ваш сайт от этой напасти. Всё потому что основной путь внедрения вируса на страницу – FTP (посредством кражи паролей на ftp-аккаунты и последующим их использованием). И насколько я понимаю механизм – некий робот добавляет js-код во все найденные индексные страницы.

Выглядит это обычно как document.write некой ереси (iframe-а) в конце документа.

Сегодня обнаружили такую вот гадость на сайте одного из клиентов. Убрали. Придумал способ борьбы с заразой с помощью php ;o)

Поскольку оригинальностью эти роботы не отличаются, то код просто append-иться к index.php,default.php и т.д. , я недолго думая просто добавил exit(); в конце индексного файла.

P.S.
Как бороться с утечкой паролей каждый пусть решает самостоятельно.
P.P.S.
Следующим витком эволюции этих вирусов вероятно станет синтаксический анализ скриптов, в которые надо будет внедряться ;o)

19.10.07  |   | 6 comments

SQL Server 2005 Driver for PHP

В тайге вымерли все медведи. А виноваты в этом эти ребятки.

Extension пока недокументирован. Список функций мало чем отличается от имеющегося.

Зачем понадобилось писать свой драйвер? Почему нельзя было приложить вектор усилий к доработке существующего ?

А в существующем есть две беды, которые мне мешают:

  1. Ограничение на длину varchar – 255. Это “лечиться” только конвертированием в text.
  2. “Неработа” в persistent-mode, которая заключается в том, что сервер (веб в первую очередь, sql потом) зависает после некоторого времени работы с mssql_pconnect (Богдан привет ;o) ).

Корни второй проблемы я кажется нашёл – bug#42584, но толи проблема беcпокоит только меня, толи не столь сильно беспокоит других. Маленькая просьба к почитателям этого поста – проголосуйте за важность этого бага (если он вам не безразличен разумеется).

16.10.07  |   | 2 comments

(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  |   | 2 comments