English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP Основы

Давай учиться PHP

PHP & MySQL

PHP Референтное руководство

Пример использования и руководство по curl_setopt() функции PHP

PHP CURL справочник

(PHP 4 >= 4.0.2, PHP 5)

curl_setopt — устанавливает опцию передачи CURL.

Грамматика

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

устанавливает опцию для заданного дескриптора сеанса CURL.

параметр

ch

CURL-дескриптор, возвращаемый curl_init().

option

необходимые опции CURLOPT_XXX.

значение

устанавливается значение, заданное в option.

Для следующих параметров option, значение должно быть установлено в виде bool-типа:

ОпцияОпциональнозначениезначениеПримечание
CURLOPT_AUTOREFERERпри соответствииLocation:при перенаправлении автоматически устанавливается header сReferer:информация.
CURLOPT_BINARYTRANSFERПри включенииCURLOPT_RETURNTRANSFERвозвращается исходный (сырой) вывод.
CURLOPT_COOKIESESSIONПри включении curl будет передавать только один сеансовый cookie, игнорируя другие cookies, по умолчанию CURL будет возвращать все cookies серверу. Сеансовый cookie - это cookies, которые существуют для того, чтобы�断ить, является ли сеанс сервера действительным.
CURLOPT_CRLFПри включении Unix-символы перевода строки будут преобразованы в символы carriage return и newline.
CURLOPT_DNS_USE_GLOBAL_CACHEПри включении будет включен глобальный кэш DNS, это безопасно для потоков, и по умолчанию включено.
CURLOPT_FAILONERRORОтображает HTTP-статус код, по умолчанию игнорируется информация с кодом HTTP до 400.
CURLOPT_FILETIMEПри включении будет пытаться изменить информацию в удаленном документе. Результаты информации будут передаваться через функцию curl_getinfo().CURLINFO_FILETIMEопция.            curl_getinfo().
CURLOPT_FOLLOWLOCATIONПри включении будет передаваться информация, возвращенная сервером"Location: "Возвращается рекурсивно в заголовке, используетсяCURLOPT_MAXREDIRSМожет ограничивать количество возвращаемых рекурсивно.
CURLOPT_FORBID_REUSEПосле завершения взаимодействия соединение будет принудительно разорвано, его нельзя будет использовать повторно.
CURLOPT_FRESH_CONNECTПринудительно получить новый соединение, вместо использования сохраненного соединения.
CURLOPT_FTP_USE_EPRTПри включении, при загрузке FTP, используется команда EPRT (или LPRT). Установлено вFALSEПри включении EPRT и LPRT будут отключены, используется команда PORT            только.
CURLOPT_FTP_USE_EPSVПри включении, перед тем как перейти к режиму PASV в процессе передачи FTP, сначала будет尝试 команду EPSV. Установлено вFALSEКоманда EPSV будет отключена.
CURLOPT_FTPAPPENDПри включении данные будут добавлены к файлу,而不是 заменять его.
CURLOPT_FTPASCIICURLOPT_TRANSFERTEXTАльтернативное имя.
CURLOPT_FTPLISTONLYПри включении будут отображены только имена каталогов FTP.
CURLOPT_HEADERПри включении информация из заголовочных файлов будет выведена в виде потока данных.
CURLINFO_HEADER_OUTПри включении отслеживается строка запроса хендлера.Доступно с PHP 5.1.3.CURLINFO_Префикс намеренно(intentional).
CURLOPT_HTTPGETПри включении метод HTTP будет установлен в GET, так как GET по умолчанию, поэтому используется только в случае изменения.
CURLOPT_HTTPPROXYTUNNELПри включении данные будут передаваться через HTTP-прокси.
CURLOPT_MUTEПри включении все измененные параметры функции CURL будут восстановлены в значения по умолчанию.
CURLOPT_NETRCПосле установления соединения, чтобы получить информацию о имени пользователя и пароле, доступ к файлу ~/.netrc для подключения к удаленному серверу.
CURLOPT_NOBODYПри включении не выводится часть BODY в HTML.
CURLOPT_NOPROGRESS

При включении отключает прогресс-бар передачи curl, по умолчанию это включено.

Заметка:

PHP автоматически устанавливает этот параметр вTRUE, этот параметр должен изменяться только для целей отладки.


