画像のプレビューを作成しているときに、リモート ファイルが (同じサーバー上にない) 存在するかどうかを確認するという問題が発生しました。
コードは次のとおりです:
コードをコピーします コードは次のとおりです:
//方法 1
function file_exists($url)
{
$ch =curl_init();
curl_setopt($ ch,curlopt_url,$url) ;
curl_setopt($ch,curlopt_nobody, 1); // ダウンロードしないでください
curl_setopt($ch,curlopt_failonerror, 1);
curl_setopt($ch,curlopt_returntransfer, 1);
if( curl_exec($ch)!== false)
return true;
else
return false;
}
//方法 2
function file_exists2($url)
{
if(file_get_contents($url,0,null,0) ,1))
return 1;
else
return 0;
}
//メソッド 3
function file_exists($url) {
$curl =curl_init($url);
//データを取得しません
curl_setopt($ curl, CURLOPT_NOBODY, true);
//リクエストを送信します
$result =curl_exec($curl);
$found = false;
//リクエストが送信されずに失敗した場合
if ($result !== false) {
//http レスポンス コードが 200 かどうかを再度確認します
}
方法 1 は、画像が存在するかどうかに関係なく、FALSE を返します。
方法 2 は、Windows では実行可能であり、LINUX では、画像が存在するかどうかに関係なく、TRUE を返します。
方法 3 が最も適切です。 get_headers() メソッドの効率の問題のため、この解決策としては推奨されません
fsockopen バージョン:
コードをコピーします コードは次のとおりです:
$url = "http://www.baidu.com/img/baidu_sylogo1.gif";
$info = parse_url($url);
$fp = fsockopen($info['host'], 80,$errno, $errstr, 30);
fputs($fp,"GET {$info['path']} HTTP/1.1rn");
fputs($fp , "ホスト: {$info['host']}rn");
fputs($fp, "接続: より近いnrn");
$headers = array();
while(!feof($fp )) {
$line = fgets($fp);
if($line != "rn") {
$headers[] = $line;
Break;
}
}
echo "
" ;
print_r($headers);
httpステータスコードを使用してファイルが存在するかどうかを判断します。たとえば、応答302、301、404などはすべてファイルが存在しないことを意味します。200、304などの場合は、ファイルが存在しないと見なされます。ファイルが存在しています。
fopen() メソッド:
コードをコピーします コードは次のとおりです:
$url = 'http://www.test.com/images/test.jpg';
if( @fopen ($ url, 'r'))
{
echo 'file exits';
コードをコピーします
コードは次のとおりです:
$url2 = 'http: //www.test.com/test.jpg';
$ch =curl_init();