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

Tutoriel PHP de base

Tutoriel PHP avancé

PHP & MySQL

Manuel de référence PHP

Utilisation et exemple de la fonction PHP curl_setopt()

PHP CURL参考手册

(PHP 4 >= 4.0.2, PHP 5)

curl_setopt — Définir une option de transfert CURL.

Syntaxe

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

Définir une option pour le gestionnaire de session CURL donné.

Paramètre

ch

Le gestionnaire CURL retourné par curl_init().

option

Les options CURLOPT_XXX à configurer.

value

Définir la valeur sur l'option option.

Pour les paramètres optionnels des options suivantes, la valeur doit être définie comme une valeur de type booléen :

OptionOptionalvalueValueRemarque
CURLOPT_AUTOREFERERLorsque selonLocation:Lorsqu'il y a un redirection, le header est automatiquement configuré avecReferer:Informations.
CURLOPT_BINARYTRANSFERLorsqu'il est activéCURLOPT_RETURNTRANSFERLorsqu'il est activé, il retourne la sortie brute (Raw).
CURLOPT_COOKIESESSIONLorsqu'elle est activée, curl transmetra uniquement un cookie de session, ignorera les autres cookies. Par défaut, CURL retournera tous les cookies au serveur. Le cookie de session est un cookie utilisé pour déterminer si le cookie de session du serveur est valide.
CURLOPT_CRLFLorsqu'elle est activée, le saut de ligne Unix est converti en retour chariot saut de ligne.
CURLOPT_DNS_USE_GLOBAL_CACHELorsqu'elle est activée, une cache DNS globale est activée, cette option est sécurisée pour le thread, et activée par défaut.
CURLOPT_FAILONERRORAfficher le code d'état HTTP, le comportement par défaut est d'ignorer le numéro inférieur ou égal à400 des informations HTTP.
CURLOPT_FILETIMELorsqu'elle est activée, elle tentera de modifier les informations du document distant. Les informations de résultat seront transmises par la fonctionCURLINFO_FILETIMEOption retour.            curl_getinfo().
CURLOPT_FOLLOWLOCATIONLorsqu'elle est activée, elle affichera les informations retournées par le serveur serveur"Location: "Retourner recursivement dans l'entête au serveur, utiliserCURLOPT_MAXREDIRSIl est possible de limiter le nombre de retours récursifs.
CURLOPT_FORBID_REUSEForcer à couper le lien après l'interaction terminée, ne pas réutiliser.
CURLOPT_FRESH_CONNECTForcer à obtenir une nouvelle connexion pour remplacer la connexion en cache.
CURLOPT_FTP_USE_EPRTLorsqu'elle est activée, l'utilisation de la commande EPRT (ou LPRT) est recommandée lors du téléchargement FTP. Réglé surFALSELorsqu'elle est désactivée, EPRT et LPRT sont utilisés au lieu de PORT.            uniquement.
CURLOPT_FTP_USE_EPSVLorsque l'option est activée, avant de répondre au mode PASV pendant le transfert FTP, il essaie d'abord la commande EPSV. Réglé surFALSEDésactiver la commande EPSV.
CURLOPT_FTPAPPENDLorsqu'il est activé, il ajoutera à la fin du fichier au lieu de le remplacer.
CURLOPT_FTPASCIICURLOPT_TRANSFERTEXTest un alias.
CURLOPT_FTPLISTONLYLorsqu'il est activé, il ne listera que les noms des répertoires FTP.
CURLOPT_HEADERLorsqu'il est activé, il sortira les informations des en-têtes comme un flux de données.
CURLINFO_HEADER_OUTLorsqu'il est activé, il suivra la chaîne de requête du gestionnaire.De PHP 5.1.3 Temps d'attente pour essayer de se connecter, en millisecondes. Si réglé à 0, attendre indéfiniment.CURLINFO_Le préfixe est intentionnel.
CURLOPT_HTTPGETLorsqu'il est activé, il définira le méthode HTTP sur GET, car GET est par défaut, donc il ne sera utilisé que lorsque cela est modifié.
CURLOPT_HTTPPROXYTUNNELLorsqu'il est activé, il transmettra via le proxy HTTP.
CURLOPT_MUTELorsqu'il est activé, il restaurera tous les paramètres modifiés dans les fonctions CURL aux valeurs par défaut.
CURLOPT_NETRCAprès avoir établi la connexion, accédez à ~/Pour obtenir les informations de nom d'utilisateur et de mot de passe à partir du fichier .netrc et se connecter au site distant.
CURLOPT_NOBODYLorsqu'il est activé, il n'outputtra pas la partie BODY de l'HTML.
CURLOPT_NOPROGRESS

Lorsqu'il est activé, il ferme la barre de progression du transfert curl, cette option est activée par défaut.

Note:

PHP configure automatiquement cette option àTRUE, cette option ne devrait être modifiée que dans le but du débogage.


CURLOPT_NOSIGNALLorsqu'il est activé, il ignore tous les signaux passés à php par curl. Dans le transfert multi-threadé SAPI, cette option est activée par défaut.CURL 7.10est ajouté.
CURLOPT_POSTLorsqu'il est activé, il enverra une requête POST standard, du type :application/x-www-form-urlencoded, comme lors d'une soumission de formulaire.
CURLOPT_PUTLorsqu'il est activé, cela permet à HTTP d'envoyer des fichiers, il doit être configuré en même tempsCURLOPT_INFILEet)。.
CURLOPT_RETURNTRANSFERRetourne les informations obtenues par curl_exec() sous forme de flux de fichier, plutôt que de les afficher directement.
CURLOPT_SSL_VERIFYPEERDésactiver après cela, CURL arrêtera la vérification à partir du serveur. UtiliserCURLOPT_CAINFOOption de configuration de l'utilisation du certificatCURLOPT_CAPATHOption de configuration du répertoire de certificat            SiCURLOPT_SSL_VERIFYPEER(par défaut)2) sera activé,CURLOPT_SSL_VERIFYHOSTDoit être réglé surTRUESinon, il est réglé surFALSE.Depuis CURL 7.10Par défaut à partir deTRUE. À partir de CURL 7.10Commencer l'installation par défaut du bind.
CURLOPT_TRANSFERTEXTActiver le mode ASCII pour le transfert FTP. Pour LDAP, il recherche des informations en texte brut plutôt qu'en HTML. Sur les systèmes Windows, le système ne mettra pasSTDOUT设置成binary模式。
CURLOPT_UNRESTRICTED_AUTHMettre en mode binaire.CURLOPT_FOLLOWLOCATIONEn utilisant
Ajoute en continu des informations d'identification utilisateur et de mot de passe dans plusieurs emplacements de l'en-tête généré, même si le domaine a changé.CURLOPT_UPLOAD
Permet le téléversement de fichiers après activation.CURLOPT_VERBOSESTDERRActivera le rapport de toutes les informations, stockées dansCURLOPT_STDERROu spécifié

en.

