2012-05-04 25 views
8

file_exists()は、提供する画像がhttps://www.google.pl/logos/2012/haring-12-hp.pngの場合でもfalseを返します。どうして?私は、ローカルホスト上で発射する準備ができて、完全な失敗のPHPコードを提示していますfile_exists()はファイルが存在してもfalseを返します。(リモートURL)

下:PHP 5.0.0のよう

$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"; 
} 
+5

だから、あなたはGoogleを持っていますか? 'ファイルまたはディレクトリが存在するかどうかを確認します.'ローカルのみ。 – Blake

答えて

29
$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"; 
} 
+0

何か画像の代わりに(存在しない)リンクが404のカスタムエラーページに行くなら? –

+0

ねえ、コードの新しい変更を見てください。カスタム404ページに着いたかどうかを確認します。 –

+0

うまくリンクして、404ページの 'http://services.runescape.com/m=itemdb_rs/3716_obj_sprite.gif?id = 1'にリンクできません。 –

5

、この関数は、何らかのURLラッパーと組合せて使用することができます。どのラッパーがstat()ファミリの機能をサポートしているかは、サポートされているプロトコルとラッパーを参照してください。 Supported Protocols and Wrappershttp(s) pageから

Supports stat() No 
+0

URL:http://services.runescape.com/m=itemdb_rs/3716_obj_sprite.gif?id = 2'はどうですか? –

+0

URLが何であるかは関係ありません。 'http'と' https'は 'stat()'をサポートしていません。 – Amber

+0

ご協力いただきありがとうございます。 –

-1

何が必要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;} 
    } 
?> 
+2

その例はかなり悪いです。 'HEAD'リクエストを作成するには、単にcURLを使う方がいいでしょう。 – Amber

5

あれば、より良い文の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 
} 
0
$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"; 

    } 
+0

'https:// www.google.pl/logos/2012/haring-12-hp.png'でそれをやっていますか? –

0
を見ていないこと
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; 

} 
関連する問題