Mon collègue et moi avons rencontré certains plutôt étrange comportements. Nos environnements sont Ubuntu 11.10, PHP 5.3.6-13ubuntu3.6 avec Suhosin-Patch, et Windows 7 PHP 5.3.5.
Sur nos machines, le code suivant s'exécute que l'on attend:
<?php
function t() { }
var_dump(is_callable('/'));
Avec la sortie de:
bool(false)
Sur un de nos serveurs, CentOS version 5.7 (Final), PHP 5.3.8, le même code produit:
bool(true)
Sans l' t()
fonction is_callable
s'exécute comme prévu. Notez que is_function
a le même comportement que is_callable
dans ces tests.
Quelqu'un aurait-il une idée de ce que pourrait être la cause?
Edit:
Il semble se produire uniquement lorsque une fonction nommée t
est présent, rien d'autre, comme b
, c
etc, et la sortie est aussi prévue.
Edit - test, avec plus de personnages:
<?php
function t() { }
foreach(str_split('/abcdefghijkmnopqrstuvwxyz023456789ABCDEFGHIJKLMNOPQRSTUVXYZ!@#$%^&*()-_+=`~;:[]{}\\|\'"?.>,<') as $character) {
if (is_callable($character)) var_dump($character, is_callable($character));
}
Les sorties suivantes sur le serveur:
string(1) "/"
bool(true)
string(1) "t"
bool(true)
string(1) "T"
bool(true)
string(1) "_" // gettext
bool(true)
string(1) ":" // With the t() function undefined, this remains callable on the server
bool(true)
Sur notre environnement, la sortie est prévue:
string(1) "t"
bool(true)
string(1) "T"
bool(true)
Edit - plus d'informations sur cbuckley commentaire:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
function t() { }
$v = '/'; $v();
Produit de sortie: Call to undefined function /()