検討!目論見検討委員会

最近はコミケの締切情報メイン

phpからcurlを使ってみた

httpでアクセス可能なところにとあるファイルがあって、単にそれらのファイルサイズだけ取得したかっただけなのに…(フラグではありますん
ふつー(PDOとか)のphpの関数の使い方とはちょっと違ったのでメモ。
curlとは、httpにアクセスできていろいろできるよ!やったね!ライブラリ(超ざっくり

私の環境で使えるか?

$ php -i | grep curl

すればphpに組み込まれているか分かる。phpinfo()でもcURLの項目があればOK
もしなくて、windowsのxamppだったら、c:\xampp\apache\bin\php.iniとかを探せばcurlのdllが書いてあるので、コメントを外してapache再起動

使い方[概要篇]

$ch = curl_init(); // cURL使うよー
curl_setopt($ch, 値, TRUEかFALSE) // 設定をごにょる
curl_exec($ch); // ここで実行
curl_close($ch); // 俗に言うおまじない

使い方[基本編]

www.google.co.jpにアクセスして、その中身を表示。

$ch = curl_init(); // 起
curl_setopt($ch, CURLOPT_URL, "http://www.google.co.jp"); // 承
curl_exec($ch); // 転
curl_close($ch); // 結

実行してみて初めて分かるが、echoもしてないのにgoogle.co.jpのソースがだらーっと表示される。何これキモイ。いや、キモくもないけどさー。

使い方[URLの取得結果を変数に突っ込む篇]

$ch = curl_init(); // init
curl_setopt($ch, CURLOPT_URL, "http://www.google.co.jp"); // URLをセット
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // curl_exec()の結果を文字列で返す
curl_setopt($ch, CURLOPT_HEADER, true); // ヘッダも出力したい場合
$c = curl_exec($ch); // 実行
curl_close($ch); // おまじない

$cに文字列で結果が入っているので、あとは自由に料理すればよい。

使い方[ファイルサイズ取得篇]

GETしてるとネットワーク的も実行時間的にもアレなのでHEADリクエストにする。

$ch = curl_init("http://www.google.co.jp"); // 実はここでもURLをセットできる
curl_setopt($ch, CURLOPT_NOBODY, TRUE); // HEADリクエストにする
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // curl_exec()の結果を文字列で返す = 標準出力になにも返さない
$c = curl_exec($ch); // 実行
echo curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD); // 対象URLのコンテンツのバイト数
curl_close($ch); // おまじない

curl_getinfoで、CURLINFO_CONTENT_LENGTH_DOWNLOADを指定してやるとContent-Length:の値を返してくる。当初の目的は達成された。

マニュアル

PHP: cURL - Manual