Замолвим слово об отладке и профилировании. Список полезных инструментов для php разработчика

Начинается все, с вот такого милого сообщения от хостера клиенту, цитирую с некоторыми купюрами

Здравствуйте!
Домен newglas.ru заблокирован за рассылку спам сообщений.

Спам рассылался скриптом r.php, выдержка из лога:

98.130.0.219 – - "POST /r.php HTTP/1.0" 200 220 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" 192.227.242.217 – - "POST /r.php HTTP/1.0" 200 207 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)" 200.57.147.120 – - "POST /r.php HTTP/1.0" 200 220 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; chromeframe; SLCC1)" 62.109.27.98 – - "POST /r.php HTTP/1.0" 200 212 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) Comodo_Dragon/4.0 Chrome/4.0 Safari/532.5"

98.130.0.219 –- [ 15 / Jun / 2014 : 18 : 59 : 48 + 0400 ] "POST /r.php HTTP/1.0" 200 220 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"

192.227.242.217 –- [ 15 / Jun / 2014 : 19 : 01 : 52 + 0400 ] "POST /r.php HTTP/1.0" 200 207 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"

200.57.147.120 –- [ 15 / Jun / 2014 : 19 : 04 : 14 + 0400 ] "POST /r.php HTTP/1.0" 200 220 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; chromeframe; SLCC1)"

62.109.27.98 –- [ 15 / Jun / 2014 : 19 : 06 : 06 + 0400 ] "POST /r.php HTTP/1.0" 200 212 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) Comodo_Dragon/4.0 Chrome/4.0 Safari/532.5"

Кроме этого спам скрипта, антивирус нашел следующие зараженные файлы:

httpdocs/images/images.php: PHP.Hide FOUND httpdocs/images/stories/im6207n6g.gif: PHP.Hide FOUND httpdocs/images/stories/im4566n9g.gif: PHP.Hide FOUND httpdocs/images/stories/im4760n2g.gif: PHP.Hide FOUND httpdocs/images/stories/muakero.php: PHP.Hide FOUND httpdocs/images/stories/im5617n0g.gif: PHP.Hide FOUND httpdocs/includes/domit/lo4754.php: Trojan.PHP-43 FOUND Для разблокировки, исправьте пожалуйста, проблему.

httpdocs / images / images . php : PHP . Hide FOUND

httpdocs / images / stories / im6207n6g . gif : PHP . Hide FOUND

httpdocs / images / stories / im4566n9g . gif : PHP . Hide FOUND

httpdocs / images / stories / im4760n2g . gif : PHP . Hide FOUND

httpdocs / images / stories / muakero . php : PHP . Hide FOUND

httpdocs / images / stories / im5617n0g . gif : PHP . Hide FOUND

httpdocs / includes / domit / lo4754 . php : Trojan . PHP - 43 FOUND < em >

Дляразблокировки, исправьтепожалуйста, проблему. < / em >

Пошагово.
1. Для поиска вирусов скачиваем мой .
2. Распаковываем его в корень сайта.

3. Просим хостера разблокировать сайт. Обычно хостер соглашается, если удалить файлы из письма. На время лечения важно заблокировать сайт для других. Чтобы остановить рассылку спама и прочие вредоносные функции.
Я делаю это строчками в.htaccess

Order deny,allow deny from all # Список IP через пробел, с которых доступ разрешен Allow from 188.88.88.88

Где 188.88.88.88 — мой IP. Впрочем можно вписать и несколько айпи, например дать доступ клиенту.

4. запускаем мой антивирусник по адресу. http://имя.сайта/fscure/
При первом запуске скрипт составляет список файлов и проверяет подозрительные сигнатуры. Их список можно увидеть внизу. Сами сигнатуры можно настроить в config.php . Вот так обычно выглядит скрипт после запуска.

Первое что нужно сделать после запуска, это настроить сортировку. Вирусы скорее всего попали на сайт последними. На скрине видно, что время модификации файлов меньше, чем время создания. Значит сортируем по времени создания.

