2011-03-19 1 views
2

는 :PHP file_exists()는 URL 재 작성이 활성화되었을 때 파일 존재를 검사 할 수 없습니까? 젠드 FW에서

file_exists('xx/xxx/xxxx.jpg');

1을 반환하지만, XX/XXX/xxxx.jpg는 파일이나 디렉토리되지 않습니다.

Zend FW에서 반환 한 오류 페이지입니다. 파일 또는 유효한 URL이 아니기 때문에

어떻게 파일 존재 여부를 확인할 수 있습니까?

+2

그 기능은 PHP의 기본 기능입니다. Zend Framework없이 PHP 스크립트로 실행하여 어떤 일이 일어나는지보십시오. 또한 시작/시작은 서버 URL의 상단이 아닌 OS 파일 시스템의 맨 위에서로드된다는 것을 의미합니다. –

+0

또한 file_exists()가 캐시되므로 파일이 존재하는지 테스트 한 다음 제거하고 다시 테스트하면 두 번째 테스트는 여전히 true를 반환합니다. –

+0

clearstatcache()를 사용하여 캐시를 지울 수 있습니다. http://www.php.net/manual/en/function.clearstatcache.php – Brad

답변

2

file_exists은 파일 또는 디렉토리가 있는지 확인합니다. 사용해보기 is_file

+0

is_file 작동을 왜합니까? 그런 파일이나 디렉토리가 내 파일 시스템에 없지만 file_exists는 1을 반환하고 is_file은 0을 반환합니다 –

+0

이상합니다. 어쩌면 이전에 파일이나 디렉토리가 있었고 file_exists에 의해 캐쉬되었습니다. – Codler

+0

아니요 파일이 없습니다. 그곳에 –

0

HTTP를 통해 존재를 확인하려면 HTTP 응답 코드를 확인해야합니다. IMO를하는 가장 쉬운 방법은 말풍선을 사용하는 것입니다. 시도해보십시오.

$url = 'http://google.com/this_does_not_exist.jpg'; 
$ch=curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_NOBODY, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,10);//timeout 
$res = curl_exec($ch); 
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

switch ($code % 100){ 
    case 2: echo "exists\n"; break; 
    case 3: echo "too many redirects\n"; break; 
    case 4: echo "does not exist\n"; break; 
    case 5: echo "5xx error - may or may not exist once server fixed\n"; break; 
    default: 
      echo "Something weird. HTTP response code = $code\n"; 
} 
관련 문제