2013-02-11 26 views
5

これはNOのヒープ全体を吐き出しますが、画像はそこにあり、正しいパスは<img>で表示されます。PHPでリモートイメージファイルが存在するかどうかをテストするにはどうすればよいですか?

foreach ($imageNames as $imageName) 
{ 
    $image = 'http://path/' . $imageName . '.jpg'; 
    if (file_exists($image)) { 
     echo 'YES'; 
    } else { 
     echo 'NO'; 
    } 
    echo '<img src="' . $image . '">'; 
} 
+2

イメージファイルのURLとサーバーのファイルシステム上の同じイメージファイルへのパスは、** 2つの異なる文字列**です。 –

+0

わかりました。私はfile_existsでリモートパスを使用して他の投稿をスキミングして誤解していた。 – TijuanaKez

答えて

13

file_existsはローカルパスではなくURLを使用しています。

$url=getimagesize(your_url); 

if(!is_array($url)) 
{ 
    // The image doesn't exist 
} 
else 
{ 
    // The image exists 
} 

informationより多くのためにこれを参照してください。

ソリューションはこれだろう。

また、(get_headers関数を使用して)応答ヘッダーを検索する方がよいでしょう。応答が404である場合にだけチェック:

if(@get_headers($your_url)[0] == 'HTTP/1.1 404 Not Found') 
{ 
    // The image doesn't exist 
} 
else 
{ 
    // The image exists 
} 
+3

これは非常に高価です。情報が取得される前に、イメージ全体がダウンロードされます。あなたはあなたの要求のヘッダーを見ている方が良いでしょう。 get_headers()を見てください。 http://php.net/manual/en/function.get-headers.php –

+0

@GeneKellyありがとうございました!更新しました。 –

+0

これは素晴らしい答えです(ヘッダー付き)。しかし、常に同じヘッダを別のサーバに返すのでしょうか?これについて私の知らないことは申し訳ありません。 – itsols

13

file_existsローカルパスではなく、 "のhttp://" を探しURL

使用:

$file = 'http://www.domain.com/somefile.jpg'; 
$file_headers = @get_headers($file); 
if($file_headers[0] == 'HTTP/1.1 404 Not Found') { 
    $exists = false; 
} 
else { 
    $exists = true; 
} 
+0

@Phil URLで試してみましたか? falseを返します:http://codepad.viper-7.com/56dDzt – Mike

+0

サーバーが返す場合:HTTP/1.1 403? – realization

+0

これが403の場合、イメージはまだアクセスできませんが、存在します。 –

2
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_NOBODY, true); 
curl_exec($ch); 
$retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
curl_close($ch); 
if($retcode==200) echo 'YES'; 
else    echo 'NO'; 
+1

あなたのコードを少し説明してください – andy

0
function remote_file_exists($file){ 

$url=getimagesize($file); 

if(is_array($url)) 
{ 

return true; 

} 
else { 

return false; 

} 

$file='http://www.site.com/pic.jpg'; 

echo remote_file_exists($file); // return true if found and if not found it will return false 
1

これは私がやったことです。ファイルにアクセスできない場合は、必ずしも "404 Not Found"と表示されるわけではないため、ヘッダーを取得することでより多くの結果が得られます。 「Moved Permanently」、「Forbidden」などのメッセージが表示されることがあります。ただし、ファイルが存在し、アクセス可能な場合は「200 OK」です。 HTTPを持つ部分は、1.1、または1.0の後に置くことができます。これは、すべての状況でより信頼性の高いstrposを使用した理由です。

$file_headers = @get_headers('http://example.com/image.jpg'); 

$is_the_file_accessable = true; 

if(strpos($file_headers[0], ' 200 OK') !== false){ 
    $is_the_file_accessable = false; 
} 

if($is_the_file_accessable){ 
    // THE IMAGE CAN BE ACCESSED. 
} 
else 
{ 
    // THE IMAGE CANNOT BE ACCESSED. 
} 
関連する問題