OptionOptionalvalueValueRemarque
CURLOPT_BUFFERSIZEPour les options suivantes, la valeur de value doit être définie sur un entier de type integer :Dans CURL 7.10est ajouté.
CURLOPT_CLOSEPOLICYDans chaque lot de données récupéré, la taille lue dans le cache, mais cette valeur n'est pas garantie d'être remplie à chaque fois.
Ce n'est pas CURLCLOSEPOLICY_LEAST_RECENTLY_USED ni CURLCLOSEPOLICY_OLDEST, il existe également d'autres CURLCLOSEPOLICY, mais CURL ne les prend pas en charge temporairement.CURLOPT_CONNECTTIMEOUT
Temps d'attente avant de commencer la connexion, si réglé à 0, attendre indéfiniment.CURLOPT_CONNECTTIMEOUT_MSDans CURL 7.16.2était ajouté. 5.2.3Temps d'attente pour essayer de se connecter, en millisecondes. Si réglé à 0, attendre indéfiniment.
Disponible à partir de maintenant.CURLOPT_DNS_CACHE_TIMEOUT12Réglage du temps de conservation des informations DNS en mémoire, la valeur par défaut est
CURLOPT_FTPSSLAUTH0 secondes.Méthode de validation FTP : CURLFTPAUTH_SSL(Essayez d'abord SSL), CURLFTPAUTH_TLS(Essayez d'abord TLS) ou CURLFTPAUTH_DEFAULTDans CURL 7.12.2est ajouté.
(Laisser CURL décider automatiquement).CURLOPT_HTTP_VERSION CURL_HTTP_VERSION_NONE.0) ou1(Valeur par défaut, laissez CURL décider de la version à utiliser), _/1_0.0) ou1CURL_HTTP_VERSION_1 _/1.1(Utiliser强制HTTP
)。CURLOPT_INFILESIZE
Lorsque la vitesse de transfert est inférieure àDéfinir la taille maximale du fichier téléversé en unité de byte.Lorsque la vitesse de transfert est inférieure àCURLOPT_LOW_SPEED_LIMIT/bytessec),PHP utilisepour décider s'il faut annuler le transfert en raison de la lenteur excessive.
sec),PHP utiliseDéfinir la taille maximale du fichier téléversé en unité de byte.Lorsque la vitesse de transfert est inférieure àCURLOPT_LOW_SPEED_LIMIT/bytessec),PHP utilisepour décider s'il faut annuler le transfert en raison de la lenteur excessive.
CURLOPT_MAXCONNECTSNombre maximum de connexions autorisées, au-delà de cela, il est déterminé parCURLOPT_CLOSEPOLICYDétermine les connexions qui doivent être arrêtées.
CURLOPT_MAXREDIRSSpécifie le nombre maximum de redirections HTTP, cette option est liée àCURLOPT_FOLLOWLOCATIONutilisés ensemble.
CURLOPT_PORTUtilisé pour spécifier le port de connexion. (Optionnel)
CURLOPT_PROTOCOLSCURLPROTO_*des valeurs de bits. Si activé, la valeur de bit limitera les protocoles utilisables par libcurl pendant le transfert. Cela vous permettra de prendre en charge de nombreux protocoles lors de la compilation de libcurl, mais limitera à un sous-ensemble des protocoles autorisés. Par défaut, libcurl utilisera tous les protocoles qu'il prend en charge. VoirCURLOPT_REDIR_PROTOCOLS. Les options de protocole disponibles sont : 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_ALLDans CURL 7.19.4est ajouté.
CURLOPT_PROTOCOLSCURLPROTO_*des valeurs de bits. Si activé, la valeur de bit limitera les protocoles utilisables par libcurl pendant le transfert. Cela vous permettra de prendre en charge de nombreux protocoles lors de la compilation de libcurl, mais limitera à un sous-ensemble des protocoles autorisés. Par défaut, libcurl utilisera tous les protocoles qu'il prend en charge. VoirCURLOPT_REDIR_PROTOCOLS. Les options de protocole disponibles sont : 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_ALLDans CURL 7.19.4est ajouté.
CURLOPT_PROXYAUTHle mode de validation des connexions proxy HTTP. Il est utilisé dansCURLOPT_HTTPAUTHdes drapeaux de bits pour configurer les options correspondantes. Pour l'authentification proxy, il n'y a queCURLAUTH_BASICetCURLAUTH_NTLMactuellement pris en charge.Dans CURL 7.10.7est ajouté.
CURLOPT_PROXYPORTle port du serveur proxy. Le port peut également être configuré dansCURLOPT_PROXYdans lequel il est configuré.
CURLOPT_PROXYTYPEn'est pasCURLPROXY_HTTP (valeur par défaut) estCURLPROXY_SOCKS5.Dans CURL 7.10est ajouté.
CURLOPT_REDIR_PROTOCOLSCURLPROTO_*des valeurs de bits. Si activé, la valeur de bit restreindra les threads de transfert àCURLOPT_FOLLOWLOCATIONLes protocoles utilisables lors de l'activation d'un suivi de redirection. Cela vous permettra de limiter les sous-ensembles de protocoles autorisés lors de la redirection. Par défaut, libcurl autorisera tous les protocoles sauf FILE et SCP. Cela et7.19.4Les versions prépubliées suivent sans condition tous les protocoles pris en charge, avec quelques différences. Pour les constantes de protocole, veuillez vous référer àCURLOPT_PROTOCOLS.Dans CURL 7.19.4est ajouté.
CURLOPT_RESUME_FROMtransmet une quantité d'octets décalée (utilisé pour la reprise de téléchargement).
CURLOPT_SSL_VERIFYHOST1 vérifie si le certificat SSL du serveur contient un nom commun (common name).2 vérifie si le nom commun existe et s'il correspond au nom d'hôte fourni. Note de traduction : Le nom commun (Common Name) est généralement le domaine (domain) ou le sous-domaine (sub domain) pour lequel vous allez demander un certificat SSL.
CURLOPT_SSLVERSIONla version SSL utilisée (2 ou 3) par défaut, PHP détecte cette valeur par lui-même, bien que dans certains cas, il soit nécessaire de la configurer manuellement.
CURLOPT_TIMECONDITIONsi elle estCURLOPT_TIMEVALUEelle a été modifiée après une certaine date spécifiée, alors utilisezCURL_TIMECOND_IFMODSINCEpage de retour, si elle n'a pas été modifiée et queCURLOPT_HEADERsi elle est à true, alors elle renvoie une"304 Not Modified"de l'en-tête    CURLOPT_HEADERsi false, utiliseCURL_TIMECOND_IFUNMODSINCEla valeur par défaut estCURL_TIMECOND_IFUNMODSINCE.
CURLOPT_TIMEOUTdéfinit le nombre maximal de secondes que CURL peut exécuter.
CURLOPT_TIMEOUT_MSdéfinit le nombre maximal de millisecondes que CURL peut exécuter.Dans CURL 7.16.2était ajouté. 5.2.3peut être utilisé depuis
CURLOPT_TIMEVALUEdéfinitCURLOPT_TIMECONDITIONl'horodatage utilisé, par défaut, il utiliseCURL_TIMECOND_IFMODSINCE.

