Đồng nghiệp của tôi và tôi đã gặp phải một số hành vi khá kỳ quặc. Môi trường của chúng tôi là Ubuntu 11.10, PHP 5.3.6-13ubuntu3.6 với Suhosin-Patch và Windows 7 PHP 5.3.5.Hành vi của is_callable trên '/'
Trên máy của chúng tôi, đoạn code sau chạy như người ta mong đợi:
<?php
function t() { }
var_dump(is_callable('/'));
Với kết quả:
bool(false)
Trên một trong các máy chủ của chúng tôi, CentOS phát hành 5,7 (Final), PHP 5.3 .8, cùng mã sản xuất:
bool(true)
Nếu không có chức năng t()
, is_callable
hoạt động như mong đợi. Lưu ý rằng is_function
hoạt động giống như is_callable
trong các thử nghiệm này.
Có ai có bất kỳ ý tưởng nào có thể gây ra điều này không?
Sửa:
Nó dường như chỉ xảy ra khi một hàm có tên t
là hiện nay, bất cứ điều gì khác, như b
, c
vv, và đầu ra được như mong đợi.
Edit - thử nghiệm với nhiều ký tự:
<?php
function t() { }
foreach(str_split('/[email protected]#$%^&*()-_+=`~;:[]{}\\|\'"?.>,<') as $character) {
if (is_callable($character)) var_dump($character, is_callable($character));
}
đầu ra sau trên máy chủ:
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)
On môi trường của chúng tôi, đầu ra là như mong đợi:
string(1) "t"
bool(true)
string(1) "T"
bool(true)
Chỉnh sửa - mo tái thông tin về bình luận cbuckley của:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
function t() { }
$v = '/'; $v();
Tạo đầu ra: Call to undefined function /()
Đó là thực sự kỳ lạ. Nó chỉ dành cho ''/''? – Hamish
@Hamish Tôi đã cập nhật câu hỏi của mình với kiểm tra mã 'is_callable' trên nhiều ký tự –
Điều gì xảy ra khi bạn thực hiện' $ v = '/'; $ v(); '? – cmbuckley