Файлы у которых подозрительные сигнатуры, например eval (base64_decode(проверяем кликая по ссылке.

Вот так например выглядит зашифрованный Filesman PHP.shell , он же Trojan.PHP-43 , backdoor.php.phpshell . Кнопа "Удалить" поможет герою.

Далее рутина, нужно проверять подряд все подозрительные файлы. С некоторым опытом, вы начнете угадывать по названию и сигнатрам наличие вируса. А пока придется смотреть код.
Рутину можно сократить активно используя поиск. Найдя очередной вир, вобьем в поиск уникальную строку(сигнатуру) из тела вируса. Например "base64_decode($_POST "

Нашлись три файла. Файлы маленькие, у 2-х размер совпадает. Поэтому достаточно проверить один из них и удалить все.
Важно! Не забываем после удаления перегрузить список сканера .

А вот прекрасное. Часто встречающиеся с картинки с однотипными названиями, например im4966n9g.gif. Смотрим исходный код "картинки" и видим.

No doubt PHP is one of the most popular languages amongst developers and aids them in creating innovative and dynamic web applications. PHP developers keep looking for useful and handy php tools which they can use to make their workflow and web related tasks easier, faster, and better. There are scads of php tools available over the internet for php developers, but finding an appropriate php tool is quite an arduous task and demands effort and time.

For saving your precious time and endeavors, I have gathered some of the best php tools for developers that would help you with your development tasks and let you create innovative and useful web applications.

If you like the article you might be interested in our other article on .

1. DebugBar

DebugBar is a free and open source app that can integrate into any PHP project and collect + present profiling data. It has no dependencies, supports Ajax requests and includes generic data collectors and collectors for well known libraries. The bar is 100% JavaScript that sits in the footer (like Dev. Tools). New collectors and views can be added with ease and it is possible to save/re-run previous requests.

2. Monsta FTP


Monsta FTP is an open source PHP/Ajax cloudware that puts FTP file management right in your browser, anywhere, any time. You can drag & drop files into your browser and watch them upload, like magic. It supports on-screen file editing. There is multi-language support as well. It has been tested on Chrome, Firefox, Internet Explorer and Safari. It is released under GNU General Public License. You can download for free and install it on your own server.


Phalcon PHP is a web framework delivered as a C extension providing high performance and lower resource consumption. Phalcon PHP is written in C with platform independence in mind. As a result, Phalcon PHP is available on Microsoft Windows, GNU/Linux, Mac OS X, You can either download a binary package for the system of your choice or build it from sources.

4. Pinba


Pinba is a MySQL storage engine that acts as a realtime monitoring/statistics server for PHP using MySQL as a read-only interface. It accumulates and processes data sent over UDP by multiple PHP processes and displays statistics in a nice human-readable form of simple “reports”, also providing read-only interface to the raw data in order to make possible generation of more sophisticated reports and stats.

5. CaseBox


CaseBox is an open source and PHP/MySQL-powered web application forstoring + managing records, tasks and files. It has a desktop-like interface where we can create an unlimited-level of directories and store stuff in the structure preferred. Tasks with deadlines can be created, assigned to users and the progress can be tracked easily. We can store the information of clients and any number of files there as well. The contents of the files are indexed so that locating a PDF/Word.. file with its contents is pretty quick.

6. Munee


Munee is an all-in-one library that handles many things related to optimization and manipulation of website assets. The library has a powerful caching feature that can cache resources in both server and client-side. It integrates well with the PHP image manipulation library: Imagine for resizing or cropping images (and caching them afterwards). Munee can automatically compile LESS, SCSS and CoffeeScript. And, it can combine CSS + JS files into a single request. Also, these CSS-JS files can be minified for a better performance.

7. PHPImageWorkshop


PHPImageWorkshop is an open source class using the GD library that helps you to manage images with PHP. This class is thought like photo editing software like Photoshop and GIMP: you can superpose many layers or even layer groups, each layer having a background image.
The class was thought to be the most flexible possible: superimposing an infinity of images (to add watermark), rotating (and not just 45 / 90°), resizing, cropping (thumbnail). An ImageWorkshop object is a layer AND a group at the same time. It has got a background image and a stack of sublayers on the top of its background.


Sylius is an open source and free e-commerce solution for PHP (and based on Symfony2). It is capable of managing stores of any size and having complex products + categories. Products can have different tax rates, many shipping methods are supported and it is integrated with Omnipay (multi-gateway payment processing library).

9. Pico


Pico is an open source CMS application that is capable of very few things, which is the main point. It uses flat-files as the database and built with PHP. Simply, there is no setup and the app works instantly. The contents are stored in .md files, markdown formatting is used and they can be edited in your favorite text editor. For the designs/theming, Pico makes use of the Twig templating engine and it is documented well.


phpMyFAQ is a pretty stable and open source PHP F.A.Q. application that has many features for building a good F.A.Q. system. A powerful admin interface exists for managing the categories, entries, users and also viewing the stats. It is possible to enable users to ask or answer questions and comment to them or keep it admins-only. There is an advanced search system empowering users to locate the related answers with ease. The F.A.Q. page has some ready-to-use modules like “most popular, latest or sticky questions”. Its look and feel can be customized with HTML-CSS, interface has multi-language support and all questions-answers can be exported as a PDF (with automated table of contents).

  • Перевод

PHP один из самых широко используемых языков для создания вебсайтов. PHP фреймворки, такие как Zend, CakePHP, CodeIgniter и т.д и open source классы и библиотеки упростили разработку.
Независимо от того, являетесь ли вы опытным разработчиком или новичком, инструменты, которые вы используете, имеют прямое влияние на вашу продуктивность. Здесь собран список действительно полезных утилит и расширений для PHP разработчиков, которые помогут ускорить разработку, и улучшит итоговое качество кода.

ТестированиеPHPUnit
PHPUnit является одним из семейства тестирующий фреймворков xUnit и упрощает написание тестов, так же как и их запуск и анализ результатов.

SimpleTest это аналог JUnit/PHPUnit. Поддерживает mock объекты и может быть использован для автоматизации регрессионного тестирования веб приложений. Это возможно при помощи скриптабельного HTTP клиента, парсящего страницы и симулирующего такие вещи, как переход по ссылкам и отправка форм.
vfsStream
vfsStream это обертка для потоков файловой, полезная при юнит тестировании для создания mock объектов файловой системы. Можно использовать совместно с любым тестирующим фреймворком, например SimpleTest или PHPUnit.Непрерывная интеграцияphpUnderControl
phpUnderControl это аддон для системы автоматической сборки CruiseControl, который содержит некоторые из лучших средств разработки на PHP. Проект нацелен на то, чтобы первые шаги с PHP и CruiseControl были как можно проще. К phpUnderControl прилагается утилита для модификации существующей развернутой системы CruiseControl.
Xinc
Xinc это сервер непрерывной интеграции написанный на PHP 5. Имеется встроенная поддержка Subversion и Phing (то есть и PHPUnit), и может быть легко модифицирован для поддержки других систем контроля версий и билд систем.Cheat SheetsPHP Cheat Sheet от AddedBytes
Одностраничный cheat sheet, перечисляющий аргументы для функций форматирования дат, синтаксис регулярных выражений и распространенные функции.
PHP 5 Online Cheat Sheet
Приведение типов: Boolean, Integer, String, Array, Object/Class; Строки: функции, обработка; Массивы: функции, обработка; Классы: объявление, объявление методов, видимость; Дата/Время: функции, форматы; Предопределённые переменные: $_SERVER, $_FILES

Сегодня, уважаемый читатель, я предлагаю продолжить изучение программирования на php посредством фреймворка Kohana 3.1. Данную статью и видеоурок я посвящу теме публикации материалов из админки .

План действий на сегодня:

  • В админке создать форму добавления материалов. Форма добавления будет содержать выпадающий список с именами категорий (в выбранную категорию будет добавляться публикуемый материал) и область ввода текстового содержимого самого материала (textarea).
  • К области ввода содержимого материала прикрутить визуальный редактор CKEditor .
  • Обезопасить вводимый материал от внедрения JavaScript-сценариев. Есть специальная библиотека, очищающая контент от JavaScript, называется HTML Purifier (проблема возможного внедрения вредоносного JavaScript в контент сайта описана ниже).

Видеоурок

С момента подключения визуального редактора возникает проблема возможного внедрения вредоносного JavaScript в контент . Дело в том, что визуальный редактор изменяет форматирование текста путем добавления HTML-тегов. Соответственно, для сохранения форматирования контента мы должны отправить в БД HTML-код, полученный в результате работы визуального редактора, без замены HTML-тегов текстовыми сущностями (иными словами без “прослешивания” PHP-функцией htmlspecialchars). На ряду с HTML-разметкой в БД запросто может быть отправлен вредоносный JavaScript, который успешно выполнится на странице отображения материала.

Решение проблемы внедрения JavaScript - подключение библиотеки фильтров HTML Purifier. Адаптированную версию Purifier для Kohana 3.1 можно скачать на GitHub .

Поясню процесс подключения HTML Purifier к Kohana 3.1:

  • Скачанный с GitHub архив необходимо распакавать в папку kohana\www\modules\htmlpurifier\
  • Скачать с оф. сайта HTML Purifier свежую версию библиотеки и скопировать ее содержимое в папку kohana\www\modules\htmlpurifier\vendor\htmlpurifier\
  • Добавить инструкцию по подключению нового модуля Purifier в файл bootstrap.php: найти код "orm" => MODPATH."orm", и сразу под ним дописать строку "htmlpurifier" => MODPATH."htmlpurifier".

Теперь мы получили возможность использовать метод Security::xss_clean($content) для очистки содержимого переменной $content от JavaScript. Данный метод непосредственно будет применен в листинге 3 модели Materials (см. ниже).

Листинг 2. Код контроллера, обрабатывающий сохранение материала в БД

If(isset($_POST["materialsavebtn"])) { $categoryId = Arr::get($_POST, "categoryId", ""); $content = Arr::get($_POST, "content", ""); $material = ORM::factory("material"); $material->addMaterial($categoryId, $content); Request::initial()->redirect("admin"); }

Как видно из строки 7, модель Material (которую мы создавали в ) должна быть дополнена методом addMaterial(), непосредственно осуществляющего сохранение материала в БД. Код метода addMaterial() приведен в листинге 3.

Листинг 3. Метод сохранения материала, расширяющий возможности модели Material

Public function addMaterial($categoryId, $content) { $this->category_id = $categoryId; $this->content = Security::xss_clean($content); $this->save(); }

Видите новый метод в строке 4? Это как раз та самая защита от внедрения JavaScript в контент сайта. Теперь любой код, написанный в тегах ..., будет удален.

Пришло время показать очень удобный способ заполнения полей ctime и mtime таблицы materilals (поля хранят время создания и изменения материала соответственно).

Достаточно в начале объявления модели Material написать две строки:

Protected $_created_column = array("column" => "ctime", "format" => TRUE); protected $_updated_column = array("column" => "mtime", "format" => TRUE);

Kohana автоматически подставит время создания или модификации записи в БД в Unix time формате.

  • Отладка
    • Tutorial

    Все идет от лени. Вы получили чужой очень большой проект в котором нужно сделать небольшие правки, или же написали скрипт и сразу не очевидно, что в нем еще требует оптимизации. Как быть? Читать и анализировать код, выводить каждый шаг на экран или в файл (var_dump() и т.д.) не всегда эффективно, ведь можно воспользоваться средствами отладки, которых на сегодняшний день очень много. Кратко перечислю часто встречающиеся…

    Xdebug Debugger and Profiler Tool - расширение PHP. Требует установки на сервер и настройки. Может отображать: стек вызовов функций, распределение памяти. Возможности: профайлинг, анализ покрытия кода, защита от бесконечной рекурсии, интерактивная отладка скриптов. ПО для визуализации логов xdebug: Webgrind – веб-интерфейс для профайлинга Xdebug, написанный на PHP, MacGDBp – Mac OS X клиент, который позволяет отлаживать PHP приложения при помощи Xdebug. Linux GUI . Бесплатный. Интегрируется с многими IDE. См . При включении опции в php.ini:

    Html_errors = On
    будет форматировать вывод var_dump() и сообщения об ошибках.

    Xhprof - расширение PHP от facebook. Требует установки на сервер и настройки. Позволяет собирать время выполнения каждой функции, использование памяти, время ожидания, количество вызовов и многое другое. Это расширение доступно из репозитория PECL . Почитать документацию можно тут [тыц] . Так же . Из преимуществ сильно не грузит систему, можно ставить на бой. Бесплатный.

    DBG (PHP Debugger and Profiler) - расширение PHP. Требует установки на сервер и настройки. Позволяет работать на тестовом или/и рабочем сервере и отлаживать скрипты локально или удаленно, из IDE или консоли. Платная/бесплатная версии.

    ZendDebug - расширение PHP, входит в состав Zend Studio (платная IDE). Требует установки на сервер и настройки. Позволяет практически все тоже, что и xdebug, GUI в IDE Zend Studio или Zend Server. Платный. Чуть ниже рассмотрим его более подробно.

    Memtrack - расширение PHP. Позволяет искать утечки памяти. Удобно проверять скрипты запускаемые по крону или в качестве демона. Бесплатный. См. [тыц]

    APD Advanced PHP debugger - расширение PHP. Слабый конкурент xdebug, но имеет в себе возможности memtrack. Плохо интегрируется с IDE, однако имеет консольный интерфейс (см. [тыц ]). Бесплатный.

    DTrace + PHP - расширение PHP. Низкоуровневая отладка. См. [тыц] . Так же не нужно забывать о существовании и прочих системных отладчиков, которые порой способны показать где, так сказать, «собака порылась». Например
    strace -p 1111
    анализ системных вызов скрипта, с PID=1111. Также сетевые анализаторы wireshark (Windows), ngrep , tcpdump (Linux) - для анализа сетевого трафика, протоколов и т.д.

    FirePHP - класс, написан на php + расширение для FireFox. Дает возможность посылать отладочные сообщения в консоль Firebug с помощью вызова php методов. Вся информация посылается через заголовки X-FirePHP-Data, тем самым не пересекаясь с основным контентом страниц. Бесплатный. См.

    php-console - написан на php + расширение для Google Chrome. Аналог FirePHP, только для Google Chrome, но несколько с другим функционалом. Бесплатный. См. php-console

    PHP_Debug класс, написан на php. Помогает в отладке PHP кода, показывает путь выполнения скрипта, отображает все переменные, время выполнения, включенные файлы, выполненные запросы, watch переменные… Эта информация собирается во время выполнения скрипта, и отображается по его завершению и потом может быть использована в любой момент. Бесплатный.

    Pinba - сервис мониторинга и статистики в реальном времени. См

    . Бесплатная.

    Отладчики в современных CMS/CMF/Framework . Их не рассматриваем, т.к. зачастую они имеют специфику и разработаны под конкретную оболочку, что делает не возможным использование их извне (IDE) или применять без значительных изменений в своих разработках.

    Для сбора и анализа узких мест в ваших приложениях иногда может пригодится методика централизованного хранении syslog, см .

    Вернемся к ZendDebug. Так как я в основном пользуюсь Zend Studio, то мне наиболее удобно с ним работать. Он позволяет сразу понять ход выполнения скрипта, поддерживает навигацию по коду из IDE. Не нужны никакие сторонние инструменты, кроме IDE. Это действительно удобно, так сказать настроил один раз и пользуешься.

    Отладка и профилирование скриптов в Zend Studio возможна как минимум двумя способами при помощи xdebug или ZendDebug. Только вот профилирование сайта с xdebug у меня не заработало, пишет что нельзя так - только отладка.

    Про локальную отладку кода писали еще во времена Zend Studio 5.5 . С тех времен мало что изменилось. Но я столкнулся с проблемой, когда web сервер и отлаживаемый код находится на удаленном сервере. Часто такие песочницы закрыты извне, а отрыты только нужные для работы порты. Но если к такой песочнице есть доступ по SSH, то настроить ZendDebug все таки можно, не мешая фаерволу выполнять свою функцию.

    Забегая вперед отмечу, что для этого нужно будет создать SSH туннель. Немного о том, зачем SSH туннель нужен в этом случае.

    По умолчанию Zend Studio инициирует сеанс удаленной отладки, отправив HTTP запрос на отладочный сервер. Этот запрос содержит параметры обратного адреса (IP-адрес и номер порта), который ZendDebug (установленный на сервере) использует при запуске нового подключения к Zend Studio, чтобы ретранслировать информацию об отладке. Кстати, инициализировать сам сеанс отладки можно как из IDE, так и из браузера установив компонент, поставляемый вместе с Zend Studio, будет довольно удобно.

    Обычная отладочная сессия будет иметь место, например, в случае, когда код, WEB сервер и IDE находятся на локальном компьютере.

    Но зачастую WEB сервер разделен с IDE брандмауэрами, маршрутизаторами, прокси-серверами т.д. Тут-то и пригодится SSH туннель.

    В случае с туннелем процесс установления сеанса отладки состоит из двух основных этапов:
    - создания SSH туннеля;
    - настройки Zend Debugger, для передачи своего трафика через SSH туннель.

    Схема отладочной сессии через SSH туннель примет вид:


    Обычная отладочная сессия через SSH туннель

    Zend Studio, по умолчанию, открывает порт 10137. Его и будем использовать в примерах далее. Можно назначить и другой порт, если это необходимо.

    Создание SSH туннеля в Linux или Mac OS X можно в командной строке:
    ssh :127.0.0.1: @пример:

    User@workstation:~> ssh -R 10137:127.0.0.1:10137 user@debugserver user@debugserver"s password: