file_exists() возвращает false, даже если файл существует (удаленный URL)
My file_exists()
возвращает false, даже если предоставлено изображение для проверки https://www.google.pl/logos/2012/haring-12-hp.png
. Зачем?
Ниже я представляю полный неудачный PHP-код, готовый к запуску на localhost:
$filename = 'https://www.google.pl/logos/2012/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";
}
Ответы
Ответ 1
$filename= 'https://www.google.pl/logos/2012/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";
}
Ответ 2
Начиная с PHP 5.0.0, эта функция также может использоваться с некоторыми обертками URL. Обратитесь к поддерживаемым протоколам и упаковщикам, чтобы определить, какие обертки поддерживают семейство функций stat().
На странице http (s) на поддерживаемых протоколах и обертках:
Supports stat() No
Ответ 3
Лучше, если утверждение, которое не смотрит на 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
}
Ответ 4
$filename = "http://im.rediff.com/money/2011/jan/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";
}
Ответ 5
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;
}
Ответ 6
Вам нужно что-то вроде 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;}
}
?>