cURL 転送用オプションを設定する

# curl_setopt

(PHP 4 >= 4.0.2, PHP 5, PHP 7)

curl_setopt — cURL 転送用オプションを設定する

### 説明

curl_setopt ( resource `$ch` , int `$option` , mixed `$value` ) : bool

指定した cURL セッションハンドルのオプションを設定します。

### パラメータ

`ch`

  curl_init() が返す cURL ハンドル。

`option`

  設定したい CURLOPT_XXX オプション。

`value`

  `option` に設定する値。

  `value` には、 `option` の以下の値に関して bool 値を指定する必要があります。

  オプション | `value` への設定値 | 注記
  --- | --- | ---
  `CURLOPT_AUTOREFERER` | `TRUE` を設定すると、Location: によるリダイレクトを たどる際には自動的に Referer: フィールドをリクエストに 追加します。 |
  `CURLOPT_BINARYTRANSFER` | `TRUE` を設定すると、`CURLOPT_RETURNTRANSFER` が使用された場合に出力結果を何も加工せずに返します。 | PHP 5.1.3 以降では、このオプションは何の効果もありません。 `CURLOPT_RETURNTRANSFER` を使ったときには 常に出力をそのまま返すようになりました。
  `CURLOPT_COOKIESESSION` | `TRUE` を設定すると、クッキーの "セッション" を新しく開始します。 以前のセッションで読み込まれていた "セッションクッキー" は無視するよう、 libcurl に指示します。デフォルトでは、それがセッションクッキーであるか どうかにかかわらず libcurl はすべてのクッキーを読み込んで保存します。 セッションクッキーとは、有効期限が指定されておらず "セッション" の間のみ 有効であるクッキーのことです。 |
  `CURLOPT_CERTINFO` | `TRUE` を設定すると、セキュアな転送時に SSL 証明書の情報を STDERR に出力します。 | cURL 7.19.1 で追加されました。 PHP 5.3.2 以降で使用可能です。これを使うには、`CURLOPT_VERBOSE` を on にしておかなければなりません。
  `CURLOPT_CONNECT_ONLY` | `TRUE` を設定すると、プロキシの認証や接続の確立などをすべて行いますが、データは転送しません。 このオプションは、HTTP や SMTP そして POP3 用に実装されています。 | 7.15.2 で追加されました。 PHP 5.5.0 以降で使用可能です。
  `CURLOPT_CRLF` | `TRUE` を設定すると、転送時に Unix 形式の改行を CRLF 形式に変換します。 |
  `CURLOPT_DNS_USE_GLOBAL_CACHE` | `TRUE` を設定すると、グローバル DNS キャッシュを利用します。 このオプションはスレッドセーフではありません。また、デフォルトで 有効になっています。 |
  `CURLOPT_FAILONERROR` | `TRUE` を設定すると、HTTP で 400 以上のコードが返ってきた際に 処理失敗と判断します。デフォルトでは、コードの値を無視して ページの内容を取得します。 |
  `CURLOPT_SSL_FALSESTART` | `TRUE` にすると、TLS false start を有効にします。 | cURL 7.42.0 で追加されました。PHP 7.0.7 以降で使用可能です。
  `CURLOPT_FILETIME` | `TRUE` を設定すると、ドキュメントの更新日時を取得しようと試みます。 この値を取得するには、curl_getinfo() で `CURLINFO_FILETIME` オプションを用います。 |
  `CURLOPT_FOLLOWLOCATION` | `TRUE` を設定すると、サーバーが HTTP ヘッダの一部として送ってくる "Location: " ヘッダの内容をたどります （これは再帰的に行われます。`CURLOPT_MAXREDIRS` が指定されていない限り、送ってくる "Location: " ヘッダの内容をずっとたどり続けることに注意しましょう）。 |
  `CURLOPT_FORBID_REUSE` | `TRUE` を設定すると、処理が終了した際に明示的に接続を切断します。 接続を再利用しません。 |
  `CURLOPT_FRESH_CONNECT` | `TRUE` を設定すると、キャッシュされている接続を利用せずに 新しい接続を確立します。 |
  `CURLOPT_FTP_USE_EPRT` | `TRUE` を設定すると、FTP のダウンロードに EPRT（および LPRT） を利用します。`FALSE` の場合は EPRT・LPRT を無効にして PORT を利用します。 |
  `CURLOPT_FTP_USE_EPSV` | `TRUE` を設定すると、FTP 転送の際にまず EPSV コマンドの利用を 試みます。失敗した場合は PASV を利用します。`FALSE` を設定すると、 EPSV を無効にします。 |
  `CURLOPT_FTP_CREATE_MISSING_DIRS` | `TRUE` を設定すると、FTP の操作中にパスが存在しなかったときに ディレクトリを作成します。 |
  `CURLOPT_FTPAPPEND` | `TRUE` を設定すると、リモートファイルを上書きせずに追記します。 |
  `CURLOPT_TCP_NODELAY` | `TRUE` にすると、TCP の Nagle アルゴリズムを解除します。解除すると、小さなパケットがネットワーク上を流れる回数をできるだけ減らそうと試みます。 | PHP 5.2.1 以降のバージョンで、libcurl 7.11.2 以降と組み合わせてコンパイルしたときに利用可能です。
  `CURLOPT_FTPASCII` | `CURLOPT_TRANSFERTEXT` のエイリアスです。 |
  `CURLOPT_FTPLISTONLY` | `TRUE` を設定すると、FTP でディレクトリ名のみ表示します。 |
  `CURLOPT_HEADER` | `TRUE` を設定すると、ヘッダの内容も出力します。 |
  `CURLINFO_HEADER_OUT` | `TRUE` を設定すると、リクエスト文字列を追跡します。 | PHP 5.1.3 以降で使用可能です。プレフィックスが `CURLINFO_` となっているのは意図的なものです。
  `CURLOPT_HTTPGET` | `TRUE` を設定すると、HTTP のリクエスト形式を GET に戻します。 GET はデフォルト設定なので、リクエスト形式が変更されている 場合にのみ必要となります。 |
  `CURLOPT_HTTPPROXYTUNNEL` | `TRUE` にすると、指定された HTTP プロキシを介してトンネルします。 |
  `CURLOPT_MUTE` | `TRUE` を設定すると、cURL 関数に関連する出力を完全に抑えます。 | cURL 7.15.5 で削除されました (かわりに CURLOPT_RETURNTRANSFER が使えます)
  `CURLOPT_NETRC` | `TRUE` を設定すると、リモートサイトと接続を確立する際に用いる ユーザー名やパスワードを、~/.netrc から取得します。 |
  `CURLOPT_NOBODY` | `TRUE` を設定すると、出力から本文を削除します。 リクエストメソッドは HEAD となります。これを `FALSE` に変更してもリクエストメソッドは GET には変わりません。 |
  `CURLOPT_NOPROGRESS` | `TRUE` を設定すると、cURL 転送の進捗状況表示を無効にします。 注意: PHP は、このオプションを自動的に `TRUE` に設定します。 これを変更するのは、デバッグ時のみにすべきです。 |
  `CURLOPT_NOSIGNAL` | `TRUE` を設定すると、cURL 関数が PHP プロセスに送信するシグナルを 無視します。マルチスレッド SAPI ではデフォルトで on となっており、 そのためタイムアウトオプションもまだ利用されています。 | cURL 7.10 で追加されました。
  `CURLOPT_PATH_AS_IS` | `TRUE` にすると、ドットの連続を処理しません。 | cURL 7.42.0 で追加されました。PHP 7.0.7 以降で使用可能です。
  `CURLOPT_PIPEWAIT` | `TRUE` にすると、パイプライン化/多重化を待ちます。 | cURL 7.42.0 で追加されました。PHP 7.0.7 以降で使用可能です。
  `CURLOPT_POST` | `TRUE` を設定すると、HTTP POST を行います。POST は、 application/x-www-form-urlencoded 形式で 行われます。これは一般的な HTML のフォームと同じ形式です。 |
  `CURLOPT_PUT` | `TRUE` を設定すると、HTTP PUT を行います。PUT するファイルは `CURLOPT_INFILE` および `CURLOPT_INFILESIZE` で指定されている必要があります。 |
  `CURLOPT_RETURNTRANSFER` | `TRUE` を設定すると、curl_exec() の返り値を 文字列で返します。通常はデータを直接出力します。 |
  `CURLOPT_SAFE_UPLOAD` | `TRUE` にすると、`CURLOPT_POSTFIELDS` でのファイルアップロードの際の @ プレフィックスを無効にします。 つまり、@ で始まる値を安全に渡せるようになるということです。 アップロードには CURLFile が使われるでしょう。 | PHP 5.5.0 で追加され、デフォルトは `FALSE` でした。 PHP 5.6.0 以降は、デフォルトが `TRUE` に変わります。
  `CURLOPT_SASL_IR` | `TRUE` にすると、最初のパケット内の最初のレスポンスの送信を有効にします。 | cURL 7.31.0 で追加されました。PHP 7.0.7 以降で使用可能です。
  `CURLOPT_SSL_ENABLE_ALPN` | `FALSE` にすると、SSL ハンドシェイクの際の ALPN を無効にします (SSL バックエンドの libcurl がそれに対応するビルドである場合)。 これは、http2 ネゴシエーションに使えます。 | cURL 7.36.0 で追加されました。PHP 7.0.7 以降で使用可能です。
  `CURLOPT_SSL_ENABLE_NPN` | `FALSE` にすると、SSL ハンドシェイクの際の NPN を無効にします (SSL バックエンドの libcurl がそれに対応するビルドである場合)。 これは、http2 ネゴシエーションに使えます。 | cURL 7.36.0 で追加されました。PHP 7.0.7 以降で使用可能です。
  `CURLOPT_SSL_VERIFYPEER` | `FALSE` を設定すると、cURL はサーバー証明書の検証を行いません。 別の証明書を `CURLOPT_CAINFO` オプションで 指定するか、`CURLOPT_CAPATH` オプションで 証明ディレクトリを指定します。 | cURL 7.10 以降、デフォルト値は `TRUE` です。また、 cURL 7.10 以降、デフォルトでインストールされています。
  `CURLOPT_SSL_VERIFYSTATUS` | `TRUE` にすると、証明書のステータスを検証します。 | cURL 7.41.0 で追加されました。PHP 7.0.7 以降で使用可能です。
  `CURLOPT_TCP_FASTOPEN` | `TRUE` にすると、TCP Fast Open を有効にします。 | cURL 7.49.0 で追加されました。PHP 7.0.7 以降で使用可能です。
  `CURLOPT_TFTP_NO_OPTIONS` | `TRUE` にすると、TFTP オプションリクエストを送信しません。 | cURL 7.48.0 で追加されました。PHP 7.0.7 以降で使用可能です。
  `CURLOPT_TRANSFERTEXT` | `TRUE` を設定すると、FTP 転送を ASCII モードで行います。 LDAP の場合は、データを HTML ではなくプレーンテキストで取得します。 Windows システムでは STDOUT に対してバイナリモードを設定しないでください。 |
  `CURLOPT_UNRESTRICTED_AUTH` | `TRUE` を設定すると、（`CURLOPT_FOLLOWLOCATION` を利用して）場所をたどっていく際にユーザー名とパスワードを送信し続けます。 これは、たとえホスト名が変わっても続けられます。 |
  `CURLOPT_UPLOAD` | `TRUE` を設定すると、アップロードの準備をします。 |
  `CURLOPT_VERBOSE` | `TRUE` を設定すると、詳細な情報を出力します。情報は STDERR か、または `CURLOPT_STDERR` で指定したファイルに出力されます。 |

  `value` には、 `option` の以下の値に関して 整数値を指定する必要があります。

  オプション | `value` への設定値 | 注記
  --- | --- | ---
  `CURLOPT_BUFFERSIZE` | 1 回の読み込みに用いるバッファのサイズ。しかしながら、必ず このバッファいっぱいまで読み込まれることを保証するものではありません。 | cURL 7.10 で追加されました。
  `CURLOPT_CLOSEPOLICY` | `CURLCLOSEPOLICY_*` のいずれかの値。 注意: このオプションは非推奨となりました。cURL で実装されることがなく、指定しても何の効果もありませんでした。 | PHP 5.6.0 で削除されました。
  `CURLOPT_CONNECTTIMEOUT` | 接続の試行を待ち続ける秒数。0 は永遠に待ち続けることを意味します。 |
  `CURLOPT_CONNECTTIMEOUT_MS` | 接続の試行を待ち続けるミリ秒数。0 は永遠に待ち続けることを意味します。 システムの標準の名前解決を使うように libcurl をビルドしている場合は、 接続のタイムアウトは秒単位の精度となり、最小のタイムアウトは 1 秒となります。 | cURL 7.16.2 で追加されました。PHP 5.2.3 以降で使用可能です。
  `CURLOPT_DNS_CACHE_TIMEOUT` | DNS エントリをメモリ内に保持し続ける秒数。デフォルトでは 120（2 分）に設定されています。 |
  `CURLOPT_EXPECT_100_TIMEOUT_MS` | 期待するタイムアウト。連続100リクエストの時間をミリ秒で指定します。 デフォルトは1000ミリ秒です。 | cURL 7.36.0 で追加されました。PHP 7.0.7 以降で使用可能です。
  `CURLOPT_FTPSSLAUTH` | （使用可能な場合の）FTP 認証方法。 CURLFTPAUTH_SSL（まず SSL を試す）、 CURLFTPAUTH_TLS（まず TLS を試す）あるいは CURLFTPAUTH_DEFAULT（cURL が決める）のいずれかです。 | cURL 7.12.2 で追加されました。
  `CURLOPT_HEADEROPT` | How to deal with headers. One of the following constants: `CURLHEADER_UNIFIED`: the headers specified in `CURLOPT_HTTPHEADER` will be used in requests both to servers and proxies. With this option enabled, `CURLOPT_PROXYHEADER` will not have any effect. `CURLHEADER_SEPARATE`: makes `CURLOPT_HTTPHEADER` headers only get sent to a server and not to a proxy. Proxy headers must be set with `CURLOPT_PROXYHEADER` to get used. Note that if a non-CONNECT request is sent to a proxy, libcurl will send both server headers and proxy headers. When doing CONNECT, libcurl will send `CURLOPT_PROXYHEADER` headers only to the proxy and then `CURLOPT_HTTPHEADER` headers only to the server. Defaults to `CURLHEADER_SEPARATE` as of cURL 7.42.1, and `CURLHEADER_UNIFIED` before. | Added in cURL 7.37.0. Available since PHP 7.0.7.
  `CURLOPT_HTTP_VERSION` | `CURL_HTTP_VERSION_NONE` (デフォルト。 使用するバージョンを決めるのは cURL にまかせる)、 `CURL_HTTP_VERSION_1_0` (HTTP/1.0 を使用する)、 あるいは `CURL_HTTP_VERSION_1_1` (HTTP/1.1 を使用する) のいずれかです。 |
  `CURLOPT_HTTPAUTH` | 使用する HTTP 認証方法。以下の中から選びます。 `CURLAUTH_BASIC`、 `CURLAUTH_DIGEST`、 `CURLAUTH_GSSNEGOTIATE`、 `CURLAUTH_NTLM`、 `CURLAUTH_ANY` および `CURLAUTH_ANYSAFE`。 2 つ以上の方法を組み合わせるには、ビット演算子 |（or） を使用します。このような場合、cURL はサーバーがサポートしている方法を 問い合わせたうえで最適な方法を選択します。 `CURLAUTH_ANY` は CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM のエイリアスです。 `CURLAUTH_ANYSAFE` は CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM のエイリアスです。 |
  `CURLOPT_INFILESIZE` | ファイルをリモートサイトにアップロードする際のファイルサイズ。 このオプションを指定しても、libcurl がそれ以上のデータを送信するのは止められないことに注意しましょう。 実際に何が送信されるのかは `CURLOPT_READFUNCTION` に依存します。 |
  `CURLOPT_LOW_SPEED_LIMIT` | 1 秒あたりのバイト数で、転送速度がこれより遅い期間が `CURLOPT_LOW_SPEED_TIME` 秒以上続いた場合に PHP は転送を終了します。 |
  `CURLOPT_LOW_SPEED_TIME` | 転送速度が `CURLOPT_LOW_SPEED_LIMIT` より遅い期間がどれだけ続いた場合に転送を異常終了させるかを、 秒単位で指定します。 |
  `CURLOPT_MAXCONNECTS` | 許可される持続的接続の最大数。もしこの値に達した場合、 どの接続を閉じるのかを `CURLOPT_CLOSEPOLICY` によって決定します。 |
  `CURLOPT_MAXREDIRS` | HTTP のリダイレクト先を追いかける最大値。 `CURLOPT_FOLLOWLOCATION` とあわせて使用します。 |
  `CURLOPT_PORT` | 接続先のポート番号。 |
  `CURLOPT_POSTREDIR` | `CURLOPT_FOLLOWLOCATION` が設定されているときに、 どの形式のリダイレクトの場合に HTTP POST メソッドを維持するのかを、 1 (301 Moved Permanently)、2 (302 Found)、4 (303 See Other) のビットマスクで指定します。 | cURL 7.19.1 で追加されました。PHP 5.3.2 以降で使用可能です。
  `CURLOPT_PROTOCOLS` | `CURLPROTO_*` の値のビットマスク。使用すると、 転送時に libcurl がどのプロトコルを使用するのかに制約を加えます。 さまざまなプロトコルに対応するよう libcurl をビルドしていた場合でも、 これによって特定の転送プロトコルのみを使用するように制限することができます。 デフォルトでは、libcurl がサポートしているすべてのプロトコルの使用を許可します。 `CURLOPT_REDIR_PROTOCOLS` も参照ください。 使用できるプロトコルオプションは次のとおりです。 `CURLPROTO_HTTP`, `CURLPROTO_HTTPS`, `CURLPROTO_FTP`, `CURLPROTO_FTPS`, `CURLPROTO_SCP`, `CURLPROTO_SFTP`, `CURLPROTO_TELNET`, `CURLPROTO_LDAP`, `CURLPROTO_LDAPS`, `CURLPROTO_DICT`, `CURLPROTO_FILE`, `CURLPROTO_TFTP`, `CURLPROTO_ALL` | cURL 7.19.4 で追加されました。
  `CURLOPT_PROXYAUTH` | プロキシ接続に使用する HTTP 認証の方法。 `CURLOPT_HTTPAUTH` で説明したのと同じオプションを 指定可能です。プロキシ認証でサポートされているのは、今のところ `CURLAUTH_BASIC` および `CURLAUTH_NTLM` のみです。 | cURL 7.10.7 で追加されました。
  `CURLOPT_PROXYPORT` | プロキシ接続のポート番号。このポート番号は、 `CURLOPT_PROXY` で指定することも可能です。 |
  `CURLOPT_PROXYTYPE` | `CURLPROXY_HTTP`（デフォルト）、 `CURLPROXY_SOCKS4`、 `CURLPROXY_SOCKS5`、 `CURLPROXY_SOCKS4A` あるいは `CURLPROXY_SOCKS5_HOSTNAME`。 | cURL 7.10 で追加されました。
  `CURLOPT_REDIR_PROTOCOLS` | `CURLPROTO_*` の値のビットマスク。使用すると、 `CURLOPT_FOLLOWLOCATION` が有効な場合のリダイレクト時の転送に libcurl がどのプロトコルを使用するのかに制約を加えます。これによって、 リダイレクト時に特定の転送プロトコルのみを使用するように制限することができます。 デフォルトでは、libcurl がサポートしているすべてのプロトコルのうち FILE と SCP 以外のすべての使用を許可します。この挙動は 7.19.4 より前のバージョンとは異なります。7.19.4 より前のバージョンでは、 サポートするすべてのプロトコルを無条件に許可していました。 プロトコル定数の値は `CURLOPT_PROTOCOLS` を参照ください。 | cURL 7.19.4 で追加されました。
  `CURLOPT_RESUME_FROM` | 転送を途中から再開する場合のバイトオフセット。 |
  `CURLOPT_SSL_OPTIONS` | Set SSL behavior options, which is a bitmask of any of the following constants: `CURLSSLOPT_ALLOW_BEAST`: do not attempt to use any workarounds for a security flaw in the SSL3 and TLS1.0 protocols. `CURLSSLOPT_NO_REVOKE`: disable certificate revocation checks for those SSL backends where such behavior is present. | Added in cURL 7.25.0. Available since PHP 7.0.7.
  `CURLOPT_SSL_VERIFYHOST` | 1 は SSL ピア証明書に一般名が存在するかどうかを調べます。 2 はそれに加え、その名前がホスト名と一致することを検証します。 本番環境では、このオプションの値は常に 2 (デフォルト値) にしておかなければなりません。 | 値 1 は、cURL 7.28.1 以降では使えなくなりました。
  `CURLOPT_SSLVERSION` | `CURL_SSLVERSION_DEFAULT` (0)、 `CURL_SSLVERSION_TLSv1` (1)、 `CURL_SSLVERSION_SSLv2` (2)、 `CURL_SSLVERSION_SSLv3` (3)、 `CURL_SSLVERSION_TLSv1_0` (4)、 `CURL_SSLVERSION_TLSv1_1` (5)、 `CURL_SSLVERSION_TLSv1_2` (6) のいずれかの値。 注意: この値は何も設定せず、デフォルトに任せるのが最適です。 2 や 3 を設定すると、SSLv2 および SSLv3 の既知の脆弱性の影響を受けるため、非常に危険です。 |
  `CURLOPT_STREAM_WEIGHT` | Set the numerical stream weight (a number between 1 and 256). | Added in cURL 7.46.0. Available since PHP 7.0.7.
  `CURLOPT_TIMECONDITION` | `CURLOPT_TIMEVALUE` の扱いを決定します。 `CURLOPT_TIMEVALUE` で指定した時刻以降に 変更されたページのみを返す場合は `CURL_TIMECOND_IFMODSINCE` を使用します。 `CURLOPT_HEADER` が `TRUE` だと仮定すると、 ページが変更されていない場合は "304 Not Modified" ヘッダが返されます。 `CURL_TIMECOND_IFUNMODSINCE` は反対の意味です。 デフォルトは `CURL_TIMECOND_IFMODSINCE` です。 |
  `CURLOPT_TIMEOUT` | cURL 関数の実行にかけられる時間の最大値。 |
  `CURLOPT_TIMEOUT_MS` | cURL 関数の実行にかけられる最大のミリ秒数。 システムの標準の名前解決を使うように libcurl をビルドしている場合は、 接続のタイムアウトは秒単位の精度となり、最小のタイムアウトは 1 秒となります。 | cURL 7.16.2 で追加されました。PHP 5.2.3 以降で使用可能です。
  `CURLOPT_TIMEVALUE` | 1970 年 1 月 1 日からの経過秒数。この値は `CURLOPT_TIMECONDITION` で使用されます。デフォルトでは `CURL_TIMECOND_IFMODSINCE` が設定されます。 |
  `CURLOPT_MAX_RECV_SPEED_LARGE` | ダウンロード速度 (単位は「バイト/秒」) の転送中累加平均がこの値を超えると、 転送を一時停止して、平均速度がこのパラメータの値以下に落ちるまで待ちます。 デフォルトは無制限です。 | cURL 7.15.5 で追加されました。PHP 5.4.0 以降で使用可能です。
  `CURLOPT_MAX_SEND_SPEED_LARGE` | アップロード速度 (単位は「バイト/秒」) の転送中累加平均がこの値を超えると、 転送を一時停止して、平均速度がこのパラメータの値以下に落ちるまで待ちます。 デフォルトは無制限です。 | cURL 7.15.5 で追加されました。PHP 5.4.0 以降で使用可能です。
  `CURLOPT_SSH_AUTH_TYPES` | `CURLSSH_AUTH_PUBLICKEY`, `CURLSSH_AUTH_PASSWORD`, `CURLSSH_AUTH_HOST`, `CURLSSH_AUTH_KEYBOARD` のビットマスク。 `CURLSSH_AUTH_ANY` にすると libcurl がいずれかひとつを選択します。 | cURL 7.16.1 で追加されました。
  `CURLOPT_IPRESOLVE` | ホスト名の解決にどの形式の IP アドレスを使うのかを、アプリケーションが選べるようにします。 複数のバージョンの IP アドレスで解決できるホスト名のときに使うもので、指定できる値は `CURL_IPRESOLVE_WHATEVER`、 `CURL_IPRESOLVE_V4` そして `CURL_IPRESOLVE_V6` です。 デフォルトは `CURL_IPRESOLVE_WHATEVER` です。 | cURL 7.10.8 で追加されました。
  `CURLOPT_FTP_FILEMETHOD` | FTP(S) サーバー上のファイルに到達するために使う方法を curl に伝えます。利用可能な値は `CURLFTPMETHOD_MULTICWD`、 `CURLFTPMETHOD_NOCWD` および `CURLFTPMETHOD_SINGLECWD` です。 | cURL 7.15.1 で追加されました。PHP 5.3.0 以降で使用可能です。

  `value` は、 `option` パラメータの 以下の値に関して文字列である必要があります。

  オプション | `value` への設定値 | 注記
  --- | --- | ---
  `CURLOPT_CAINFO` | 接続先を検証するための証明書を保持するファイル名。 これは `CURLOPT_SSL_VERIFYPEER` を使用する場合に のみ意味を持ちます。 | 絶対パスで指定しなければならないでしょう。
  `CURLOPT_CAPATH` | 複数の証明書ファイルを保持するディレクトリ。このオプションは `CURLOPT_SSL_VERIFYPEER` とともに使用します。 |
  `CURLOPT_COOKIE` | HTTP リクエストにおける "Cookie: " ヘッダの内容。 クッキーが複数ある場合は、セミコロンとスペースで区切られる (例 "fruit=apple; colour=red") ことに注意しましょう。 |
  `CURLOPT_COOKIEFILE` | クッキーのデータを保持するファイルの名前。クッキーファイルは、 Netscape フォーマットあるいは HTTP ヘッダを単純にファイルにダンプしたものが使用可能です。 名前が空文字列の場合はクッキーを読み込みませんが、クッキーの処理は有効なままです。 |
  `CURLOPT_COOKIEJAR` | ハンドルを閉じる際 (curl_close のコール後など) に、 すべての内部クッキーを保存するファイルの名前。 |
  `CURLOPT_CUSTOMREQUEST` | HTTP リクエストで "GET" あるいは "HEAD" 以外に 使用するカスタムメソッド。これが有用なのは、"DELETE" やその他のあまり知られていない HTTP リクエストを実行する場合です。 使用可能な値は "GET"、 "POST"、"CONNECT" などです。 HTTP リクエストの内容をすべて指定するわけではありません。つまり、 "GET /index.html HTTP/1.0\r\n\r\n" のような 記述は間違いだということです。 注意: 使用しようとしているメソッドをサーバーがサポートしていることを 確かめるまで、これを使用しないでください。 |
  `CURLOPT_DEFAULT_PROTOCOL` | The default protocol to use if the URL is missing a scheme name. | Added in cURL 7.45.0. Available since PHP 7.0.7.
  `CURLOPT_DNS_INTERFACE` | Set the name of the network interface that the DNS resolver should bind to. This must be an interface name (not an address). | Added in cURL 7.33.0. Available since PHP 7.0.7.
  `CURLOPT_DNS_LOCAL_IP4` | Set the local IPv4 address that the resolver should bind to. The argument should contain a single numerical IPv4 address as a string. | Added in cURL 7.33.0. Available since PHP 7.0.7.
  `CURLOPT_DNS_LOCAL_IP6` | Set the local IPv6 address that the resolver should bind to. The argument should contain a single numerical IPv6 address as a string. | Added in cURL 7.33.0. Available since PHP 7.0.7.
  `CURLOPT_EGDSOCKET` | `CURLOPT_RANDOM_FILE` と似ていますが、 Entropy Gathering Daemon ソケットを使用してファイル名を生成する点が 違います。 |
  `CURLOPT_ENCODING` | "Accept-Encoding: " ヘッダの内容。 これにより、応答のデコードを可能にします。サポートされる エンコーディングは "identity"、 "deflate" および "gzip" です。もし空文字列 "" が指定された場合、 サポートされるエンコーディングをすべて含むヘッダが送信されます。 | cURL 7.10 で追加されました。
  `CURLOPT_FTPPORT` | FTP で "PORT" を使用するための IP アドレスを取得する際に使用される値。 "PORT" は、リモートサーバーに対してこちらが指定した IP アドレスに 接続するよう指示します。この値に設定できる内容は IP アドレス、ホスト名、 ネットワークインターフェイス名（Unix）、あるいは単に '-' を指定する ことでシステムのデフォルト IP アドレスを指定します。 |
  `CURLOPT_INTERFACE` | 使用するネットワークインターフェイスの名前。 インターフェイス名、IP アドレスあるいはホスト名が指定可能です。 |
  `CURLOPT_KEYPASSWD` | `CURLOPT_SSLKEY` あるいは `CURLOPT_SSH_PRIVATE_KEYFILE` 秘密鍵を使うときに必須となるパスワード。 | cURL 7.16.1 で追加されました。
  `CURLOPT_KRB4LEVEL` | KRB4（Kerberos 4）セキュリティレベル。以下の値のいずれか （セキュリティの低い順です）が指定可能です。 "clear"、 "safe"、 "confidential"、 "private"。 文字列がこれらのどれでもなかった場合は、 "private" が使用されます。このオプションを `NULL` にすると KRB4 セキュリティを無効にします。現時点では、KRB4 セキュリティは FTP 転送にのみ使用可能です。 |
  `CURLOPT_LOGIN_OPTIONS` | Can be used to set protocol specific login options, such as the preferred authentication mechanism via "AUTH=NTLM" or "AUTH=*", and should be used in conjunction with the `CURLOPT_USERNAME` option. | Added in cURL 7.34.0. Available since PHP 7.0.7.
  `CURLOPT_PINNEDPUBLICKEY` | Set the pinned public key. The string can be the file name of your pinned public key. The file format expected is "PEM" or "DER". The string can also be any number of base64 encoded sha256 hashes preceded by "sha256//" and separated by ";". | Added in cURL 7.39.0. Available since PHP 7.0.7.
  `CURLOPT_POSTFIELDS` | HTTP "POST" で送信するすべてのデータ。 ファイルを送信するには、ファイル名の先頭に @ をつけてフルパスを指定します。ファイルタイプを明示的に指定するには、ファイル名の後に ';type=mimetype' 形式で続けます。 このパラメータは 'para1=val1&para2=val2&...' のように url エンコードされた文字列形式で渡すこともできますし、 フィールド名をキー、データを値とする配列で渡すこともできます。 `value` が配列の場合、 Content-Type ヘッダには multipart/form-data を設定します。 PHP 5.2.0 以降、このオプションに @ プレフィックスつきでファイルを渡したときは `value` が配列でなければならなくなりました。 PHP 5.5.0 以降、@ プレフィックスは非推奨になりました。 また、ファイルを CURLFile で送信できるようになりました。 @ プレフィックスを無効化して、 @ で始まる値を安全に渡せるようにするには、 `CURLOPT_SAFE_UPLOAD` オプションを `TRUE` と設定します。 |
  `CURLOPT_PRIVATE` | この cURL ハンドルに関連づけるデータ。ここで関連づけたデータは、 curl_getinfo() の `CURLINFO_PRIVATE` オプションで取得できます。 cURL はデータを一切加工しません。 cURL マルチハンドルを使う場合は一般的に、この値が cURL ハンドルを特定する一意なキーとなります。 | cURL 7.10.3 で追加されました。
  `CURLOPT_PROXY` | リクエストを経由させる HTTP プロキシ。 |
  `CURLOPT_PROXY_SERVICE_NAME` | The proxy authentication service name. | Added in cURL 7.34.0. Available since PHP 7.0.7.
  `CURLOPT_PROXYUSERPWD` | プロキシに接続するためのユーザー名とパスワード。 "[username]:[password]" 形式で指定します。 |
  `CURLOPT_RANDOM_FILE` | 使用するファイル名を、SSL の乱数生成器を使用して作成します。 |
  `CURLOPT_RANGE` | 取得するデータの範囲を "X-Y" 形式で指定します。X あるいは Y は省略可能です。 HTTP 転送では、いくつかの範囲をカンマで区切った "X-Y,N-M" のような形式もサポートしています。 |
  `CURLOPT_REFERER` | HTTP リクエストで使用される "Referer: " ヘッダの内容。 |
  `CURLOPT_SERVICE_NAME` | The authentication service name. | Added in cURL 7.43.0. Available since PHP 7.0.7.
  `CURLOPT_SSH_HOST_PUBLIC_KEY_MD5` | 32 桁の十六進文字列。この文字列は、リモートホストの公開鍵の MD5 チェックサムでなければなりません。 md5sum がマッチしない限り、libcurl はホストとの接続を拒否します。 このオプションは、SCP および SFTP でのみ有効です。 | cURL 7.17.1 で追加されました。
  `CURLOPT_SSH_PUBLIC_KEYFILE` | 公開鍵のファイル名。指定しなかった場合、libcurl はデフォルトの場所を探します。デフォルトは、 環境変数 HOME が設定されていれば $HOME/.ssh/id_dsa.pub、設定されていなければ カレントディレクトリの "id_dsa.pub" です。 | cURL 7.16.1 で追加されました。
  `CURLOPT_SSH_PRIVATE_KEYFILE` | 秘密鍵のファイル名。指定しなかった場合、libcurl はデフォルトの場所を探します。デフォルトは、 環境変数 HOME が設定されていれば $HOME/.ssh/id_dsa、設定されていなければ カレントディレクトリの "id_dsa" です。 ファイルがパスワードで保護されている場合は、パスワードを `CURLOPT_KEYPASSWD` に設定します。 | cURL 7.16.1 で追加されました。
  `CURLOPT_SSL_CIPHER_LIST` | SSL で使用する暗号のリスト。例えば RC4-SHA および TLSv1 が 使用可能です。 |
  `CURLOPT_SSLCERT` | PEM フォーマットの証明書を含むファイルの名前。 |
  `CURLOPT_SSLCERTPASSWD` | `CURLOPT_SSLCERT` 証明書を使用する際に必要なパスワード。 |
  `CURLOPT_SSLCERTTYPE` | 証明書の形式。サポートされるフォーマットは "PEM"（デフォルト）、"DER" および "ENG" です。 | cURL 7.9.3 で追加されました。
  `CURLOPT_SSLENGINE` | `CURLOPT_SSLKEY` で指定した SSL 秘密鍵の 暗号化エンジンの ID 。 |
  `CURLOPT_SSLENGINE_DEFAULT` | 非対称暗号化で使用する暗号化エンジンの ID 。 |
  `CURLOPT_SSLKEY` | SSL 秘密鍵を含むファイルの名前。 |
  `CURLOPT_SSLKEYPASSWD` | `CURLOPT_SSLKEY` で指定した SSL 秘密鍵を 使用するために必要なパスワード。 注意: このオプションには重要なパスワードが含まれます。PHP スクリプトを 安全な状態におくことを忘れないでください。 |
  `CURLOPT_SSLKEYTYPE` | `CURLOPT_SSLKEY` で指定した SSL 秘密鍵の 形式。サポートされる型は以下のとおりです。 "PEM"（デフォルト）、"DER" および "ENG" 。 |
  `CURLOPT_UNIX_SOCKET_PATH` | Enables the use of Unix domain sockets as connection endpoint and sets the path to the given string. | Added in cURL 7.40.0. Available since PHP 7.0.7.
  `CURLOPT_URL` | 取得する URL 。curl_init() でセッションを 初期化する際に指定することも可能です。 |
  `CURLOPT_USERAGENT` | HTTP リクエストで使用される "User-Agent: " ヘッダの内容。 |
  `CURLOPT_USERNAME` | The user name to use in authentication. | Added in cURL 7.19.1. Available since PHP 5.5.0.
  `CURLOPT_USERPWD` | 接続に使用するユーザー名とパスワード。 "[username]:[password]" 形式で指定します。 |
  `CURLOPT_XOAUTH2_BEARER` | Specifies the OAuth 2.0 access token. | Added in cURL 7.33.0. Available since PHP 7.0.7.

  `value` には、 `option` の以下の値に関して 配列を指定する必要があります。

  オプション | `value` への設定値 | 注記
  --- | --- | ---
  `CURLOPT_CONNECT_TO` | Connect to a specific host and port instead of the URL's host and port. Accepts an array of strings with the format HOST:PORT:CONNECT-TO-HOST:CONNECT-TO-PORT. | Added in cURL 7.49.0. Available since PHP 7.0.7.
  `CURLOPT_HTTP200ALIASES` | エラーではなく正常な応答として扱われる、HTTP 200 レスポンスの配列。 | cURL 7.10.3 で追加されました。
  `CURLOPT_HTTPHEADER` | 設定する HTTP ヘッダフィールドの配列。 `array('Content-type: text/plain', 'Content-length: 100')` 形式。 |
  `CURLOPT_POSTQUOTE` | FTP リクエストの実行後に、サーバー上で実行する FTP コマンドの配列。 |
  `CURLOPT_PROXYHEADER` | An array of custom HTTP headers to pass to proxies. | Added in cURL 7.37.0. Available since PHP 7.0.7.
  `CURLOPT_QUOTE` | FTP リクエストの前にサーバー上で実行する FTP コマンドの配列。 |

  `value` はストリームリソース（例えば fopen() が作成するもの）であり、以下の `option` パラメータに設定します。

  オプション | `value` に設定する内容
  --- | ---
  `CURLOPT_FILE` | 転送内容が書き込まれるファイル。デフォルトは STDOUT （ブラウザウィンドウ）。
  `CURLOPT_INFILE` | アップロード時に転送内容を読み込むファイル。
  `CURLOPT_STDERR` | STDERR の代わりにエラーを出力する場所。
  `CURLOPT_WRITEHEADER` | 転送のヘッダ部分が書き込まれるファイル。

  `value` には、 `option` の以下の値に関して 有効な関数あるいはクロージャの名前を指定する必要があります。

  オプション | `value` への設定値
  --- | ---
  `CURLOPT_HEADERFUNCTION` | 二つのパラメータをとるコールバック。 最初のパラメータは CURL リソースで、2 番目は書き込む ヘッダデータの文字列です。このコールバック関数を使用するにあたり、 ヘッダデータを書き込む処理を実装するのはあなたの役目となります。 書き込んだデータのバイト数を返します。
  `CURLOPT_PASSWDFUNCTION` | 三つのパラメータをとるコールバック。 最初のパラメータは CURL リソースで、2 番目はパスワード プロンプトの文字列、そして 3 番目はパスワードの最大長です。 入力されたパスワードを文字列で返します。
  `CURLOPT_PROGRESSFUNCTION` | 五つのパラメータをとるコールバック。 最初のパラメータは cURL 利ソールで、2 番目はこの転送でダウンロードしようとしている総バイト数、 3 番目はこれまでにダウンロードしたバイト数、4 番目はこの転送でアップロードしようとしている総バイト数、 そして 5 番目はこれまでにアップロードしたバイト数です。 注意: このコールバックが呼ばれるのは、`CURLOPT_NOPROGRESS` が `FALSE` の場合だけです。 ゼロ以外の値を返すと、転送を強制終了できます。このとき、この転送にはエラー `CURLE_ABORTED_BY_CALLBACK` が設定されます。
  `CURLOPT_READFUNCTION` | 三つのパラメータをとるコールバック。 最初のパラメータは CURL リソースで、2 番目は `CURLOPT_INFILE` で cURL に渡したストリームリソース、 そして最後が読み込むデータの最大量です。 コールバックは、要求したデータ量以下の長さの文字列を返さなければなりません。 一般的には、渡されたストリームリソースから読み込んだデータを返します。 EOF を伝えるには空文字列を返さなければなりません。
  `CURLOPT_WRITEFUNCTION` | 二つのパラメータをとるコールバック。 最初のパラメータは CURL リソースで、2 番目は書き込む データの文字列です。データの保存には、 このコールバック関数を使わなければなりません。 書き込んだデータの正確なバイト数を返す必要があります。 返さなければ、エラーで転送が異常終了します。

  その他の値

  オプション | `value` への設定値
  --- | ---
  `CURLOPT_SHARE` | curl_share_init() の結果。 この cURL ハンドルに、共有ハンドルからのデータを使わせるようにします。