Pour les options suivantes, la valeur de value doit être définie comme une chaîne de caractères :

OptionOptionalvalueValueRemarque
CURLOPT_CAINFOun répertoire contenant1un ou plusieurs fichiers utilisés pour valider le serveur. Ce paramètre n'a de sens que siCURLOPT_SSL_VERIFYPEER.
CURLOPT_CAPATHun répertoire contenant plusieurs certificats CA. Cette option n'a de sens qu'avecCURLOPT_SSL_VERIFYPEERutilisés ensemble.
CURLOPT_COOKIEdéfinir dans l'en-tête HTTP"Cookie: "du contenu. Plusieurs cookies sont séparés par des points-virgules, suivi d'un espace (par exemple, "fruit=apple; colour=red)").
CURLOPT_COOKIEFILELe nom du fichier contenant les données de cookie, le format du fichier de cookie peut être le format Netscape ou simplement des informations d'en-tête HTTP stockées dans un fichier.
CURLOPT_COOKIEJARle fichier dans lequel les informations de cookie sont sauvegardées après la fin de la connexion.
CURLOPT_CUSTOMREQUEST

remplacer par une information de demande personnalisée"GET"ou"HEAD"pour exécuter"DELETE" ou d'autres demandes HTTP plus discrètes. Les valeurs valides sont"GET""POST""CONNECT"etc. Cela signifie qu'il ne faut pas saisir l'intégralité de la demande HTTP ici. Par exemple, saisir"GET" /index.html HTTP/1.0\r\n\r\n"est incorrect.

Note:

Ne pas utiliser avant de déterminer que le serveur prend en charge cette méthode de demande personnalisée.


