PHP/cURL(Client URL Library)/エラー処理
cURLのエラー処理
cURLでは、エラーコード取得用メソッドとエラー文字列取得用メソッドの2つが用意されている。
エラー詳細情報取得用メソッド
書式
直近のcURL処理に関するエラー番号を取得するためのメソッド。
エラーが発生しなかった場合は「0」。
エラーコード(CURLcode)取得用メソッド
書式
直近のcURL操作に関するエラー文字列を取得するためのメソッド。
cURLエラーコード(CURLcode)
-cURLエラーコード(CURLcode)一覧
–http://curl.haxx.se/libcurl/c/libcurl-errors.html
例
パターン1
$ch = curl_init("http://www.example.comcomcom/");
curl_exec($ch);
if(curl_errno($ch)){
print curl_errno($ch);
print "<br>";
print curl_error($ch);
}
curl_close($ch);
?>
結果
Could not resolve host: www.example.comcomcom;
No data record of requested type
パターン2
$ch = curl_init("http://www.example.comcomcom/");
if(curl_exec($ch) === false){
print curl_errno($ch);
print "<br>";
print curl_error($ch);
}
curl_close($ch);
?>
結果
Could not resolve host: www.example.comcomcom;
No data record of requested type
PHP/cURL(Client URL Library)/ファーストインプレッション
ファーストインプレッション
概要
cURLとの最初のであい。
環境
-[[XAMPP]]
トライアンドエラーの記録
公式ドキュメントのサンプルコードをコピーして実行。
http://jp2.php.net/manual/ja/curl.examples-basic.php
example.comではなくて、yahoo.co.jpにアクセスするように修正。
コード
$ch = curl_init("http://www.yahoo.co.jp/");
$fp = fopen("example_homepage.txt", "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
?>
いまのところ、オプションの意味とかまったくわからん。
実行
http://localhost/curl/test.php
C:\xampp\htdocs\curl\test.php on line 3
エラーでた。たぶんPHP4なんだな
xampp/php-switch.batを実行
The verwendete Version in XAMPP ist => PHP 5 <=
Type number or ‘x’ (exit) for selecting your choice!
Gebe nun Nummer oder ‘x’ (exit) zum auswaehlen ein!
4) Switching to PHP 4 (zu PHP 4 wechseln)
x) Exit (Beenden)
ちがった。なぜだ。
組み込みじゃないのか。
xampp/php/php.iniの582行目
↓
よし、XAMPP再起動
http://localhost/curl/test.php
エラー
C:\xampp\htdocs\curl\test.php on line 3
ちくしょー
もしかしてphp5.iniつかってる?
xampp/php/php5.iniの582行目
↓
よし、XAMPP再起動
http://localhost/curl/test.php
エラー…なんというデジャブ
C:\xampp\htdocs\curl\test.php on line 3
一応phpinfo();で確認。
あうあう
xampp/apache/bin/php.iniの582行目
↓
XAMPP再起動。よしこい!
http://localhost/curl/test.php
できたー!

まとめ
無知と思い込みは怖い。
PHP/cURL(Client URL Library)/リクエストのPOST送信
コードの組み立て
初期化、URLの指定、後処理
[[PHP/cURL(Client URL Library)/基本的なこと]]を参照
リクエストをPOSTに指定
CURLOPT_POSTにtrueを指定することで、リクエストをPOSTで送信します。(POST は、 application/x-www-form-urlencoded形式で実行される)
POSTリクエストで送信するデータを指定する
送信データの指定方法は2種類あります。
1.連想配列でデータを指定
$data{"username"} = "root";
$data{"password"} = "rootpass";
curl_setopt ($ch,CURLOPT_POSTFIELDS, $data);
2.URLエンコード形式(GET利用時の形式)でデータを指定
curl_setopt ($ch,CURLOPT_POSTFIELDS, $data);
ファイルを指定する場合は、@+{ファイルのフルパス}という形式で指定する。
サンプルコード
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<head>
<meta http-equiv="content-type" content="text/html; charset=euc-jp">
<title>curl</title>
</head>
<body>
<?php
$ch = curl_init();
curl_setopt ($ch,CURLOPT_URL,"http://example.com/postrequesturl/");
curl_setopt ($ch, CURLOPT_POST, true);
//postするデータ
$data = array();
$data{"username"} = "root";
$data{"password"} = "rootpass";
curl_setopt ($ch,CURLOPT_POSTFIELDS, $data);
curl_exec($ch);
var_dump($ch);
curl_close ($ch);
?>
</body>
</html>

