1

我认为 filter_var 在我的不同服务器上的工作方式不同,这是我正在运行的代码:

$url = "http://www.my-domain.com";
$urlOriginal  = "http://www.my-domain.com";
$url = filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED | FILTER_FLAG_HOST_REQUIRED);
echo $url;
echo "<br/>Php version: " .  phpversion();


echo "<br/><h1>";
if ($url == $urlOriginal){
    echo "it worked because $url == $urlOriginal";
} else {
    echo "it didn't work, because $url != $urlOriginal";
}
echo "</h1>";

一台服务器上的输出是

http://www.my-domain.com
Php version: 5.2.13
it worked because http://www.my-domain.com == http://www.my-domain.com

另一方面是

Php version: 5.2.13
it didn't work, because != http://www.my-domain.com

由于他们都使用相同版本的 PHP,我认为这可能与配置方式有关,知道那是什么吗?

我还发现这可能是相关的: https ://bugs.php.net/bug.php?id=51305&edit=1

4

1 回答 1

1

对于包含连字符的域,PHP 5.2.13 中有一个错误1。PHP 5.3.2 出现了相同的错误,因为它们同时被破坏/修复。PHP 5.2.14 和 5.3.3 及以后的版本可以正常工作,5.2.12/5.3.1 及以下版本也可以解决这个特定的错误。

至于为什么一台服务器工作而另一台服务器不工作,不同的操作系统提供不同的 PHP 安装,并应用(或不应用)各种补丁,这使得它们通常与从源代码安装 PHP 不同。代码工作的服务器在其 PHP 5.2.13 版本中应用了补丁,而另一台服务器没有。

1 https://bugs.php.net/51192

于 2012-04-24T20:54:47.347 回答