ホームページ  >  記事  >  バックエンド開発  >  リモートファイルが存在するかどうかを判断するためにcurlを使用するPHPコード

リモートファイルが存在するかどうかを判断するためにcurlを使用するPHPコード

WBOY
WBOYオリジナル
2016-07-25 09:03:36998ブラウズ
  1. //リモートファイルを決定する

  2. function check_remote_file_exists($url)
  3. {
  4. $curl =curl_init($url);
  5. //データを取得しない
  6. curl_setopt($ curl, CURLOPT_NOBODY, true);
  7. //リクエストを送信
  8. $result =curl_exec($curl);
  9. $found = false;
  10. //リクエストが送信されない場合、リクエストは失敗します
  11. if ($result !== false) {
  12. // http レスポンス コードが 200 かどうかを再度確認します
  13. $statusCode =curl_getinfo($curl, CURLINFO_HTTP_CODE);
  14. if ($statusCode == 200) {
  15. $found = true;
  16. }
  17. }
  18. curl_close($curl );
  19. return $found;

  20. }
  21. ?>

コードをコピー

私は現在、HTML5 音楽再生用の Web サイトを作成しています。 iPhone と iPad を改善したいと思っています。フロントエンドは jquery のプラグインである jplayer を使用しています。変更後の効果はかなり優れています。 バックグラウンドでは PHP を使用して Baidu の MP3 を定期的に収集します。 サーバーのスペースが狭いことを考慮すると、もちろん MP3 アドレスしか収集できず、ファイルはローカルにダウンロードされません。 Baidu MP3 パスが頻繁に変更されることを考えると、非常に面倒なので、MP3 パスがまだ正しいかどうかを定期的に判断する必要があるため、リモート ファイルが存在するかどうかを判断する PHP に関するソフト記事があります。 get_headers() メソッドを使い始めましたが、効率に問題があると後で聞いたので、この解決策は使用しませんでした。ところで、get_headers 関数の効果を見てみましょう。

  1. //デフォルト効果
  2. print_r(get_headers("http://www.baidu.com/img/baidu_sylogo1.gif"));
コードをコピー

結果: 配列 ( [0] => HTTP/1.1 200 OK [1] => 日付: 2011 年 6 月 2 日木 02:47:27 GMT [2] => サーバー: Apache [3] => P3P: CP=" OTI DSP COR IVA OUR IND COM " [4] => Cookie を設定: BAIDUID=7F6A5A2ED03878A7791C89C526966F3A:FG=1; 有効期限=金曜日、01-6月-12 02:47:27 GMT; ドメイン=.baidu.com;バージョン=1 [5] => 最終更新日: 木, 20 1月 2011 07:15:35 GMT [6] => Eタグ: "65e-49a41e65933c0" [7] => 受け入れ範囲: バイト [8] => コンテンツの長さ: 1630 [9] => キャッシュ制御: max-age=315360000 [10] => 有効期限: 2021 年 5 月 30 日 (日) 02:47:27 GMT [11] => 接続: 閉じる [12] => コンテンツタイプ: 画像/gif )

  1. //パラメータ 1 を追加した効果
  2. print_r(get_headers("http://www.baidu.com/img/baidu_sylogo1.gif", 1));
コードをコピー

結果: 配列 ( [0] => HTTP/1.1 200 OK [日付] => 木, 02 6月 2011 02:49:28 GMT [サーバー] => Apache [P3P] => CP=" OTI DSP COR IVA 当社のインドコム " [Set-Cookie] => BAIDUID=4D875812FC482C0ADE4F5C17068849EE:FG=1; 有効期限=金曜日、01-6月-12 02:49:28 GMT; ドメイン=/.baidu.com 1 [Last-Modified] => 木, 20 1月 2011 07:15:35 GMT [ETag] => "65e-49a41e65933c0" [Accept-Ranges] => バイト [コンテンツの長さ] => 1630 [キャッシュ制御] => max-age=315360000 [有効期限] => 2021年5月30日(日) 02:49:28 GMT [接続] => 閉じる [コンテンツタイプ] => 画像/gif )

どうですか? get_headers 関数は非常に優れていますが、効率に問題があるため、Curl がどのように機能するかを見てみましょう。

  1. function check_remote_file_exists($url)
  2. {
  3. $curl =curl_init($url);
  4. //データを取得しません
  5. curl_setopt($curl, CURLOPT_NOBODY, true);
  6. curl_setopt( $curl, CURLOPT_CUSTOMREQUEST, 'GET'); //これを追加しないと403が返されます。追加すると正しい200が返されます
  7. //リクエストを送信します
  8. $result = curl_exec($curl);
  9. $found = false;
  10. // リクエストの送信に失敗した場合
  11. if ($result !== false)
  12. {
  13. // http レスポンスコードが 200 かどうかを再度確認します
  14. $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
  15. if ($statusCode == 200)
  16. {
  17. $found = true;
  18. }
  19. }
  20. curl_close($curl);
  21. return $found;
  22. }
  23. $exists = check_remote_file_exists(' http://www.baidu.com/img/baidu_sylogo1.gif ');
  24. echo $exists ? '存在します' : '存在しません';
  25. $exists = check_remote_file_exists('http://www.baidu.com/ test.jpg');
  26. echo $exists ? '存在します' : ' 存在しません
  27. ?>
コードをコピーします


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。