file_exists () возвращает false, даже если файл существует (удаленный URL)

My file_exists() возвращает false, даже если предоставлено изображение для проверки http://img.ruphp.com/php/haring-12-hp.png . Зачем?

Ниже я представляю полный неудачный PHP-код, готовый к запуску на localhost:

 $filename = 'http://img.ruphp.com/php/haring-12-hp.png'; echo "<img src=" . $filename . " />"; if (file_exists($filename)) { echo "The file $filename exists"; } else { echo "The file $filename does not exist"; } 

Solutions Collecting From Web of "file_exists () возвращает false, даже если файл существует (удаленный URL)"

 $filename= 'http://img.ruphp.com/php/haring-12-hp.png'; $file_headers = @get_headers($filename); if($file_headers[0] == 'HTTP/1.0 404 Not Found'){ echo "The file $filename does not exist"; } else if ($file_headers[0] == 'HTTP/1.0 302 Found' && $file_headers[7] == 'HTTP/1.0 404 Not Found'){ echo "The file $filename does not exist, and I got redirected to a custom 404 page.."; } else { echo "The file $filename exists"; } 

Начиная с PHP 5.0.0, эта функция также может использоваться с некоторыми обертками URL. Обратитесь к поддерживаемым протоколам и упаковщикам, чтобы определить, какие обертки поддерживают семейство функций stat ().

На странице http (s) на поддерживаемых протоколах и обертках :

 Supports stat() No 

Лучше, если утверждение, которое не смотрит на http-версию

 $file_headers = @get_headers($remote_filename); if (stripos($file_headers[0],"404 Not Found") >0 || (stripos($file_headers[0], "302 Found") > 0 && stripos($file_headers[7],"404 Not Found") > 0)) { //throw my exception or do something } 
  $filename = "http://img.ruphp.com/php/19sld3.jpg"; $file_headers = @get_headers($filename); if($file_headers[0] == 'HTTP/1.1 404 Not Found') { //return false; echo "file not found"; }else { //return true; echo "file found"; } 
 function check_file ($file){ if ( !preg_match('/\/\//', $file) ) { if ( file_exists($file) ){ return true; } } else { $ch = curl_init($file); curl_setopt($ch, CURLOPT_NOBODY, true); curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if($code == 200){ $status = true; }else{ $status = false; } curl_close($ch); return $status; } return false; } 

Вам нужно что-то вроде url_exists . См. Комментарии в file_exists : http://php.net/manual/en/function.file-exists.php

Вот один из приведенных примеров:

 <?php function url_exists($url){ $url = str_replace("http://", "", $url); if (strstr($url, "/")) { $url = explode("/", $url, 2); $url[1] = "/".$url[1]; } else { $url = array($url, "/"); } $fh = fsockopen($url[0], 80); if ($fh) { fputs($fh,"GET ".$url[1]." HTTP/1.1\nHost:".$url[0]."\n\n"); if (fread($fh, 22) == "HTTP/1.1 404 Not Found") { return FALSE; } else { return TRUE; } } else { return FALSE;} } ?>