我认为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
答案 0 :(得分:1)
对于包含连字符的域,PHP 5.2.13中存在 1 错误。 PHP 5.3.2也存在同样的错误,因为它们同时被破坏/修复。关于这个特殊的bug,PHP 5.2.14和5.3.3以及5.2.12 / 5.3.1及以下版本的工作正常。
至于为什么一台服务器工作而另一台服务器不工作,不同的操作系统提供不同的PHP安装,应用(或不应用)各种补丁,使它们与从源安装PHP通常不同。代码工作的服务器在其PHP 5.2.13版本中应用了补丁,而另一台服务器则没有。