web-dev-qa-db-ja.com

URLからファイルが存在するかどうかを確認する方法

特定のファイルがリモートサーバーに存在するかどうかを確認する必要があります。 is_file()およびfile_exists()を使用しても機能しません。これをすばやく簡単に行う方法はありますか?

41
David

CURLを使用する必要があります

function does_url_exists($url) {
    $ch = curl_init($url);
    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;
}
74
Amila

そのためにCURLは必要ありません...ファイルが存在するかどうかを確認するだけのオーバーヘッドが大きすぎます...

PHPのget_header を使用します。

$headers=get_headers($url);

次に、$ result [0]に200 OKが含まれているかどうかを確認します(ファイルが存在することを意味します)

URLが機能するかどうかを確認する関数は次のとおりです。

function UR_exists($url){
   $headers=get_headers($url);
   return stripos($headers[0],"200 OK")?true:false;
}

/* You can test a URL like this (sample) */
if(UR_exists("http://www.amazingjokes.com/"))
   echo "This page exists";
else
   echo "This page does not exist";
73
patrick

私はこの解決策を見つけました:

if(@getimagesize($remoteImageURL)){
    //image exists!
}else{
    //image does not exist.
}

ソース: http://www.dreamincode.net/forums/topic/11197-checking-if-file-exists-on-remote-server/

17
Daniel Kossmann

こんにちは2つの異なるサーバー間のテストによると、結果は次のとおりです。

10個の.pngファイル(それぞれ約5 mb)のチェックにcurlを使用した場合、平均5.7秒でした。同じものにヘッダーチェックを使用すると、平均7.8秒かかりました。

そのため、テストでは、大きなファイルをチェックする必要がある場合、curlははるかに高速でした!

カール関数は次のとおりです。

function remote_file_exists($url){
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if( $httpCode == 200 ){return true;}
    return false;
}

これがヘッダーチェックのサンプルです。

function UR_exists($url){
   $headers=get_headers($url);
   return stripos($headers[0],"200 OK")?true:false;
}
8
Daniel de coder

Curlでリクエストを行い、404ステータスコードを返すかどうかを確認します。 HEAD requestメソッドを使用してリクエストを実行します。これにより、ボディのないヘッダーのみが返されます。

1
fivedigit

関数file_get_contents()を使用できます。

if(file_get_contents('https://example.com/example.txt')) {
    //File exists
}
1
Tom