XVIII. CURL, Client URL Library 関数

導入

PHP は、Daniel Stenbergにより開発されたライブラリlibcurl をサポー トします。このライブラリにより、多くの異なったプロトコルで様々なサー バーと接続し、通信することが可能になります。libcurl は現在 http, https, ftp, gopher, telnet, dict, file, ldap プロトコルをサ ポートしてします。libcurl は HTTPS 認証、HTTP POST、HTTP PUT、FTP アップロード(これはPHPのftp拡張機能でも実行可能です)、HTTPフォーム によるアップロード、プロキシ、クッキー、ユーザ名+パスワードによる 認証もサポートします。

これらの関数は、PHP 4.0.2で追加されました。

要件

PHP の cURL 関数を使用するためには、 libcurl パッケージをインストールしておく必要があります。PHP は、 libcurl 7.0.2-beta 以降を必要とします。 PHP バージョン 4.2.3 以降、少なくとも libcurl バージョン 7.9.0 以降が必要となっています。 PHP 4.3.0 以降では、7.9.8 以降が必要です。 PHP 5.0.0 では、おそらく、libcurl 7.10.5 以降が必要となります。

インストール手順

PHP の cURL サポート機能を使用するには、 --with-curl[=DIR] を付けて PHP をコンパイル しておく必要があります。ただし、DIR は、ディレクトリ lib および include を有するディレクトリの場所となります。 ディレクトリ "include" には、"curl" という名前のフォルダがある 必要があり、そのフォルダにはファイル easy.h および curl.h がある必要が あります。 libcurl.a という名前のファイルがディレクトリ "lib" にある必要があります。PHP 4.3.0 以降、URL ストリームで cURL を使用するよう PHP を 設定するために --with-curlwrappers を指定できます。

Win32 ユーザへの注意: このモジュールを Windows 環境で使用可能とするには、 libeay32.dll および ssleay32.dll が PATH の通った場所に存在する必要があります。

cURL のサイトにある libcurl.dll は不要です。

定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

CURLOPT_AUTOREFERER ( integer )

PHP 5.1.0 以降で使用可能です。

CURLOPT_COOKIESESSION ( integer )

PHP 5.1.0 以降で使用可能です。

CURLOPT_DNS_USE_GLOBAL_CACHE ( integer )

CURLOPT_DNS_CACHE_TIMEOUT ( integer )

CURLOPT_FTP_SSL ( integer )

PHP 5.2.0 以降で使用可能です。

CURLFTPSSL_TRY ( integer )

PHP 5.2.0 以降で使用可能です。

CURLFTPSSL_ALL ( integer )

PHP 5.2.0 以降で使用可能です。

CURLFTPSSL_CONTROL ( integer )

PHP 5.2.0 以降で使用可能です。

CURLFTPSSL_NONE ( integer )

PHP 5.2.0 以降で使用可能です。

CURLOPT_FTPSSLAUTH ( integer )

PHP 5.1.0 以降で使用可能です。

CURLOPT_PORT ( integer )

CURLOPT_FILE ( integer )

CURLOPT_INFILE ( integer )

CURLOPT_INFILESIZE ( integer )

CURLOPT_URL ( integer )

CURLOPT_PROXY ( integer )

CURLOPT_VERBOSE ( integer )

CURLOPT_HEADER ( integer )

CURLOPT_HTTPHEADER ( integer )

CURLOPT_NOPROGRESS ( integer )

CURLOPT_NOBODY ( integer )

CURLOPT_FAILONERROR ( integer )

CURLOPT_UPLOAD ( integer )

CURLOPT_POST ( integer )

CURLOPT_FTPLISTONLY ( integer )

CURLOPT_FTPAPPEND ( integer )

CURLOPT_NETRC ( integer )

CURLOPT_FOLLOWLOCATION ( integer )

CURLOPT_FTPASCII ( integer )

CURLOPT_PUT ( integer )

CURLOPT_MUTE ( integer )

CURLOPT_USERPWD ( integer )

CURLOPT_PROXYUSERPWD ( integer )

CURLOPT_RANGE ( integer )

CURLOPT_TIMEOUT ( integer )

CURLOPT_POSTFIELDS ( integer )

CURLOPT_REFERER ( integer )