CURLOPT_NOSIGNALПри включении игнорирует все сигналы, передаваемые curl php. В SAPI многопоточных передачах此项 по умолчанию включено.включен в CURL 7.10.
CURLOPT_POSTПри включении отправляет обычный POST-запрос, тип:application/x-www-form-urlencodedтакже, как и при отправке формы.
CURLOPT_PUTПри включении позволяет отправлять файлы через HTTP, необходимо также установитьCURLOPT_INFILEи(принудительно использовать HTTP/1.0) или.
CURLOPT_RETURNTRANSFERчтобы вернуть информацию, полученную с помощью curl_exec(), в виде потока файла, а не напрямую.
CURLOPT_SSL_VERIFYPEERПри отключении CURL прекращает проверку на стороне сервера. ИспользуйтеCURLOPT_CAINFOопция устанавливает использование сертификатовCURLOPT_CAPATHопция устанавливает каталог сертификатов            еслиCURLOPT_SSL_VERIFYPEER(по умолчанию 2) включен,CURLOPT_SSL_VERIFYHOSTнеобходимо установитьTRUEв противном случае установитеFALSE.С версии CURL 7.10 по умолчанию установлено вTRUE. С версии CURL 7.10 по умолчанию устанавливается.
CURLOPT_TRANSFERTEXTПри включении использует ASCII-режим для FTP-транзакций. Для LDAP он检索纯 текстовую информацию, а не HTML. В Windows-системах система не будетSTDOUTустановите в режим binary.
CURLOPT_UNRESTRICTED_AUTHПри использованииCURLOPT_FOLLOWLOCATIONПостоянно добавляет информацию о пользователе и пароле в несколько locations в заголовках, даже если домен изменился.
CURLOPT_UPLOADПри включении позволяет загружать файлы.
CURLOPT_VERBOSEПри включении предоставляет все сообщения, хранящиеся вSTDERRили указанногоCURLOPT_STDERR.

Для следующих опциональных параметров option, значение value должно быть установлено в тип integer:

ОпцияОпциональнозначениезначениеПримечание
CURLOPT_BUFFERSIZEРазмер кэша, который читается из данных, полученных за один раз, но не гарантируется, что этот размер будет заполнен каждый раз.Добавлен в CURL 7.10.
CURLOPT_CLOSEPOLICYНе CURLCLOSEPOLICY_LEAST_RECENTLY_USED, а CURLCLOSEPOLICY_OLDEST, также существуют еще три CURLCLOSEPOLICY, но CURL пока не поддерживает их.
CURLOPT_CONNECTTIMEOUTВремя ожидания перед установлением соединения, если установлено в 0, то ожидание бесконечно.
CURLOPT_CONNECTTIMEOUT_MS尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。在CURL 7.16.2中被加入。从PHP 5.2.3开始可用。
CURLOPT_DNS_CACHE_TIMEOUTвремя ожидания подключения в миллисекундах. Если установлено значение 0, ожидание будет неограниченным.
CURLOPT_FTPSSLAUTHбыл добавлен в CURL 7.16.2. Доступен с PHP 5.2.3.CURLOPT_DNS_CACHE_TIMEOUT устанавливает время хранения информации DNS в памяти, по умолчанию 120 секунд.Способы проверки FTP: CURLFTPAUTH_SSL(сначала попробуйте SSL), CURLFTPAUTH_TLS(сначала попробуйте TLS) или
CURLFTPAUTH_DEFAULT(позволяет CURL автоматически определять). был добавлен в CURL 7.12.2.CURLOPT_HTTP_VERSION CURL_HTTP_VERSION_NONE(по умолчанию, позволяет CURL самостоятельно определять используемую версию), CURL_HTTP_VERSION_1_0
(принудительно использовать HTTP/1.0) илиCURL_HTTP_VERSION_1_1
CURLOPT_INFILESIZE(принудительно использовать HTTP/1.1).CURLOPT_INFILESIZEограничивает размер загружаемого файла, измеряемый в байтах (byte).CURLOPT_LOW_SPEED_TIMEвремя (bytes/sec), PHP будет определять
CURLOPT_LOW_SPEED_TIME(принудительно использовать HTTP/1.1).CURLOPT_INFILESIZEограничивает размер загружаемого файла, измеряемый в байтах (byte).CURLOPT_LOW_SPEED_TIMEвремя (bytes/sec), PHP будет определять
CURLOPT_MAXCONNECTSмаксимальное количество разрешенных подключений, при превышении которого будет определяться, отменяется ли передача данных из-за медленной скорости.CURLOPT_CLOSEPOLICYопределяет, какие подключения должны быть прекращены.
CURLOPT_MAXREDIRSопределяет максимальное количество HTTP-переадресаций, этот параметр связан сCURLOPT_FOLLOWLOCATIONвместе.
CURLOPT_PORTиспользуется для указания порта подключения. (Опционально)
CURLOPT_PROTOCOLSCURLPROTO_*битового поля указывает. Если включено, значение битового поля ограничивает, какие протоколы могут быть использованы 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_PROTOCOLSCURLPROTO_*битового поля указывает. Если включено, значение битового поля ограничивает, какие протоколы могут быть использованы 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_SOCKS5.Добавлен в CURL 7.10.
CURLOPT_REDIR_PROTOCOLSCURLPROTO_*битовые значения поля. Если включен, битовые значения будут ограничивать передачу потока вCURLOPT_FOLLOWLOCATIONИспользуемые протоколы при следовании за редиректами. Это позволяет ограничить использование протоколов subsets при следовании за редиректами по умолчанию libcurl позволяет использовать все протоколы, кроме FILE и SCP. Это отличается от无条件ного следования за всеми поддерживаемыми протоколами в предварительном релизе 7.19.4. О протоколах см.CURLOPT_PROTOCOLS.добавлен в CURL 7.19.4.
CURLOPT_RESUME_FROMПереносить байтовой смещение при восстановлении передачи (для продолжения загрузки с разрыва).
CURLOPT_SSL_VERIFYHOST1 Проверяет是否存在 общее имя (common name) в сертификате SSL сервера. Примечание переводчика: Общее имя (Common Name) обычно это имя домена (domain) или поддомена (sub domain), которое вы планируете зарегистрировать SSL сертификат. 2 Проверяет, существует ли общее имя и соответствует ли оно предоставленному имени хоста.
CURLOPT_SSLVERSIONверсия SSL (2 или 3). По умолчанию PHP автоматически определяет это значение, хотя в некоторых случаях может потребоваться ручная настройка.
CURLOPT_TIMECONDITIONЕсли используетсяCURLOPT_TIMEVALUEесли была изменена после указанного времени, то используетсяCURL_TIMECOND_IFMODSINCEвозвращает страницу, если она не была изменена, иCURLOPT_HEADERесли true, то возвращает"304 Not Modified"заголовок    CURLOPT_HEADERесли false, то используетсяCURL_TIMECOND_IFUNMODSINCEпо умолчанию равноCURL_TIMECOND_IFUNMODSINCE.
CURLOPT_TIMEOUTУстановить максимальное количество секунд, которое может выполняться CURL.
CURLOPT_TIMEOUT_MSУстановить максимальное количество миллисекунд, которое может выполняться CURL.добавлен в CURL 7.16.2. С PHP 5.2.3 доступен.
CURLOPT_TIMEVALUEустановитьCURLOPT_TIMECONDITIONВремя戳, используемое по умолчанию, этоCURL_TIMECOND_IFMODSINCE.

Для этих опций параметр value должен быть установлено значение типа string:

