2012-04-23 2 views
1

내가 filter_var 내 다른 서버에 다르게 작동 생각하는 다른 서버에 다르게 작동 내가 실행 해요 코드입니다 :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를 사용하고 있기 때문에 이것은 아마도 관련이 있다고 생각합니다. 어떻게 든 사물이 어떻게 구성되어 있는지, 어떤 생각인지 그게 뭔지?

나는 또한 관련 될 수있는이 발견 : 하이픈을 포함하는 도메인에 대한 PHP 5.2.13의 버그 1가 발생했습니다 https://bugs.php.net/bug.php?id=51305&edit=1

+0

통지 $ URL을 위해서 var_dump ($ URL이) 무엇을 반환하지 예 2에 누락 된? –

+1

@Dagon 왜냐하면'filter_var'는 * malformed * input의 경우'false'를 반환하기 때문에 빈 문자열이고 문자열로 변환 될 때'false'를 반환하기 때문입니다. @ user893730'FILTER_VALIDATE_URL'과 같은 상수는 재정의되지 않습니까? 두 서버 모두 동일한 OS입니까? – kirilloid

+0

그래서 내가 var_dump의 결과를 물었습니다 : _) –

답변

1

. 같은 버그가 PHP 5.3.2에서 발생했습니다. PHP 5.3.2는 동시에 깨 졌거나 수정 되었기 때문에 존재합니다. PHP 5.2.14와 5.3.3 이후는이 특별한 버그와 관련하여 5.2.12/5.3.1과 같이 잘 작동합니다.

하나의 서버가 작동하고 다른 서버가 작동하지 않는 이유에 대해 서로 다른 운영 체제는 다양한 패치가 적용된 (또는 설치되지 않은) 다른 PHP 설치를 제공하여 소스에서 PHP를 설치하는 것과 종종 다른 경우가 많습니다. 코드가 작동 한 서버에는 PHP 5.2.13 버전에 적용된 패치가 있지만 다른 서버에는 적용되지 않습니다.

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