### 返り値

成功した場合に `TRUE` を、失敗した場合に `FALSE` を返します。

### 変更履歴

バージョン | 説明
--- | ---
7.0.7 | `CURL_HTTP_VERSION_2`, `CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE`, `CURL_HTTP_VERSION_2TLS`, `CURL_REDIR_POST_301`, `CURL_REDIR_POST_302`, `CURL_REDIR_POST_303`, `CURL_REDIR_POST_ALL`, `CURL_VERSION_KERBEROS5`, `CURL_VERSION_PSL`, `CURL_VERSION_UNIX_SOCKETS`, `CURLAUTH_NEGOTIATE`, `CURLAUTH_NTLM_WB`, `CURLFTP_CREATE_DIR`, `CURLFTP_CREATE_DIR_NONE`, `CURLFTP_CREATE_DIR_RETRY`, `CURLHEADER_SEPARATE`, `CURLHEADER_UNIFIED`, `CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE`, `CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE`, `CURLMOPT_MAX_HOST_CONNECTIONS`, `CURLMOPT_MAX_PIPELINE_LENGTH`, `CURLMOPT_MAX_TOTAL_CONNECTIONS`, `CURLOPT_CONNECT_TO`, `CURLOPT_DEFAULT_PROTOCOL`, `CURLOPT_DNS_INTERFACE`, `CURLOPT_DNS_LOCAL_IP4`, `CURLOPT_DNS_LOCAL_IP6`, `CURLOPT_EXPECT_100_TIMEOUT_MS`, `CURLOPT_HEADEROPT`, `CURLOPT_LOGIN_OPTIONS`, `CURLOPT_PATH_AS_IS`, `CURLOPT_PINNEDPUBLICKEY`, `CURLOPT_PIPEWAIT`, `CURLOPT_PROXY_SERVICE_NAME`, `CURLOPT_PROXYHEADER`, `CURLOPT_SASL_IR`, `CURLOPT_SERVICE_NAME`, `CURLOPT_SSL_ENABLE_ALPN`, `CURLOPT_SSL_ENABLE_NPN`, `CURLOPT_SSL_FALSESTART`, `CURLOPT_SSL_VERIFYSTATUS`, `CURLOPT_STREAM_WEIGHT`, `CURLOPT_TCP_FASTOPEN`, `CURLOPT_TFTP_NO_OPTIONS`, `CURLOPT_UNIX_SOCKET_PATH`, `CURLOPT_XOAUTH2_BEARER`, `CURLPROTO_SMB`, `CURLPROTO_SMBS`, `CURLPROXY_HTTP_1_0`, `CURLSSH_AUTH_AGENT`, `CURLSSLOPT_NO_REVOKE` が追加されました。
5.6.0 | `CURLOPT_SAFE_UPLOAD` のデフォルトが `TRUE` になりました。
5.6.0 | `CURLOPT_CLOSEPOLICY` およびそれに関連する値が削除されました。
5.5.0 | cURL リソースを、 `CURLOPT_PROGRESSFUNCTION` コールバックの最初の引数として渡すようになりました。
5.5.0 | `CURLOPT_SHARE` が追加されました。
5.3.0 | `CURLOPT_PROGRESSFUNCTION` が追加されました。
5.2.10 | `CURLOPT_PROTOCOLS` および `CURLOPT_REDIR_PROTOCOLS` が追加されました。
5.2.4 | `CURLOPT_PRIVATE` が追加されました。
5.1.0 | `CURLOPT_AUTOREFERER`, `CURLOPT_BINARYTRANSFER`, `CURLOPT_FTPSSLAUTH`, `CURLOPT_PROXYAUTH` および `CURLOPT_TIMECONDITION` が追加されました。
5.0.0 | `CURLOPT_FTP_USE_EPRT`, `CURLOPT_NOSIGNAL`, `CURLOPT_UNRESTRICTED_AUTH`, `CURLOPT_BUFFERSIZE`, `CURLOPT_HTTPAUTH`, `CURLOPT_PROXYPORT`, `CURLOPT_PROXYTYPE`, `CURLOPT_SSLCERTTYPE` および `CURLOPT_HTTP200ALIASES` が追加されました。

