PHP/cURL(Client URL Library)/エラー処理

1月 1, 2003 · Posted in cURL(Client URL Library), PHP · Comment 

cURLのエラー処理

cURLでは、エラーコード取得用メソッドとエラー文字列取得用メソッドの2つが用意されている。

エラー詳細情報取得用メソッド

書式

int curl_errno ( resource $ch )

直近のcURL処理に関するエラー番号を取得するためのメソッド。
エラーが発生しなかった場合は「0」。

エラーコード(CURLcode)取得用メソッド

書式

string curl_error ( resource $ch )

直近のcURL操作に関するエラー文字列を取得するためのメソッド。

cURLエラーコード(CURLcode)

-cURLエラーコード(CURLcode)一覧
http://curl.haxx.se/libcurl/c/libcurl-errors.html

パターン1

<?php
$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);
?>

結果

6
Could not resolve host: www.example.comcomcom;
No data record of requested type

パターン2

<?php
$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);
?>

結果

6
Could not resolve host: www.example.comcomcom;
No data record of requested type

PHP/cURL(Client URL Library)/ファーストインプレッション

1月 1, 2003 · Posted in cURL(Client URL Library), PHP · Comment 

ファーストインプレッション

概要

cURLとの最初のであい。

環境

-[[XAMPP]]

トライアンドエラーの記録

公式ドキュメントのサンプルコードをコピーして実行。
http://jp2.php.net/manual/ja/curl.examples-basic.php
example.comではなくて、yahoo.co.jpにアクセスするように修正。

コード

<?php

$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

Fatal error: Call to undefined function curl_init() in
C:\xampp\htdocs\curl\test.php on line 3

エラーでた。たぶんPHP4なんだな
xampp/php-switch.batを実行

The working version in XAMPP is => PHP 5 <=
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行目

;extension=php_curl.dll
extension=php_curl.dll

よし、XAMPP再起動
http://localhost/curl/test.php

エラー

Fatal error: Call to undefined function curl_init() in
C:\xampp\htdocs\curl\test.php on line 3

ちくしょー

もしかしてphp5.iniつかってる?
xampp/php/php5.iniの582行目

;extension=php_curl.dll
extension=php_curl.dll

よし、XAMPP再起動
http://localhost/curl/test.php

エラー…なんというデジャブ

Fatal error: Call to undefined function curl_init() in
C:\xampp\htdocs\curl\test.php on line 3

一応phpinfo();で確認。

Loaded Configuration File C:\xampp\apache\bin\php.ini

あうあう
xampp/apache/bin/php.iniの582行目

;extension=php_curl.dll
extension=php_curl.dll

XAMPP再起動。よしこい!
http://localhost/curl/test.php

できたー!

まとめ

無知と思い込みは怖い。

PHP/cURL(Client URL Library)/リクエストのPOST送信

1月 1, 2003 · Posted in cURL(Client URL Library), PHP · Comment 

コードの組み立て

初期化、URLの指定、後処理

[[PHP/cURL(Client URL Library)/基本的なこと]]を参照

リクエストをPOSTに指定

curl_setopt($ch, CURLOPT_POST, true);

CURLOPT_POSTにtrueを指定することで、リクエストをPOSTで送信します。(POST は、 application/x-www-form-urlencoded形式で実行される)

POSTリクエストで送信するデータを指定する

送信データの指定方法は2種類あります。

1.連想配列でデータを指定

$data = array();
$data{"username"} = "root";
$data{"password"} = "rootpass";

curl_setopt ($ch,CURLOPT_POSTFIELDS, $data);

2.URLエンコード形式(GET利用時の形式)でデータを指定

$data = "username=root&password=rootpass";
curl_setopt ($ch,CURLOPT_POSTFIELDS, $data);

ファイルを指定する場合は、@+{ファイルのフルパス}という形式で指定する。

サンプルコード

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<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>

次ページへ »