Mein Kollege und ich sind auf ein ziemlich seltsames Verhalten gestoßen. Unsere Umgebungen sind Ubuntu 11.10, PHP 5.3.6-13ubuntu3.6 mit Suhosin-Patch und Windows 7 PHP 5.3.5.
Auf unseren Maschinen läuft der folgende Code erwartungsgemäß:
<?php
function t() { }
var_dump(is_callable("https://stackoverflow.com/"));
Mit der Ausgabe:
bool(false)
Auf einem unserer Server, CentOS Release 5.7 (Final), PHP 5.3.8, erzeugt derselbe Code:
bool(true)
Ohne das t()
Funktion, is_callable
funktioniert wie erwartet. Beachten Sie, dass is_function
verhält sich genauso wie is_callable
bei diesen Prüfungen.
Hat jemand eine Ahnung, woran das liegen könnte?
Bearbeiten:
Es scheint nur zu passieren, wenn eine Funktion benannt wird t
vorhanden ist, alles andere, wie b
, c
usw., und die Ausgabe ist wie erwartet.
Bearbeiten – Testen mit mehr Zeichen:
<?php
function t() { }
foreach(str_split('/abcdefghijkmnopqrstuvwxyz023456789ABCDEFGHIJKLMNOPQRSTUVXYZ!@#$%^&*()-_+=`~;:[]{}\\|\'"?.>,<') as $character) {
if (is_callable($character)) var_dump($character, is_callable($character));
}
Gibt auf dem Server folgendes aus:
string(1) "https://stackoverflow.com/"
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)
In unseren Umgebungen ist die Ausgabe wie erwartet:
string(1) "t"
bool(true)
string(1) "T"
bool(true)
Bearbeiten – weitere Informationen zu cbuckleys Kommentar:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
function t() { }
$v = "https://stackoverflow.com/"; $v();
Erzeugt Ausgabe: Call to undefined function /()
Das ist wirklich bizarr. Ist es nur für
'/'
?– Hamisch
2. März 2012 um 0:41 Uhr
@Hamish Ich habe meine Frage mit Codetests aktualisiert
is_callable
auf mehr Zeichen– Michael Robinson
2. März 2012 um 0:51 Uhr
PHP, du verblüffst mich weiterhin. bugs.php.net 🙂
– cmbuckley
2. März 2012 um 1:32 Uhr
Weitere Tests: versuchen
is_callable('/', false, $realName); var_dump($realName);
– cmbuckley
2. März 2012 um 1:34 Uhr
Versuchen Sie, die geladene Erweiterung auf beiden Servern zu vergleichen.
– Mezze
2. März 2012 um 8:22 Uhr