Bonjour,
N'y-a-t-il pas eu une mise à jour de PHP de v7.0.x vers 7.0.15 cette nuit ?
Car je constate une régression importante entre hier soir et ce matin. J'ai un script d'administration qui ne marche plus.
Pour info, avec PHP 7.1.x (la version 7.1 actuelle à ce matin sur les hébergements mutualisés), tout marche bien (j'ai modifié le .ovhconfig pour utiliser 7.1). Cela ne résout cependant pas le problème pour les hébergements où php 7.0.15 est utilisé.
Il s'agit d'une erreur fatale dans une méthode statique de classe, définie dans un namespace. A l'intérieur de cette méthode, j'appelle la fonction php glob() ; en principe, sans précision d'un namespace, un appel de fonction est recherché dans le namespace courant, et si pas trouvé, php se reporte sur le namespace global. Dans mon cas, c'est ce comportement qui est attendu (et qui fonctionnait bien depuis des années, en tout cas avant php 7.0.15 / cette nuit).
Là, le message de l'exception est clair : il cherche glob dans la définition du namespace courant !!! Du jamais vu…
Pour info, je suis en environnement stable avec Composer (je précise car certains bugtrackers sur le net donnent des problèmes d'autoload).
—
Après une séance de debug, le problème apparaît à 98% ; cependant il arrive qu'en rechargeant la page, "ça marche". J'ai réussi à éliminer un maximum de dépendances et Composer. J'ai même enlevé les namespaces utilisés, car au final, même sans, ça plante quand même. Le fait que parfois (rarement), le script s'exécute bien, cela me fait penser à un bug dans le compilateur php. Bigre !
J'ai essayé sur d'autres hébergements, le problème n'est pas reproduit (avec php 7.0.15). Donc, il semblerait que ça soit limité au cluster (cluster017, offre kimsufi2015). Peut-être une install incomplète ou un pb de cache php ? enfin j'en sais rien…
Ce que je constate c'est qu'à de rares cas près, ça foire. Mais ça marche parfois, donc bon, sur un script aussi simple que ça !!! J'ai halluciné !
Ci-dessous les 2 minis fichiers que j'ai bricolé pour reproduire simplement le bug (premier appel glob ok, second appel dans fichier inclus, kaput)
index.php :
```php
ini_set('display_errors', 'stdout');
glob(DIR); // CE GLOB-LA MARCHE !!!
require "test.php";
a::fun();
?>
```
et test.php :
```php
class a
{
static function fun()
{
$sites = glob('*');
print_r($sites);
}
}
?>
```
on ne va pas dir que c'est moi qui ne sait pas coder !
message : Call to undefined function glob() in test.php:6