ОпцияОпциональнозначениезначениеПримечание
CURLOPT_CAINFOфайл, содержащий 1 или несколько сертификатов, которые будут использоваться для проверки сервера. Этот параметр действует только при использовании сCURLOPT_SSL_VERIFYPEER.
CURLOPT_CAPATHкаталог, содержащий несколько CA-сертификатов. Этот параметр имеет смысл только при использовании сCURLOPT_SSL_VERIFYPEERвместе.
CURLOPT_COOKIEустановить в HTTP-запросе"Cookie: "часть содержимого. Множественные cookie разделены точкой с запятой, после которой идет пробел (например, "fruit=apple; colour=red).
CURLOPT_COOKIEFILEимя файла, содержащего данные cookie, формат файла cookie может быть форматом Netscape или просто информацию HTTP-заголовка записать в файл.
CURLOPT_COOKIEJARфайл для сохранения информации cookie после завершения подключения.
CURLOPT_CUSTOMREQUEST

использования пользовательской информации запроса вместо"GET"или"HEAD"в качестве HTTP-запроса. Это необходимо для выполнения"DELETE" или другие более скрытые HTTP-запросы. Validные значения, такие как"GET","POST","CONNECT"и т.д. То есть, не вводите полный HTTP-запрос здесь. Например, вводите"GET /index.html HTTP/1.0\r\n\r\n"неправильный.

Заметка:

не используйте его, пока не确定 сервер поддерживает этот пользовательский метод запроса.


CURLOPT_EGDSOCKETтипаCURLOPT_RANDOM_FILE, кроме сокета Entropy Gathering Daemon.
CURLOPT_ENCODINGв заголовке HTTP-запроса"Accept-Encoding: "значение. Поддерживаемые кодирования включают"identity","deflate"и"gzip". Если это пустая строка""заголовки будут отправлены все поддерживаемые типы кодирования.Добавлен в CURL 7.10.
CURLOPT_FTPPORTЭта стоимость будет использоваться для получения IP-адреса, необходимого для команды "POST" FTP. Команда "POST" информирует удаленный сервер о подключении к указанному нами IP-адресу. Эта строка может быть纯 текстовым IP-адресом, именем хоста, именем сетевого интерфейса (в UNIX) или просто "-", чтобы использовать défaut IP-адрес по умолчанию.
CURLOPT_INTERFACEимя интерфейса для отправки в сеть, может быть именем интерфейса, IP-адресом или именем хоста.
CURLOPT_KRB4LEVELУровень безопасности KRB4 (Kerberos 4). Любое из следующих значений является допустимым (в порядке от низкого к высокому):"clear","safe","confidential","private".. Если строка не совпадает с этими значениями, будет использоваться"private". Этот параметр установлен вNULLбудет отключен KRB4 безопасный认证. В настоящее время KRB4 безопасный认证 может использоваться только для передачи FTP.
CURLOPT_POSTFIELDSВсе данные отправляются с помощью операции "POST" в протоколе HTTP. Чтобы отправить файл, добавьте перед именем файла@префикс и использование полного пути. Этот параметр можно передать в виде строки, закодированной в URL, напримерpara1=val1¶2=val2&...или использование массива, где ключом является имя поля, а значением является данные поля. Еслизначениеявляется массивом,Content-Typeзаголовок будет установлен какmultipart/form-data.
CURLOPT_PROXYHTTP-канал прокси.
CURLOPT_PROXYUSERPWDИспользование для подключения к прокси-серверу"[username]:[password]"строки в формате.
CURLOPT_RANDOM_FILEимя файла, используемого для генерации случайных чисел для SSL.
CURLOPT_RANGEс"X-Y"в виде, где X и Y являются опциональными, это диапазон данных для получения, измеряемый в байтах. HTTP-тред также поддерживает несколько таких повторяющихся элементов, разделенных запятыми, как"X-Y,N-M".
CURLOPT_REFERERв заголовке HTTP-запроса"Referer: "содержимого.
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私钥的加密引擎变量。
Переменная для криптографического двигателя SSL частного ключа, указанного вCURLOPT_SSLENGINE_DEFAULT
CURLOPT_SSLKEYПеременная для асимметричной криптографической операции.
Имя файла, содержащего SSL частный ключ.

CURLOPT_SSLKEYPASSWDCURLOPT_SSLKEYПароль SSL частного ключа, указанного в

Заметка:

Поскольку этот параметр содержит конфиденциальную информацию о пароле, помните о безопасности PHP скрипта.


CURLOPT_SSLKEYTYPECURLOPT_SSLKEYТип шифрования私анного ключа, указанного в"PEM"(по умолчанию),"DER"и"ENG".
CURLOPT_URLАдрес URL, который нужно получить, также можно установить в функции curl_init().
CURLOPT_USERAGENTВключите в HTTP запрос:"User-Agent: "Строка заголовка.
CURLOPT_USERPWDПередайте имя пользователя и пароль, необходимые для подключения, в следующем формате:"[username]:[password]".

Для параметров опций, связанных с option, значение value должно быть установлено в массив:

ОпцияОпциональнозначениезначениеПримечание
CURLOPT_HTTP200ALIASESМассив кодов ответа 200, где коды в массиве считаются правильными ответами, все остальные считаются неправильными.Добавлен в CURL 7.10.3.
CURLOPT_HTTPHEADERМассив для установки HTTP заголовков. Установите массив в следующем формате:                       array('Content-type: text/plain', 'Content-length: 100')
CURLOPT_POSTQUOTEГруппа команд FTP, выполняемых на сервере после выполнения запроса FTP.
CURLOPT_QUOTEГруппа команд FTP, выполняемых на сервере до запроса FTP.

Для параметров опций, связанных с option, значение value должно быть установлено в потоковый ресурс (например, используя fopen()):

ОпцияОпциональнозначениезначение
CURLOPT_FILEУстановите положение файла вывода, значение является типом ресурса, по умолчанию это:STDOUT (браузер).
CURLOPT_INFILEАдрес файла, который необходимо читать при загрузке файла, значение является типом ресурса.
CURLOPT_STDERRУстановите адрес ошибки для вывода, значение является типом ресурса, заменяя defaultManager.STDERR.
CURLOPT_WRITEHEADERУстановите адрес файла для записи содержимого заголовка, значение является типом ресурса.

Для параметров опций, связанных с option, значение value должно быть установлено в имя回调 функции:

ОпцияОпциональнозначениезначение
CURLOPT_HEADERFUNCTIONУстановить callback функцию, которая принимает два параметра, первый из которых - ресурс CURL, второй - данные заголовка, которые необходимо вывести. Вывод данных заголовка зависит от этой функции, возвращает размер данных, уже введенных.
CURLOPT_PASSWDFUNCTIONУстановить callback функцию, которая принимает три параметра, первый из которых - ресурс CURL, второй - запрос на пароль, третий параметр - максимальная длина пароля, которую можно ввести. Возвращает значение пароля.
CURLOPT_PROGRESSFUNCTIONУстановить回调 функцию, которая принимает три параметра, первый из которых - дескриптор ресурса CURL, второй - файловый ресурс, третий - длина. Возвращает данные.
CURLOPT_READFUNCTIONИмя回调 функции. Эта функция должна принимать три параметра. Первый - ресурс CURL; второй - данные, переданные через опции CURLOPT_INFILE Поток ресурса, переданного CURL; третий параметр - максимальное количество данных, которое можно прочитать. Возврат Функция вызова должна возвращать строку, длина которой не превышает количество запрашиваемых данных (третий параметр). Обычно данные берутся из传入ного потока Чтение ресурса. Возвращает пустую строку в качестве EOFСигнал (конец файла).
CURLOPT_WRITEFUNCTIONИмя回调 функции. Эта функция должна принимать два параметра. Первый - ресурс CURL; второй - строка данных для записи. Данные должны быть сохранены в функции. Функция должна возвращать точное количество байтов, переданных для записи, в противном случае передача будет прервана ошибкой. Прерывание.

Возвратное значение

Возвращает TRUE при успешном выполнении или FALSE при ошибке.

Журнал обновлений

ВерсияОбъяснение
5.2.10Введение CURLOPT_PROTOCOLS, иCURLOPT_REDIR_PROTOCOLS.
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.

Онлайн пример

Инициализировать новую сессию CURL и получить веб-страницу

<?php
//Создать новый ресурс CURL
$ch = curl_init();
//Установить URL и соответствующие параметры
curl_setopt($ch, CURLOPT_URL, "http://ru.oldtoolbag.com/");
curl_setopt($ch, CURLOPT_HEADER, false);
//Получить URL и передать его браузеру
curl_exec($ch);
//Закрыть ресурс CURL и освободить системные ресурсы
curl_close($ch);
?>

Пример загрузки файла:

<?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_POSTFIELDS, $data);
curl_exec($ch);
?>

Результат примера вывода следующий:

Массив
(
    [name] => Foo
)
Массив
(
    [file] => Массив
        (
            [name] => test.png
            [type] => image/png
            [tmp_name] => /tmp/phpcpjNeQ
            [error] => 0
            [size] => 279
        )
)

Комментарий

Передайте массив в CURLOPT_POSTFIELDS, и CURL закодирует данные в multipart/form-data, в противном случае, если передается URL-кодированная строка, данные будут закодированы в application/x-www-form-urlencoded.

PHP CURL справочник