(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
Nero Basic Burning ROM 2018 VL 5 - 9 License corporate
TeeChart Pro VCL/FMX with source code single license
Traffic Inspector GOLD 5 Учетных записей
SAP Crystal Reports 2008 INTL WIN NUL License
VMware Workstation 14 Pro for Linux and Windows, ESD
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
СУБД Oracle "с нуля"
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
Новые материалы
Мир OLAP и Business Intelligence: новости, статьи, обзоры
Каждый день новые драйверы для вашего компьютера!
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100