### 例

例1 新規に cURL セッションを初期化、ウェブページを取得する

`<?php
// 新しい cURL リソースを作成します
$ch = curl_init();
// URL その他のオプションを適切に設定します
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, false);
// URL の内容を取得し、ブラウザに渡します
curl_exec($ch);
// cURL リソースを閉じ、システムリソースを開放します
curl_close($ch);
?>`

例2 ファイルのアップロード (PHP 5.5.0 以降では非推奨)

`<?php
/* http://localhost/upload.php:
print_r($_POST);
print_r($_FILES);
*/
$ch = curl_init();
$data = array('name' => 'Foo', 'file' => '@/home/user/test.png');
curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); // PHP 5.6.0 以降ではこれが必要です
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);
?>`

上の例の出力は以下となります。

    Array
    (
        [name] => Foo
    )
    Array
    (
        [file] => Array
            (
                [name] => test.png
                [type] => image/png
                [tmp_name] => /tmp/phpcpjNeQ
                [error] => 0
                [size] => 279
            )

    )

### 注意

> 注意:

> 配列を `CURLOPT_POSTFIELDS` に渡すと、データを multipart/form-data でエンコードします。 一方 URL エンコードされた文字列を渡すと、データを application/x-www-form-urlencoded でエンコードします。

### 参考

- curl_setopt_array() - CURL 転送用の複数のオプションを設定する