CURLOPT_USERAGENT ( integer )

CURLOPT_FTPPORT ( integer )

CURLOPT_FTP_USE_EPSV ( integer )

CURLOPT_LOW_SPEED_LIMIT ( integer )

CURLOPT_LOW_SPEED_TIME ( integer )

CURLOPT_RESUME_FROM ( integer )

CURLOPT_COOKIE ( integer )

CURLOPT_SSLCERT ( integer )

CURLOPT_SSLCERTPASSWD ( integer )

CURLOPT_WRITEHEADER ( integer )

CURLOPT_SSL_VERIFYHOST ( integer )

CURLOPT_COOKIEFILE ( integer )

CURLOPT_SSLVERSION ( integer )

CURLOPT_TIMECONDITION ( integer )

CURLOPT_TIMEVALUE ( integer )

CURLOPT_CUSTOMREQUEST ( integer )

CURLOPT_STDERR ( integer )

CURLOPT_TRANSFERTEXT ( integer )

CURLOPT_RETURNTRANSFER ( integer )

CURLOPT_QUOTE ( integer )

CURLOPT_POSTQUOTE ( integer )

CURLOPT_INTERFACE ( integer )

CURLOPT_KRB4LEVEL ( integer )

CURLOPT_HTTPPROXYTUNNEL ( integer )

CURLOPT_FILETIME ( integer )

CURLOPT_WRITEFUNCTION ( integer )

CURLOPT_READFUNCTION ( integer )

CURLOPT_PASSWDFUNCTION ( integer )

CURLOPT_HEADERFUNCTION ( integer )

CURLOPT_MAXREDIRS ( integer )

CURLOPT_MAXCONNECTS ( integer )

CURLOPT_CLOSEPOLICY ( integer )

CURLOPT_FRESH_CONNECT ( integer )

CURLOPT_FORBID_REUSE ( integer )

CURLOPT_RANDOM_FILE ( integer )

CURLOPT_EGDSOCKET ( integer )

CURLOPT_CONNECTTIMEOUT ( integer )

CURLOPT_SSL_VERIFYPEER ( integer )

CURLOPT_CAINFO ( integer )

CURLOPT_CAPATH ( integer )

CURLOPT_COOKIEJAR ( integer )

CURLOPT_SSL_CIPHER_LIST ( integer )

CURLOPT_BINARYTRANSFER ( integer )

CURLOPT_NOSIGNAL ( integer )

CURLOPT_PROXYTYPE ( integer )

CURLOPT_BUFFERSIZE ( integer )

CURLOPT_HTTPGET ( integer )

CURLOPT_HTTP_VERSION ( integer )

CURLOPT_SSLKEY ( integer )

CURLOPT_SSLKEYTYPE ( integer )

CURLOPT_SSLKEYPASSWD ( integer )

CURLOPT_SSLENGINE ( integer )

CURLOPT_SSLENGINE_DEFAULT ( integer )

CURLOPT_SSLCERTTYPE ( integer )

CURLOPT_CRLF ( integer )

CURLOPT_ENCODING ( integer )

CURLOPT_PROXYPORT ( integer )

CURLOPT_UNRESTRICTED_AUTH ( integer )

CURLOPT_FTP_USE_EPRT ( integer )

CURLOPT_HTTP200ALIASES ( integer )

CURLOPT_HTTPAUTH ( integer )

CURLAUTH_BASIC ( integer )

CURLAUTH_DIGEST ( integer )

CURLAUTH_GSSNEGOTIATE ( integer )

CURLAUTH_NTLM ( integer )

CURLAUTH_ANY ( integer )

CURLAUTH_ANYSAFE ( integer )

CURLOPT_PROXYAUTH ( integer )

CURLCLOSEPOLICY_LEAST_RECENTLY_USED ( integer )

CURLCLOSEPOLICY_LEAST_TRAFFIC ( integer )

CURLCLOSEPOLICY_SLOWEST ( integer )

CURLCLOSEPOLICY_CALLBACK ( integer )

CURLCLOSEPOLICY_OLDEST ( integer )

CURLINFO_EFFECTIVE_URL ( integer )

CURLINFO_HTTP_CODE ( integer )

CURLINFO_HEADER_OUT ( integer )

PHP 6.0.0 以降で使用可能です。

