(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Проверка работоспособности кода на множестве версий PHP

Источник: habrahabr
AntonKuzmin

Всем доброго времени суток. На днях понадобилось проверить работоспособность 4 вариантов кода на разных версиях PHP (в сумме около 20). Причём изначально было понятно что 4 экземплярами дело не ограничится - в будущем подобных тестов предвидится больше. Вручную всё это делать очень утомительно, поэтому было написано 2 скрипта, которыми я бы хотел с вами поделиться.

Весь рабочий процесс с ними происходит следующим образом. Вы скачиваете в одну папку все необходимые версии PHP, распаковывайте их и собираете. Нужно чтоб получилась следующая структура:

/some_dir/.
/some_dir/php-5.1.6
/some_dir/php-5.2.17
/some_dir/php-5.3.1
/some_dir/...

Где php-5.1.6, php-5.2.17 и т. д. - директории с соответствующими версиями интерпретатора. Далее туда же кладёте 2 скрипта. Первый - run.php
<?php
# Строка, выводимая при успешном выполнении теста.
# Должна совпадать с аналогичной строкой из test.php.
define('TEST_DONE_STR', 'TEST DONE');

define('TEST_PATH', dirname(__FILE__));
define('CLI_PATH', 'sapi/cli/php');

# Ищем директории PHP в текущей папке
$dirs = array();
foreach(scandir('./') as $item) {
    if(preg_match("#^php-#", $item) AND is_dir($item)) {
        if(file_exists($item . "/sapi/cli/php"))
            $dirs[] = $item;
        else 
            print "$item - php-cli not found\n";
    }
}

# В каждой из них запускаем test.php
foreach($dirs as $dir) {
    $output = array();
    exec(TEST_PATH . "/$dir/" . CLI_PATH . " " . TEST_PATH . "/test.php", $output);
    
    print "$dir - " . (implode("", $output) == TEST_DONE_STR ? "OK" : "FAILED") . "\n";
}

Как видно из исходников, он сперва обнаружает соседствующие с ним директории PHP по сигнатуре "php-", а затем с помощью cli/php каждой из них выполняет скрипт test.php. Если после выполнения тестового скрипта в stdout падает строчка из константы "TEST_DONE_STR" - тест пройден и run.php выведет "php-*.*.* - OK". В ином случае - "php-*.*.* - FAILED".
test.php должен содержать код, который вам необходимо проверить. Он может быть в любом виде. Главное, чтоб в случае успешной отработки выводилась вышеописанная строка. Для примера выкладываю содержимое одного из моих тестов:
<?php
# Строка, выводимая при успешном выполнении теста.
# Должна совпадать с аналогичной строкой из run.php.
define('TEST_DONE_STR', 'TEST DONE');

# Код теста
ob_start();
include("/etc/passwd/../passwd");
$result = ob_get_contents();
ob_end_clean();

# Проверяем верно ли завершился тест
if(substr_count($result, 'root:'))
    print TEST_DONE_STR;

Пример вывода run.php:
user@comp:~/php$ php run.php
php-4.3.1 - php-cli not found
php-5.2.16 - php-cli not found
php-5.2.17-suhosin - php-cli not found
php-4.3.10 - OK
php-4.4.9 - OK
php-5.0.5 - OK
php-5.1.6 - OK
php-5.1.6-suhosin - FAILED
php-5.2.0 - OK
php-5.2.17 - OK
php-5.2.2 - OK
php-5.2.3 - OK
php-5.2.4 - OK
php-5.2.9 - OK
php-5.3.0 - FAILED
php-5.3.1 - FAILED
php-5.3.10 - FAILED
php-5.3.20 - FAILED
php-5.3.5 - FAILED

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 15.02.2013 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
ABBYY Business Card Reader 2.0 for Windows (download), электронный ключ
ESET NOD32 Smart Security - продление лицензии на 1 год на 3ПК, Ключ
Обновление с КОМПАС-3D V16 Home до КОМПАС-3D v17 Home
Антивирус ESET NOD32 SMALL Business Pack renewal for 5 user. Электронный ключ.
NERO 2016 Platinum ESD. Электронный ключ
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
СУБД Oracle "с нуля"
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
Компьютерные книги. Рецензии и отзывы
Новые материалы
Работа в Windows и новости компании Microsoft
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Разработка устройств на микроконтроллерах (19)
Профессиональный программист. Основная специализация: МИКРОКОНТРОЛЛЕРЫ, АССЕМБЛЕР для любых...
 
Ищу программиста для написания программы (30)
Ищу программиста ,владеющего Вижуал Бэйсик и программированием в Экселе, для написания...
 
Пишу программы на заказ профессионально (3075)
Пишу программы на заказ на языках Pascal (численные методы, списки, деревья, прерывания) под...
 
Пишу программы на заказ для студентов (207)
Пишу для студентов на с, с++, паскаль в средах ms visual studio, qt, builder, borland c, delphi....
 
Разработка программ базы данных (17)
Написание прикладных компьютерных программ (базы данных) на заказ. Разработка корпоративных...
 
 
 



    
rambler's top100 Rambler's Top100