タグ

PHPとcurlに関するlax34のブックマーク (2)

  • APIなどにfile_get_contents()を使うのはオススメしない理由と代替案

    file_get_contents() はファイルパスを指定してデータを取得するだけではなく URLを指定すればそのURLの情報を手軽にとれる関数ですが 対API等に使うと色々とハマるポイントが多いので、それを簡単に解説したものです。 ※このページ向け に書いていたものですが、コード量が多いので分割しました。 問題点 file_get_contents() は ヘッダ情報の保持ルールやタイムアウト処理に癖があるため 返却されるステータスコードや、タイムアウト時に再リクエストなどを行うような 対APIの処理では、それらを知らないと想定していない事態に陥る。 コード例と解説 以下の要件でfunctionを書くとします。 jsonが返ってくるAPIにアクセスして、jsonをarray化する。 タイムアウトは3秒とし、そうなった場合は空の配列が返ってくる。 ステータスコードが200以外で返ってきた

    APIなどにfile_get_contents()を使うのはオススメしない理由と代替案
  • curl_multiでHTTP並行リクエストを行うサンプル

    curl_multiはselectシステムコールを使って同時に複数のHTTPリクエストを行うことができます。マルチスレッドやらマルチプロセスを使っているわけではなく、原理はnode.jsなんかと近いI/O多重化で、一度に一つのことしかしていません。 PHPcurlはlibcurlAPIをほぼ踏襲しており、ちょっと取っつきにくいです。クラスでラッピングして、curl_close()などはデストラクタで呼ばれるように自動化すると、もう少しすっきりすると思います。 <?php /** * curl_multiでHTTP複数リクエストを並列実行するテンプレ * */ //タイムアウト時間を決めておく $TIMEOUT = 10; //10秒 /* * 1) 準備 * - curl_multiハンドラを用意 * - 各リクエストに対応するcurlハンドラを用意 * リクエスト分だけ必要 * *

    curl_multiでHTTP並行リクエストを行うサンプル
  • 1