CURLINFO_HEADER_SIZE ( integer )

CURLINFO_REQUEST_SIZE ( integer )

CURLINFO_TOTAL_TIME ( integer )

CURLINFO_NAMELOOKUP_TIME ( integer )

CURLINFO_CONNECT_TIME ( integer )

CURLINFO_PRETRANSFER_TIME ( integer )

CURLINFO_SIZE_UPLOAD ( integer )

CURLINFO_SIZE_DOWNLOAD ( integer )

CURLINFO_SPEED_DOWNLOAD ( integer )

CURLINFO_SPEED_UPLOAD ( integer )

CURLINFO_FILETIME ( integer )

CURLINFO_SSL_VERIFYRESULT ( integer )

CURLINFO_CONTENT_LENGTH_DOWNLOAD ( integer )

CURLINFO_CONTENT_LENGTH_UPLOAD ( integer )

CURLINFO_STARTTRANSFER_TIME ( integer )

CURLINFO_CONTENT_TYPE ( integer )

CURLINFO_REDIRECT_TIME ( integer )

CURLINFO_REDIRECT_COUNT ( integer )

CURL_VERSION_IPV6 ( integer )

CURL_VERSION_KERBEROS4 ( integer )

CURL_VERSION_SSL ( integer )

CURL_VERSION_LIBZ ( integer )

CURLVERSION_NOW ( integer )

CURLE_OK ( integer )

CURLE_UNSUPPORTED_PROTOCOL ( integer )

CURLE_FAILED_INIT ( integer )

CURLE_URL_MALFORMAT ( integer )

CURLE_URL_MALFORMAT_USER ( integer )

CURLE_COULDNT_RESOLVE_PROXY ( integer )

CURLE_COULDNT_RESOLVE_HOST ( integer )

CURLE_COULDNT_CONNECT ( integer )

CURLE_FTP_WEIRD_SERVER_REPLY ( integer )

CURLE_FTP_ACCESS_DENIED ( integer )

CURLE_FTP_USER_PASSWORD_INCORRECT ( integer )

CURLE_FTP_WEIRD_PASS_REPLY ( integer )

CURLE_FTP_WEIRD_USER_REPLY ( integer )

CURLE_FTP_WEIRD_PASV_REPLY ( integer )

CURLE_FTP_WEIRD_227_FORMAT ( integer )

CURLE_FTP_CANT_GET_HOST ( integer )

CURLE_FTP_CANT_RECONNECT ( integer )

CURLE_FTP_COULDNT_SET_BINARY ( integer )

CURLE_PARTIAL_FILE ( integer )

CURLE_FTP_COULDNT_RETR_FILE ( integer )

CURLE_FTP_WRITE_ERROR ( integer )

CURLE_FTP_QUOTE_ERROR ( integer )

CURLE_HTTP_NOT_FOUND ( integer )

CURLE_WRITE_ERROR ( integer )

CURLE_MALFORMAT_USER ( integer )

CURLE_FTP_COULDNT_STOR_FILE ( integer )

CURLE_READ_ERROR ( integer )

CURLE_OUT_OF_MEMORY ( integer )

CURLE_OPERATION_TIMEOUTED ( integer )

CURLE_FTP_COULDNT_SET_ASCII ( integer )

CURLE_FTP_PORT_FAILED ( integer )

CURLE_FTP_COULDNT_USE_REST ( integer )

CURLE_FTP_COULDNT_GET_SIZE ( integer )

CURLE_HTTP_RANGE_ERROR ( integer )

CURLE_HTTP_POST_ERROR ( integer )

CURLE_SSL_CONNECT_ERROR ( integer )

CURLE_FTP_BAD_DOWNLOAD_RESUME ( integer )

CURLE_FILE_COULDNT_READ_FILE ( integer )

CURLE_LDAP_CANNOT_BIND ( integer )

CURLE_LDAP_SEARCH_FAILED ( integer )

CURLE_LIBRARY_NOT_FOUND ( integer )

CURLE_FUNCTION_NOT_FOUND ( integer )

CURLE_ABORTED_BY_CALLBACK ( integer )

CURLE_BAD_FUNCTION_ARGUMENT ( integer )

CURLE_BAD_CALLING_ORDER ( integer )

