本のISBNの画像の動的URLを生成しています。画像が実際にリモートURLに存在するかどうかを確認するには、PHPを使用した信頼できる方法が必要です。さまざまなPHPライブラリ、curlなどでさまざまなアプローチを試しましたが、どれもうまく動作せず、それらのいくつかは非常に遅いです。データベース内の各本について約60個のURLを生成(および確認)する必要があるという事実を考えると、これは非常に長い待ち時間です。手がかりはありますか?
function checkRemoteFile($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
// don't download content
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
if($result !== FALSE)
{
return true;
}
else
{
return false;
}
}
->ホストがcurlをサポートしている場合、これが最速の方法です
このようにgetimagesize()メソッドを使用します
$external_link = ‘http://www.example.com/example.jpg’;
if (@getimagesize($external_link)) {
echo “image exists “;
} else {
echo “image does not exist “;
}
ここには「簡単な」方法はありません。最低限、HEAD
リクエストを生成し、結果のコンテンツタイプをチェックして、それが画像であることを確認する必要があります。リファラーの問題の可能性を考慮していません。カールはここに行く方法です。
curl を使用できます。 curlオプションCURLOPT_NOBODYをtrueに設定するだけです。これは、ボディ情報をスキップし、ヘッドのみを取得します(したがって、httpコードも)。次に、CURLOPT_FAILONERRORを使用して、このプロセス全体をtrue/falseタイプチェックに変換できます。
私はこれを不動産の画像追跡のために行ってきました...
$im = @imagecreatefromjpeg($pathtoimg);
if($im)
imagedestroy($im); // dont save, just ack...
elseif(!$missing[$inum])
$img404arr[] = $inum;
それは実際の画像をダウンロードするよりも速く、「平均」100kの画像からそれぞれ約.3秒かかります。
何もダウンロードせずにヘッダーチェックを行い、200と404のどちらが得られるかを読んでほしいと思います。誰もが便利ですか?
https://www.experts-exchange.com からのソリューション
<?php
function url_exists($url) {
if (!$fp = curl_init($url)) return false;
return true;
}
?>
この時点ではおそらくミュートポイントですが、これは私にとってはうまくいきます:
function is_webfile($webfile)
{
$fp = @fopen($webfile, "r");
if ($fp !== false)
fclose($fp);
return($fp);
}
if(@getimagesize($remoteImageURL)){
//image exists!
}else{
//image does not exist.
}