2016-02-20 7 views
0

короткой версии

Почему это неизмененный код из официального релиза PHP 5.6.18:Строительство PHP5.6.18 на Arch Linux: окна тест не пропускается несмотря на PHP_OS проверить

--SKIPIF-- 
<?php 
if (phpversion() < "5.3.0") { die('SKIP php version so lower.'); } 
if (!extension_loaded('openssl')) { die('ext/openssl required'); } 
if(substr(PHP_OS, 0, 3) != 'WIN') { 
     die('skip windows only test'); 
} 
?> 

... не вызывают тест только для Windows, который нужно пропустить, когда я создаю пакет PHP на Arch Linux?

Длинная версия

Я пытаюсь построить PHP5.6.18 с помощью PKGBUILD из официальной Arch Build System. Вот что я сделал:

  1. git clone git://projects.archlinux.org/svntogit/packages.git
  2. Я прошел через git history of the php package, и определил this commit лучшей отправной точки - в основном последней фиксации перед uprev в PHP7. Итак, я подключился к packages и git checkout, которые фиксируют ID.
  3. Я обновил PKGBUILD так:
    • набор pkgver=5.6.18
    • установить pkgrel=1
    • установить первый md5sum к '177ba962557795866ae331ad4ad99bba'
  4. setup clean chroot for building (это уменьшало тестовые отказы от 2-3 до 1)
  5. Build php: makechrootpkg -c -r $CHROOT (в каталоге с файлом PKGBUILD.

Билд работает отлично, но я получаю следующее провале теста:

Number of tests : 6651    6180 
Tests skipped : 471 ( 7.1%) -------- 
Tests warned : 1 ( 0.0%) ( 0.0%) 
Tests failed : 1 ( 0.0%) ( 0.0%) 
Expected fail : 9 ( 0.1%) ( 0.1%) 
Tests passed : 6169 (92.8%) (99.8%) 
--------------------------------------------------------------------- 
Time taken  : 45 seconds 
... 
FAILED TEST SUMMARY 
--------------------------------------------------------------------- 
mixed stream_socket_enable_crypto(resource $stream , bool $enable [, int $crypto_type [, resource $session_stream 
]]) ; [ext/standard/tests/streams/stream_socket_enable_crypto-win32.phpt] 
===================================================================== 

===================================================================== 
WARNED TEST SUMMARY 
--------------------------------------------------------------------- 
Bug #70172 - Use After Free Vulnerability in unserialize() [ext/standard/tests/serialize/bug70172.phpt] (warn: XFA 
IL section but test passes) 
===================================================================== 

ОК, так что win32 уже выглядит подозрительным в имени файла, и посмотреть на содержимое файла действительно предполагает, что тест должен быть пропущен на Linux:

--TEST-- 
mixed stream_socket_enable_crypto(resource $stream , bool $enable [, int $crypto_type [, resource $session_stream ]]) ; 
... 
--SKIPIF-- 
<?php 
if (phpversion() < "5.3.0") { die('SKIP php version so lower.'); } 
if (!extension_loaded('openssl')) { die('ext/openssl required'); } 
if(substr(PHP_OS, 0, 3) != 'WIN') { 
     die('skip windows only test'); 
} 
?> 

Примечание соответствующая проверка PHP_OS. Итак, я думаю, возможно, PHP_OS каким-то образом получает неправильное значение. Так, I:

  1. вручную перейти в сборки Chroot: arch-nspawn $CHROOT/$USER/
  2. Добавить echo substr(PHP_OS, 0, 3) в начале этого теста (только под <?php в разделе --FILE--, и в самом stream_socket_enable_crypto-win32.php файле)
  3. Повторно запустите его, используя сценарий stream_socket_enable_crypto-win32.sh в том же каталоге, я действительно вижу ожидаемый вывод Lin.

Почему этот тест не пропущен? Я действительно смущен. Как я могу исправить эту проблему?

ответ

1

В качестве обходного пути, потому что теперь я буду просто удалить тест в prepare() разделе PKGBUILD файла:

prepare() { 
     cd ${srcdir}/${pkgbase}-${pkgver} 
     # .... 
     # add this line: 
     rm ./ext/standard/tests/streams/stream_socket_enable_crypto-win32.phpt 
} 
+0

Поскольку это временное решение, а не полное решение, я не буду отмечать это как ответ еще, посмотрите, есть ли у кого-то лучшая идея/решение/первопричина. – m01

0

Было бы хорошо, если бы M01 позволил бы нам знать имя файла PKGBUILD он отредактирован, чтобы я мог взглянуть на это.

Но до тех пор просто открыть этот файл:

/usr/src/php/ext/standard/tests/streams/stream_socket_enable_crypto-win32.phpt 

и найти эту линию, как показано выше, а также.

И просто закомментируйте строку, если кто-то еще работает PHP 5.3, они должны быть tarballed и пернатых все равно лол ..

//commented out by dave due to bug and should be skipped 
//if (phpversion() < "5.3.0") { die('SKIP php version so lower.'); } 
+0

Я уверен, что это только файл [main php PKGBUILD] (https://git.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/php), например. '/ var/abs/extra/php/PKGBUILD' (при использовании АБС), который создает целое количество пакетов, связанных с php. – m01