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_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 ホームページをファイルに取得する例を示します。
- 目次
- 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 のバージョンを返す