Version courte
Pourquoi ce code non modifié du PHP officiel 5.6.18 version:Building PHP5.6.18 Arch Linux: test de Windows ne sauté malgré PHP_OS vérifier
--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');
}
?>
... pas la cause un test Windows uniquement à ignorer lorsque je construis le paquet PHP sur Arch Linux?
Version longue
Je suis en train de construire PHP5.6.18 utilisant le PKGBUILD du système officiel Arch Build. Voici ce que je l'ai fait:
git clone git://projects.archlinux.org/svntogit/packages.git
- Je suis passé par le git history of the php package et identifié this commit comme le meilleur point de départ - essentiellement la dernière livraison avant la UPréc à PHP7. Donc, je cd dans
packages
, etgit checkout
qui commettent l'ID. - I mis à la PKGBUILD comme ceci:
- réglé
pkgver=5.6.18
- réglé
pkgrel=1
- définir le premier md5sum à
'177ba962557795866ae331ad4ad99bba'
- réglé
- setup clean chroot for building (ce qui a réduit les échecs de test de 2-3 à 1
- Créer un fichier php:
makechrootpkg -c -r $CHROOT
(dans le répertoire contenant le fichierPKGBUILD
)
La construction fonctionne très bien, mais je reçois l'échec du test suivant:
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)
=====================================================================
OK, donc le win32
semble déjà suspect dans le nom du fichier, et un regard sur le contenu du fichier suggère en effet que le test devrait être sautée sur 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');
}
?>
Notez le PHP_OS
de contrôle connexes. Donc, je pense, peut-être PHP_OS est en quelque sorte obtenir la mauvaise valeur. Alors, je:
- aller manuellement dans le chroot de construction:
arch-nspawn $CHROOT/$USER/
- Ajouter
echo substr(PHP_OS, 0, 3)
au début de ce test (juste sous la<?php
dans la section--FILE--
, et dans le fichierstream_socket_enable_crypto-win32.php
réel) - Réexécutez-le en utilisant le script
stream_socket_enable_crypto-win32.sh
dans le même répertoire, je vois en effet la sortie attendueLin
.
Pourquoi ce test n'est-il pas ignoré? Je suis vraiment confus. Comment puis-je résoudre ce problème?
Comme il est une solution plutôt qu'une solution appropriée, je ne vais pas marquer ceci comme la réponse tout à fait encore, voir si n'importe qui a une meilleure idée/solution/cause racine. – m01