CURLOPT_EGDSOCKETsimilaireCURLOPT_RANDOM_FILEà l'exception d'un socket de démon de collecte d'entropie.
CURLOPT_ENCODINGdans l'en-tête HTTP"Accept"-Encoding: "la valeur. Les codages pris en charge sont"identity"et"deflate""gzip". Si la chaîne est une chaîne vide""Dans CURL 7.10est ajouté.
,Les en-têtes de requête enverront tous les types de codage pris en charge.CURLOPT_FTPPORT-'pour utiliser l'adresse IP par défaut. Cette valeur sera utilisée pour obtenir l'adresse IP nécessaire pour l'instruction "POST" FTP. L'instruction "POST" informe le serveur distant de se connecter à l'adresse IP spécifiée. Cette chaîne peut être une adresse IP texte, un nom d'hôte, un nom d'interface réseau (sous UNIX) ou simplement un'
CURLOPT_INTERFACELe nom de l'interface réseau de transmission, qui peut être un nom d'interface, une adresse IP ou un nom d'hôte.
CURLOPT_KRB4LEVELKRB4 (Kerberos 4) Niveau de sécurité. Toute valeur suivante est valide (par ordre croissant) :"clear""safe""confidential""private".. Si la chaîne ne correspond à aucune de celles-ci, elle utilisera"private". Cette option est définie surNULLLorsque KRB sera désactivé4 L'authentification sécurisée. Actuellement KRB4 L'authentification sécurisée ne peut être utilisée que pour le transfert FTP.
CURLOPT_POSTFIELDSTous les données seront envoyées en utilisant l'opération "POST" du protocole HTTP. Pour envoyer un fichier, ajoutez@préfixé et en utilisant un chemin complet. Ce paramètre peut être similaire à une chaîne après urlencoded'para1=val1¶2=val2&...'ou utiliser un tableau avec le nom du champ comme clé et les données du champ comme valeur. SivalueC'est un tableau,Content-TypeL'entête sera configuré enmultipart/form-data.
CURLOPT_PROXYUn canal HTTP proxy.
CURLOPT_PROXYUSERPWDUn nom utilisé pour se connecter à un proxy."[username]:[password]"d'une chaîne de caractères au format.
CURLOPT_RANDOM_FILEUn nom de fichier utilisé pour générer un grain de numération aléatoire SSL.
CURLOPT_RANGEpar"X-Y"dans le format, où X et Y sont des options facultatives pour obtenir la gamme de données, en octets. Les threads de transmission HTTP supportent également plusieurs éléments répétés, séparés par des virgules, comme"X-Y,N-M".
CURLOPT_REFERERDans l'entête de la requête HTTP"Referer: "du contenu.
CURLOPT_SSL_CIPHER_LISTUne liste d'algorithmes de chiffrement SSL. Par exempleRC4-SHAetTLSv1Toutes les listes de chiffrement sont disponibles.
CURLOPT_SSLCERTUn nom de fichier contenant un certificat PEM.
CURLOPT_SSLCERTPASSWD使用CURLOPT_SSLCERTUtiliser
CURLOPT_SSLCERTTYPECURLOPT_SSLCERT"PEM" Le mot de passe nécessaire pour le certificat. "DER"et"ENG".Dans CURL 7.9.3est ajouté.
Le type de certificat. Les formats pris en charge sontpar défaut),CURLOPT_SSLKEYCURLOPT_SSLENGINE
La variable de moteur de chiffrement du clé privé SSL spécifié dansCURLOPT_SSLENGINE_DEFAULT
CURLOPT_SSLKEYVariable utilisée pour les opérations de chiffrement asymétrique.
Le nom de fichier contenant le clé privé SSL.

CURLOPT_SSLKEYPASSWDCURLOPT_SSLKEYLe mot de passe du clé privé SSL spécifié dans

Note:

Comme cette option contient des informations sensibles de mot de passe, assurez-vous que ce script PHP est sécurisé.


CURLOPT_SSLKEYTYPECURLOPT_SSLKEYLe type de chiffrement du clé privé spécifié dans"PEM"(valeur par défaut),"DER"et"ENG".
CURLOPT_URLL'adresse de l'URL à obtenir, peut également être définie dans la fonction curl_init().
CURLOPT_USERAGENTInclure dans la requête HTTP une"User-Agent: "La chaîne de caractères de l'en-tête.
CURLOPT_USERPWDTransmettre un nom d'utilisateur et un mot de passe nécessaires pour la connexion, format :"[username]:[password]".

Pour les paramètres optionnels ci-dessous, la valeur doit être définie sur un tableau :

