これでPHPでのcURL関数の使い方が理解できる

cURLはAPIだけではなく、さまざまな用途に使用できる汎用性の高いPHPのライブラリです。cURLを理解できれば、PHPのプログラムからクラウドサービスのデータにもAPIを通して簡単にアクセスできます。ぜひこの機会にcURLをマスターしてください。

目次
最もシンプルなcURLの使用方法
cURLを使用したリクエストは4つのステップで構成されています。非常にシンプルなので、まずはこの流れだけはしっかりと覚えてください。
- curlセッションを初期化する
- curlのオプションを設定する
- curlを実行する
- curlセッションを終了する
PHPで書かれた実際のプログラムコードを見ながら、上記の流れを確認してみましょう。
<?php
/* curlセッションを初期化する */
$ch = curl_init();
/* curlオプションを設定する */
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/");
/* curlを実行する */
curl_exec($ch);
/* curlセッションを終了する */
curl_close($ch);
curlオプションで、アクセスするURLをhttp://www.google.co.jpに設定しています。上記の内容を記載したphpファイルを作成して、そのファイルにブラウザからアクセスするとブラウザ上には、googleのトップページが表示されます。

これが最も簡単なcurlの使用方法です。curlオプションにアクセスするサーバのURLを指定するだけで、サーバからデータを取得することができました。
サーバから取得した内容を保存する
先ほどは、curl_execを実行するとgoogle.comのトップページの内容がブラウザに表示されました。curlオプションにCURLOPT_RETURNTRANSFERを設定するとサーバから取得した情報を保存することができます。
<?php
/* curlセッションを初期化する */
$ch = curl_init();
/* curlオプションを設定する */
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
/* curlを実行し、その内容を$result変数に保存 */
$result = curl_exec($ch);
/* curlセッションを終了する */
curl_close($ch);
/* result変数に保存した内容を表示 */
echo htmlspecialchars($result);
上記では、サーバから取得して保存した内容を文字列として表示させるためにecho, htmlspecailchars関数を利用しています。もしhtmlspecailchars関数を使用しない場合は、先ほどと同じように画面には、googleのページが表示されます。

curlオプションの設定方法
curl_setopt_array関数を使用するとcurl_setoptで複数行にわかれていたオプション設定行を1つの関数にまとめることができます。
【curl_setoptを使用する場合】
/* curlオプションを設定する */
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
【curl_setopt_arrayを使用する場合(1)】
/* curlオプションを設定する */
curl_setopt_array($ch,
[
CURLOPT_URL => "http://www.google.com/",
CURLOPT_RETURNTRANSFER => true
]
);
【curl_setopt_arrayを使用する場合(2)】
オプションの部分のみ別の変数を準備して記述します。
/* curlオプションを設定する */
$options = [
CURLOPT_URL => "http://www.google.com/",
CURLOPT_RETURNTRANSFER => true
];
curl_setopt_array($ch, $options);
セッション内の転送データに関する情報を取得する
curl_getinfo関数を使用するとHTTPステータスコードなどの転送データに関わる情報を取得することができます。
/* curlのセッション情報 */
$info = curl_getinfo($ch);
curl_getinfoの実行結果を見ると、HTTPステータスコードなどの確認を行うことができます。
array:23 [▼
"url" => "http://www.google.com/"
"content_type" => "text/html; charset=ISO-8859-1"
"http_code" => 200
"header_size" => 736
"request_size" => 53
"filetime" => -1
"ssl_verify_result" => 0
"redirect_count" => 0
"total_time" => 0.156259
"namelookup_time" => 3.3E-5
"connect_time" => 0.019748
"pretransfer_time" => 0.01975
"size_upload" => 0.0
"size_download" => 48669.0
"speed_download" => 311463.0
"speed_upload" => 0.0
"download_content_length" => -1.0
"upload_content_length" => 0.0
"starttransfer_time" => 0.110592
"redirect_time" => 0.0
"redirect_url" => ""
"primary_ip" => "2404:6800:4004:80b::2004"
"certinfo" => []
]
HTTPステータスコードなど個別の値を取得することも可能です。その場合は、>CURLINFO_HTTP_CODEオプションを指定して使用します。
curlのエラーを確認する方法
curlを実行した際に発生したエラーを確認するためにerror関数とerrno関数があります。
/* エラー番号を取得 */
curl_errno($ch);
/* エラーを取得 */
curl_error($ch)
実際に存在しないURL(amazon.co.j)にアクセスした場合、errnoは”6″が表示されます。errnoについては、正常に動作した場合は、0になります。errnoの番号の意味については、こちらから確認できます。”6″は、”CURLE_COULDNT_RESOLVE_HOST”という意味を表しています。
errnoが0の場合は、正常に動作しているので、エラーは出力されません。そのため、errnoが”0″以外になった場合のみエラーの情報を出力するようにプログラムを記述します。
if (curl_errno($ch)) {
$error = curl_error($ch);
echo $error;
}
URLの間違いがあるので、エラーの内容は”Couldn’t resolve host ‘www.amazon.co.j'”と表示されます。
【エラー発生のために実行した内容】
/* curlセッションを初期化する */
$ch = curl_init();
/* curlオプションを設定する */
curl_setopt_array($ch,[
CURLOPT_URL => "https://www.amazon.co.j/",
CURLOPT_RETURNTRANSFER => true
]
);
/* curlを実行し、その内容を$result変数に保存 */
$result = curl_exec($ch);
if (curl_errno($ch)) {
$error = curl_error($ch);
echo $error;
}
/* curlセッションを終了する */
curl_close($ch);
【補足】なぜ変数$chという名前を使用しているのか
curlの場合、セッションを保存する変数に$chを使用している場合が多いですが、名前は任意でつけることが可能です。コンピューターの場合は、英語の用語の意味が分かれば、その機能の理解も深まる場合があるので、なぜchを使用しているのか調べてみました。
curl_initを実行すると新規セッションを初期化し、cURL ハンドル(handle)を戻すという動きをします。そのため、その2つの単語の頭文字を取ってchを使用しているようです。
まとめ
cURLを使ったサーバからのデータの取得方法とエラーの処理について説明を行いました。基礎的な内容しか説明していませんが、この基礎が理解できていれば、クラウドサービスのAPIへのアクセスも簡単に行うことができます。ぜひ、本書で理解したcURLの知識をつかっていろいろサービスにアクセスしてみてください。