(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 Lingvo x6 Европейская Профессиональная версия, электронный ключ
Toad Data Modeler Per Seat License/Maint
NERO 2016 Classic ESD. Электронный ключ
VMware Horizon Apps Standard, v7 : 10 Pack (Named User)
Panda Mobile Security - ESD версия - на 1 устройство - (лицензия на 1 год)
 
Другие предложения...
 
Курсы обучения   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: новости, статьи, обзоры
ЕRP-Форум. Творческие дискуссии о системах автоматизации
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Требуется UI C# WPF программист удаленно на долгий срок (1)
XSENIO в поиске талантливого программиста UI (пользовательского интерфейса). Это прекрасная...
 
Написание программ для микроконтроллеров AVR, PIC, ARM, STM32 (22)
Напишу любую программу на любом искусственном языке. Профессиональный программист. Основная...
 
Разработка программ базы данных (39)
Написание прикладных компьютерных программ (базы данных) на заказ. Разработка корпоративных...
 
Ищу программиста для написания программы (55)
Ищу программиста ,владеющего Вижуал Бэйсик и программированием в Экселе, для написания...
 
Беговая дорожка (1)
Купила беговую дорожку вот здесь https://4gym.com.ua/product/technogym-artis-run Очень классная,...
 
 
 



    
rambler's top100 Rambler's Top100