OptionOptionalvalueValueRemarque
CURLOPT_HTTP200ALIASES200 code d'état d'array, les codes de réponse dans l'array sont considérés comme des réponses correctes, sinon ils sont considérés comme des erreurs.Dans CURL 7.10.3est ajouté.
CURLOPT_HTTPHEADERUn tableau utilisé pour définir les champs d'en-tête HTTP. Utilisez le tableau suivant pour le paramétrage :                       array('Content-type: text/plain', 'Content-length: 100')
CURLOPT_POSTQUOTEUn ensemble de commandes FTP exécutées sur le serveur après l'exécution de la requête FTP.
CURLOPT_QUOTEUn ensemble de commandes FTP exécutées sur le serveur avant la requête FTP.

Pour les paramètres optionnels ci-dessous, la valeur doit être définie sur une ressource de flux (par exemple, utiliser fopen()):

OptionOptionalvalueValue
CURLOPT_FILEDéfinir l'emplacement du fichier de sortie, la valeur est un type de ressource, par défautSTDOUT (Navigateur).
CURLOPT_INFILEL'adresse de fichier à lire lors de l'envoi de fichiers, la valeur est un type de ressource.
CURLOPT_STDERRDéfinir une adresse de sortie d'erreur, la valeur est un type de ressource, remplaçant le défaut par défautSTDERR.
CURLOPT_WRITEHEADERSet the file address for writing the header part, the value is a resource type.

For the optional parameters of the following options, the value should be set to a callback function name:

OptionOptionalvalueValue
CURLOPT_HEADERFUNCTIONSet a callback function that has two parameters, the first is the CURL resource handle, and the second is the output header data. The output of the header data must depend on this function, and return the size of the data written.
CURLOPT_PASSWDFUNCTIONSet a callback function with three parameters, the first is the CURL resource handle, the second is a password prompt, and the third parameter is the maximum allowed length of the password. Return the value of the password.
CURLOPT_PROGRESSFUNCTIONSet a callback function with three parameters, the first is the CURL resource handle, the second is a file descriptor resource, and the third is the length. Return the data containing.
CURLOPT_READFUNCTIONCallback function name. This function should accept three parameters. The first is the CURL resource; the second is the data passed through the option CURLOPT_INFILE The stream resource passed to CURL; the third parameter is the maximum number of data that can be read. Back The callback function must return a string, the length of which is less than or equal to the amount of data requested (the third parameter). Generally from the input stream Resource read. Return an empty string as EOF(End of file) signal.
CURLOPT_WRITEFUNCTIONCallback function name. This function should accept two parameters. The first is the CURL resource; the second is the string of data to be written. The number The data must be saved in the function. The function must return the exact number of bytes to be written, otherwise the transfer will be interrupted by an error Break.

Return value

Returns TRUE when successful, or FALSE when failed.

Update log

VersionDescription
5.2.10Introduction CURLOPT_PROTOCOLS, andCURLOPT_REDIR_PROTOCOLS.
5.1.0Introduction CURLOPT_AUTOREFERER,CURLOPT_BINARYTRANSFER,CURLOPT_FTPSSLAUTH,CURLOPT_PROXYAUTH, andCURLOPT_TIMECONDITION.
5.0.0Introduction CURLOPT_FTP_USE_EPRT,CURLOPT_NOSIGNAL,CURLOPT_UNRESTRICTED_AUTH,CURLOPT_BUFFERSIZE,CURLOPT_HTTPAUTH,CURLOPT_PROXYPORT,CURLOPT_PROXYTYPE,CURLOPT_SSLCERTTYPE, andCURLOPT_HTTP200ALIASES.

在线示例

初始化一个新的CURL会话并获取一个网页

<?php
// 创建一个新CURL资源
$ch = curl_init();
// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, "http://fr.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);
?>

以上示例输出结果如下:

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

注释

传递一个数组到CURLOPT_POSTFIELDS,CURL会把数据编码成 multipart/form-data,而然传递一个URL-encoded字符串时,数据会被编码成 application/x-www-form-urlencoded。

PHP CURL参考手册