gpt4 book ai didi

php - is_callable 在 '/' 上的行为

转载 作者:IT王子 更新时间:2023-10-29 01:12:32 24 4
gpt4 key购买 nike

我和我的同事遇到了一些相当奇怪的行为。我们的环境是 Ubuntu 11.10、带有 Suhosin-Patch 的 PHP 5.3.6-13ubuntu3.6 和 Windows 7 PHP 5.3.5。

在我们的机器上,以下代码按预期运行:

<?php
function t() { }
var_dump(is_callable('/'));

输出:

bool(false)

在我们的一台服务器上,CentOS 版本 5.7(最终版),PHP 5.3.8,相同的代码产生:

bool(true)

如果没有 t() 函数,is_callable 会按预期执行。请注意,在这些测试中,is_function 的行为与 is_callable 相同。

有人知道是什么原因造成的吗?

编辑:

它似乎只在存在名为 t 的函数时发生,其他任何东西,如 bc 等,并且输出为正如预期的那样。

编辑 - 测试更多字符:

<?php
function t() { }
foreach(str_split('/abcdefghijkmnopqrstuvwxyz023456789ABCDEFGHIJKLMNOPQRSTUVXYZ!@#$%^&*()-_+=`~;:[]{}\\|\'"?.>,<') as $character) {
if (is_callable($character)) var_dump($character, is_callable($character));
}

在服务器上输出以下内容:

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)

在我们的环境中,输出符合预期:

string(1) "t"
bool(true)
string(1) "T"
bool(true)

编辑 - 有关 cbuckley 评论的更多信息:

<?php 
ini_set('display_errors', 1);
error_reporting(E_ALL);
function t() { }
$v = '/'; $v();

产生输出:Call to undefined function/()

最佳答案

作为一种解决方法,你可以试试这个:

$name = '/';
$actual = null;
if (is_callable($name, false, $actual) && $name === $actual) {
// Method is actually callable
}

关于php - is_callable 在 '/' 上的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9526329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com