CURLE_HTTP_PORT_FAILED ( integer )

CURLE_BAD_PASSWORD_ENTERED ( integer )

CURLE_TOO_MANY_REDIRECTS ( integer )

CURLE_UNKNOWN_TELNET_OPTION ( integer )

CURLE_TELNET_OPTION_SYNTAX ( integer )

CURLE_OBSOLETE ( integer )

CURLE_SSL_PEER_CERTIFICATE ( integer )

CURLE_GOT_NOTHING ( integer )

CURLE_SSL_ENGINE_NOTFOUND ( integer )

CURLE_SSL_ENGINE_SETFAILED ( integer )

CURLE_SEND_ERROR ( integer )

CURLE_RECV_ERROR ( integer )

CURLE_SHARE_IN_USE ( integer )

CURLE_SSL_CERTPROBLEM ( integer )

CURLE_SSL_CIPHER ( integer )

CURLE_SSL_CACERT ( integer )

CURLE_BAD_CONTENT_ENCODING ( integer )

CURLE_LDAP_INVALID_URL ( integer )

CURLE_FILESIZE_EXCEEDED ( integer )

CURLE_FTP_SSL_FAILED ( integer )

CURLFTPAUTH_DEFAULT ( integer )

PHP 5.1.0 以降で使用可能です。

CURLFTPAUTH_SSL ( integer )

PHP 5.1.0 以降で使用可能です。

CURLFTPAUTH_TLS ( integer )

PHP 5.1.0 以降で使用可能です。

CURLPROXY_HTTP ( integer )

CURLPROXY_SOCKS5 ( integer )

CURL_NETRC_OPTIONAL ( integer )

CURL_NETRC_IGNORED ( integer )

CURL_NETRC_REQUIRED ( integer )

CURL_HTTP_VERSION_NONE ( integer )

CURL_HTTP_VERSION_1_0 ( integer )

CURL_HTTP_VERSION_1_1 ( integer )

CURLM_CALL_MULTI_PERFORM ( integer )

CURLM_OK ( integer )

CURLM_BAD_HANDLE ( integer )

CURLM_BAD_EASY_HANDLE ( integer )

CURLM_OUT_OF_MEMORY ( integer )

CURLM_INTERNAL_ERROR ( integer )

CURLMSG_DONE ( integer )

PHP を cURL サポート機能付きでコンパイルすると、 curl 関数を使用可能となります。cURL 関数の基本的な使用法は、 curl_init() により cURL セッションを初期化、 curl_setopt() により転送時のオプションを設定、 続いて curl_exec() により転送を実行し、 curl_close() によりセッションを終了するというものになります。 cURL 関数を使用して PHP ホームページをファイルに取得する例を示します。

例 1. PHP の cURL モジュールを使用して example.com のホームページを取得する

<?php

$ch
= curl_init ( "http://www.example.com/" );
$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 );
?>

目次
curl_close  -- cURL セッションを閉じる
curl_copy_handle  -- cURL ハンドルを、その設定も含めてコピーする
curl_errno  -- 直近のエラー番号を返す
curl_error  -- 現在のセッションに関する直近のエラー文字列を返す
curl_exec  -- cURL セッションを実行する
curl_getinfo  -- 指定した伝送に関する情報を得る
curl_init  -- cURL セッションを初期化する
curl_multi_add_handle  -- cURL マルチハンドルに、通常の cURL ハンドルを追加する
curl_multi_close  -- cURL ハンドルのセットを閉じる
curl_multi_exec  -- 現在の cURL ハンドルから、サブ接続を実行する
curl_multi_getcontent  -- CURLOPT_RETURNTRANSFER が設定されている場合に、cURL ハンドルの内容を返す
curl_multi_info_read  -- 現在の転送についての情報を表示する
curl_multi_init  -- 新規 cURL マルチハンドルを返す
curl_multi_remove_handle  -- cURL ハンドルのセットからマルチハンドルを削除する
curl_multi_select  -- cURL 拡張モジュールに関連付けられているすべてのソケットを取得し、「選択可能な」状態にする
curl_setopt_array  -- CURL 転送用の複数のオプションを設定する
curl_setopt  -- cURL 転送用オプションを設定する
curl_version  -- cURL のバージョンを返す