注: 画像のプレビューを作成するときに、リモート ファイルが (同じサーバー上にない) 存在するかどうかを確認するという問題が発生しました。
リモート画像が存在するかどうかを判断するための複数の方法の例。
-
-
//方法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);
- // Not取得 Return data
- curl_setopt($curl, CURLOPT_NOBODY, true);
- //リクエストを送信
- $result =curl_exec($curl);
- $found = false;
- //リクエストが送信されない場合、リクエストは失敗します
- if ( $result !== false) {
- // http レスポンス コードが 200 であるかどうかを再度確認します
- }
-
コードをコピー
コードの説明:
方法 1 は、画像が存在するかどうかに関係なく、FALSE を返します。
方法 2 は、Windows では、画像が存在するかどうかに関係なく、TRUE を返します。
方法 3 が最も適しています。
さらに: get_headers() メソッドには効率の問題があるため、この解決策は使用しないことをお勧めします。
fsockopen バージョン:
-
- $url = "http://www.baidu.com/img/baidu_sylogo1.gif";
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;
- }else {
- Break;
- }
- }
- 例えば、応答 302、301、404 などはすべてファイルが存在しないことを意味し、200、304 などの場合はファイルが存在するとみなします。
1. fopen() メソッド:
-
-
-
-
$url = 'http://www.test.com/images/test.jpg'; fopen( $url, 'r' ) ) { echo 'ファイルが終了'; } else {- echo 'ファイルが終了しない';
- }
- ?>
-
-
-
- Copyコード
-
-
- 2、CURL メソッド:
-
-
-
-
$url2 = 'http://www.test.com/test.jpg'; ); $timeout = 10; curl_setopt($ch,CURLOPT_URL,$url2);curl_setopt($ch,CURLOPT_HEADER,1); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT, $timeout); $contents =curl_exec($ch);
- //echo $contents;
- if (preg_match("/404/", $contents)){
- echo 'file存在しません';
- }
- ?>
-
-
-
- コードをコピー
-
-
- リモートイメージが存在するかどうかを判断するために上記で紹介した方法と例は、私が最近見た中で最も実用的で実用的なものです。リモート ファイルを検出するための最も包括的な例なので、Programmer's Home の友人全員にお勧めします。
-
-
-
-
|