Je n'ai jamais fait de boucle auparavant, j'ai donc besoin d'aide. J'ai essayé de résoudre ce problème à partir d'exemples, mais je n'arrive pas à comprendre!
J'ai une commande curl que je peux exécuter avec succès à partir d'une ligne de commande linux (ubuntu) qui place un fichier sur un wiki via une api.
J'aurais besoin d'incorporer cette commande curl dans un script PHP que je construis.
Comment traduire cette commande curl pour qu'elle fonctionne dans un script PHP?
curl -b cookie.txt -X PUT \
--data-binary "@test.png" \
-H "Content-Type: image/png" \
"http://hostname/@api/deki/pages/=TestPage/files/=test.png" \
-0
cookie.txt contient l'authentification, mais je n'ai aucun problème à le mettre en texte clair dans le script car il sera exécuté par moi uniquement.
@ test.png doit être une variable telle que $ filename
http: // hostname/@ api/deki/pages/= TestPage/files/= doit être une variable telle que $ pageurl
Merci pour toute aide.
un point de départ:
<?php
$pageurl = "http://hostname/@api/deki/pages/=TestPage/files/=";
$filename = "test.png";
$theurl = $pageurl . $filename;
$ch = curl_init($theurl);
curl_setopt($ch, CURLOPT_COOKIE, ...); // -b
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); // -X
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: image/png']); // -H
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); // -0
...
?>
Voir aussi: http://www.php.net/manual/en/function.curl-setopt.php
Vous avez besoin ...
"Convertissez instantanément les commandes curl en PHP"
Quel que soit le cURL que vous avez en ligne de commande, vous pouvez le convertir en PHP avec cet outil:
https://incarnate.github.io/curl-to-php/
Cela m'a aidé après de longues heures de recherche d'une solution! J'espère que cela vous aidera aussi! Votre solution est la suivante:
// Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://hostname/@api/deki/pages/=TestPage/files/=test.png");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$post = array(
"file" => "@" .realpath("test.png")
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
$headers = array();
$headers[] = "Content-Type: image/png";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close ($ch);
Essaye ça:
$cmd='curl -b cookie.txt -X PUT \
--data-binary "@test.png" \
-H "Content-Type: image/png" \
"http://hostname/@api/deki/pages/=TestPage/files/=test.png" \
-0';
exec($cmd,$result);
l'option --libcurl a été ajoutée à cet effet, même si elle fait un programme C, je pense qu'il devrait être assez facile à traduire en PHP
En utilisant la réponse de MYYN comme point de départ et cette page comme référence sur la façon d'envoyer POST données en utilisant PHP cURL, ici est ma suggestion (je travaille sur quelque chose de très similaire en ce moment):
<?php
$pageurl = "http://hostname/@api/deki/pages/=TestPage/files/=";
$filename = "test.png";
$theurl = $pageurl.$filename;
$ch = curl_init($theurl);
curl_setopt($ch, CURLOPT_COOKIE, ...); // -b
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); // -X
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: image/png']); // -H
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); // -0
$post = array("$filename"=>"@$filename");
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$response = curl_exec($ch);
?>
Vous pouvez probablement optimiser les nombreux curl_setopts avec l'utilisation d'un appel à curl_setopt_array () si vous le souhaitez.
Malheureusement SO n'a toujours pas de balisage de table CommonMark. Il s'agit d'une liste autogénérée dont options de ligne de commande curl peut correspondre à quelle constante php CURLOPT_:
-a
- -- append - Ajouter au fichier cible lors du téléchargementCURLOPT_FTPAPPEND
, CURLOPT_APPEND
CURLAUTH_BASIC
CURLE_SSL_CACERT
, CURLE_SSL_CACERT_BADFILE
CURLOPT_CAPATH
-E
- -- cert - Fichier de certificat client et mot de passeCURLOPT_SSLCERT
, CURLOPT_SSLCERTPASSWD
, CURLOPT_SSLCERTTYPE
, CURLE_SSL_CACERT
, CURLE_SSL_CERTPROBLEM
, CURLE_SSL_PEER_CERTIFICATE
, CURLE_SSL_CACERT_BADFILE
, CURLOPT_ISSUERCERT
, CURLINFO_CERTINFO
, CURLOPT_CERTINFO
CURLOPT_CONNECT_TO
-b
- -- cookie - Envoyer des cookies à partir d'une chaîne/d'un fichierCURLOPT_COOKIE
, CURLOPT_COOKIEFILE
, CURLOPT_COOKIEJAR
, CURLOPT_COOKIESESSION
, CURL_LOCK_DATA_COOKIE
, CURLINFO_COOKIELIST
, CURLOPT_COOKIELIST
CURLOPT_CRLF
, CURLOPT_CRLFILE
CURLOPT_CRLFILE
-d
- -- données - HTTP POST dataCURLOPT_READDATA
, CURL_LOCK_DATA_COOKIE
, CURL_LOCK_DATA_DNS
, CURL_LOCK_DATA_SSL_SESSION
CURLGSSAPI_DELEGATION_FLAG
, CURLGSSAPI_DELEGATION_POLICY_FLAG
, CURLOPT_GSSAPI_DELEGATION
CURLAUTH_DIGEST
, CURLAUTH_DIGEST_IE
CURLOPT_DNS_INTERFACE
CURLOPT_DNS_SERVERS
CURLOPT_SSLENGINE
, CURLOPT_SSLENGINE_DEFAULT
, CURLE_SSL_ENGINE_NOTFOUND
, CURLE_SSL_ENGINE_SETFAILED
, CURLINFO_SSL_ENGINES
-f
- -- échec - Échec en silence (pas de sortie du tout) sur les erreurs HTTPCURLOPT_FAILONERROR
, CURLE_FAILED_INIT
, CURLE_FTP_PORT_FAILED
, CURLE_HTTP_PORT_FAILED
, CURLE_LDAP_SEARCH_FAILED
, CURLE_SSL_ENGINE_SETFAILED
, CURLE_FTP_SSL_FAILED
, CURL_FNMATCHFUNC_FAIL
-F
- -- formulaire - Spécifiez les données MIME en plusieurs partiesCURLE_FTP_WEIRD_227_FORMAT
, CURLE_MALFORMAT_USER
, CURLE_URL_MALFORMAT
, CURLE_URL_MALFORMAT_USER
, CURLM_CALL_MULTI_PERFORM
CURLOPT_FTP_ACCOUNT
CURLOPT_FTP_ALTERNATIVE_TO_USER
-P
- -- port ftp - Utilisez PORT au lieu de PASVCURLE_FTP_PORT_FAILED
CURLOPT_FTP_SKIP_PASV_IP
CURLOPT_FTP_SSL_CCC
-G
- -- get - Mettez les données du post dans l'URL et utilisez GETCURLOPT_HTTPGET
, CURLE_FTP_CANT_GET_Host
, CURLE_FTP_COULDNT_GET_SIZE
, CURL_RTSPREQ_GET_PARAMETER
-I
- -- tête - Afficher uniquement les informations du documentCURLOPT_HEADER
, CURLOPT_HEADERFUNCTION
, CURLOPT_HTTPHEADER
, CURLOPT_WRITEHEADER
, CURLINFO_HEADER_OUT
, CURLINFO_HEADER_SIZE
, CURLHEADER_SEPARATE
, CURLHEADER_UNIFIED
, CURLOPT_HEADEROPT
, CURLOPT_PROXYHEADER
-H
- -- en-tête - Transférer des en-têtes personnalisés au serveurCURLOPT_HEADER
, CURLOPT_HEADERFUNCTION
, CURLOPT_HTTPHEADER
, CURLOPT_WRITEHEADER
, CURLINFO_HEADER_OUT
, CURLINFO_HEADER_SIZE
, CURLHEADER_SEPARATE
, CURLHEADER_UNIFIED
, CURLOPT_HEADEROPT
, CURLOPT_PROXYHEADER
CURLOPT_HTTP200ALIASES
, CURL_VERSION_HTTP2
CURLOPT_IGNORE_CONTENT_LENGTH
CURLOPT_INTERFACE
, CURLOPT_DNS_INTERFACE
-6
- -- ipv6 - Résolution des noms en adresses IPv6CURL_VERSION_IPV6
CURLOPT_SSLKEY
, CURLOPT_SSLKEYPASSWD
, CURLOPT_SSLKEYTYPE
, CURLE_SSL_PINNEDPUBKEYNOTMATCH
, CURLOPT_SSH_PRIVATE_KEYFILE
, CURLOPT_SSH_PUBLIC_KEYFILE
, CURLOPT_SSH_Host_PUBLIC_KEY_MD5
, CURLOPT_KEYPASSWD
, CURLSSH_AUTH_KEYBOARD
, CURLSSH_AUTH_PUBLICKEY
, CURLOPT_PINNEDPUBLICKEY
CURLOPT_KRB4LEVEL
, CURLOPT_KRBLEVEL
CURLINFO_LOCAL_PORT
-L
- -- emplacement - Suivez les redirectionsCURLOPT_FOLLOWLOCATION
CURLOPT_LOGIN_OPTIONS
CURLOPT_MAIL_AUTH
CURLOPT_MAIL_FROM
CURLOPT_MAIL_RCPT
CURLAUTH_GSSNEGOTIATE
, CURLAUTH_NEGOTIATE
-n
- -- netrc - Doit lire .netrc pour le nom d'utilisateur et le mot de passeCURLOPT_NETRC
, CURL_NETRC_IGNORED
, CURL_NETRC_OPTIONAL
, CURL_NETRC_REQUIRED
, CURLOPT_NETRC_FILE
CURLOPT_NETRC_FILE
CURL_NETRC_OPTIONAL
CURLOPT_NOPROXY
CURLAUTH_NTLM
, CURLAUTH_NTLM_WB
CURLAUTH_NTLM_WB
CURLOPT_XOAUTH2_BEARER
CURLOPT_SSLCERTPASSWD
, CURLOPT_SSLKEYPASSWD
, CURLE_BAD_PASSWORD_ENTERED
, CURLE_FTP_USER_PASSWORD_INCORRECT
, CURLE_FTP_WEIRD_PASS_REPLY
, CURLFTPSSL_CCC_PASSIVE
, CURLOPT_KEYPASSWD
, CURLSSH_AUTH_PASSWORD
, CURLOPT_PASSWORD
, CURLOPT_PROXYPASSWORD
, CURLOPT_TLSAUTH_PASSWORD
CURLOPT_PATH_AS_IS
CURLE_SSL_PINNEDPUBKEYNOTMATCH
CURLE_UNSUPPORTED_PROTOCOL
, CURLOPT_PROTOCOLS
, CURLOPT_REDIR_PROTOCOLS
, CURLPROTO_ALL
, CURLPROTO_DICT
, CURLPROTO_FILE
, CURLPROTO_FTP
, CURLPROTO_FTPS
, CURLPROTO_HTTP
, CURLPROTO_HTTPS
, CURLPROTO_LDAP
, CURLPROTO_LDAPS
, CURLPROTO_SCP
, CURLPROTO_SFTP
, CURLPROTO_TELNET
, CURLPROTO_TFTP
, CURLPROTO_IMAP
, CURLPROTO_IMAPS
, CURLPROTO_POP3
, CURLPROTO_POP3S
, CURLPROTO_RTSP
, CURLPROTO_SMTP
, CURLPROTO_SMTPS
, CURLPROTO_RTMP
, CURLPROTO_RTMPE
, CURLPROTO_RTMPS
, CURLPROTO_RTMPT
, CURLPROTO_RTMPTE
, CURLPROTO_RTMPTS
, CURLPROTO_Gopher
, CURLPROTO_SMB
, CURLPROTO_SMBS
, CURLOPT_DEFAULT_PROTOCOL
-x
- -- proxy - [protocole: //] Hôte [: port] Utilisez ce proxyCURLOPT_HTTPPROXYTUNNEL
, CURLOPT_PROXY
, CURLOPT_PROXYPORT
, CURLOPT_PROXYTYPE
, CURLOPT_PROXYUSERPWD
, CURLE_COULDNT_RESOLVE_PROXY
, CURLPROXY_HTTP
, CURLPROXY_SOCKS4
, CURLPROXY_SOCKS5
, CURLOPT_PROXYAUTH
, CURLINFO_PROXYAUTH_AVAIL
, CURLOPT_PROXY_TRANSFER_MODE
, CURLPROXY_SOCKS4A
, CURLPROXY_SOCKS5_HOSTNAME
, CURLOPT_PROXYPASSWORD
, CURLOPT_PROXYUSERNAME
, CURLOPT_NOPROXY
, CURLPROXY_HTTP_1_0
, CURLOPT_PROXYHEADER
, CURLOPT_PROXY_SERVICE_NAME
CURLOPT_PROXY_SERVICE_NAME
-p
- -- proxytunnel - Fonctionne via un tunnel proxy HTTP (en utilisant CONNECT)CURLOPT_HTTPPROXYTUNNEL
CURLE_SSL_PINNEDPUBKEYNOTMATCH
-Q
- -- quote - Envoyer la ou les commandes au serveur avant le transfertCURLOPT_POSTQUOTE
, CURLOPT_PREQUOTE
, CURLOPT_QUOTE
, CURLE_FTP_QUOTE_ERROR
CURLOPT_RANDOM_FILE
-r
- -- range - Récupère uniquement les octets dans RANGECURLOPT_RANGE
, CURLE_HTTP_RANGE_ERROR
, CURLOPT_LOCALPORTRANGE
-e
- -- referer - URL de référenceCURLOPT_AUTOREFERER
, CURLOPT_REFERER
-X
- -- request - Spécifiez la commande de requête à utiliserCURLOPT_CUSTOMREQUEST
, CURLINFO_REQUEST_SIZE
, CURLOPT_RTSP_REQUEST
CURLE_COULDNT_RESOLVE_Host
, CURLE_COULDNT_RESOLVE_PROXY
, CURLOPT_IPRESOLVE
, CURL_IPRESOLVE_V4
, CURL_IPRESOLVE_V6
, CURL_IPRESOLVE_WHATEVER
, CURLOPT_RESOLVE
CURLFTP_CREATE_DIR_RETRY
CURLOPT_SASL_IR
CURLOPT_PROXY_SERVICE_NAME
, CURLOPT_SERVICE_NAME
CURLPROXY_SOCKS4
, CURLPROXY_SOCKS4A
CURLPROXY_SOCKS4A
CURLPROXY_SOCKS5
, CURLPROXY_SOCKS5_HOSTNAME
, CURLOPT_SOCKS5_GSSAPI_NEC
, CURLOPT_SOCKS5_GSSAPI_SERVICE
CURLOPT_SOCKS5_GSSAPI_NEC
, CURLOPT_SOCKS5_GSSAPI_SERVICE
CURLOPT_SOCKS5_GSSAPI_NEC
CURLOPT_SOCKS5_GSSAPI_SERVICE
CURLPROXY_SOCKS5_HOSTNAME
-Y
- -- limitation de vitesse - Arrêtez les transferts plus lentement que celaCURLOPT_LOW_SPEED_LIMIT
-y
- -- speed-time - Déclenche la "limitation de vitesse" après cette heureCURLOPT_LOW_SPEED_TIME
CURLOPT_SSLCERT
, CURLOPT_SSLCERTPASSWD
, CURLOPT_SSLCERTTYPE
, CURLOPT_SSLENGINE
, CURLOPT_SSLENGINE_DEFAULT
, CURLOPT_SSLKEY
, CURLOPT_SSLKEYPASSWD
, CURLOPT_SSLKEYTYPE
, CURLOPT_SSLVERSION
, CURLOPT_SSL_CIPHER_LIST
, CURLOPT_SSL_VERIFYHOST
, CURLOPT_SSL_VERIFYPEER
, CURLE_SSL_CACERT
, CURLE_SSL_CERTPROBLEM
, CURLE_SSL_CIPHER
, CURLE_SSL_CONNECT_ERROR
, CURLE_SSL_ENGINE_NOTFOUND
, CURLE_SSL_ENGINE_SETFAILED
, CURLE_SSL_PEER_CERTIFICATE
, CURLE_SSL_PINNEDPUBKEYNOTMATCH
, CURLINFO_SSL_VERIFYRESULT
, CURL_LOCK_DATA_SSL_SESSION
, CURL_SSLVERSION_DEFAULT
, CURL_SSLVERSION_SSLv2
, CURL_SSLVERSION_SSLv3
, CURL_SSLVERSION_TLSv1
, CURL_VERSION_SSL
, CURLE_FTP_SSL_FAILED
, CURLFTPSSL_ALL
, CURLFTPSSL_CONTROL
, CURLFTPSSL_NONE
, CURLFTPSSL_TRY
, CURLOPT_FTP_SSL
, CURLFTPAUTH_SSL
, CURLOPT_FTPSSLAUTH
, CURLINFO_SSL_ENGINES
, CURLE_SSL_CACERT_BADFILE
, CURLOPT_SSL_SESSIONID_CACHE
, CURLOPT_FTP_SSL_CCC
, CURLFTPSSL_CCC_ACTIVE
, CURLFTPSSL_CCC_NONE
, CURLFTPSSL_CCC_PASSIVE
, CURLOPT_USE_SSL
, CURLUSESSL_ALL
, CURLUSESSL_CONTROL
, CURLUSESSL_NONE
, CURLUSESSL_TRY
, CURLOPT_SSL_OPTIONS
, CURLSSLOPT_ALLOW_BEAST
, CURL_SSLVERSION_TLSv1_0
, CURL_SSLVERSION_TLSv1_1
, CURL_SSLVERSION_TLSv1_2
, CURLOPT_SSL_ENABLE_ALPN
, CURLOPT_SSL_ENABLE_NPN
, CURLOPT_SSL_VERIFYSTATUS
, CURLOPT_SSL_FALSESTART
, CURLSSLOPT_NO_REVOKE
-2
- -- sslv2 - Utiliser SSLv2CURL_SSLVERSION_SSLv2
-3
- -- sslv3 - Utiliser SSLv3CURL_SSLVERSION_SSLv3
CURLOPT_STDERR
CURLOPT_TCP_FASTOPEN
CURLOPT_TCP_NODELAY
-t
- -- option telnet - Définir l'option telnetCURLE_TELNET_OPTION_SYNTAX
, CURLE_UNKNOWN_TELNET_OPTION
CURLOPT_TFTP_BLKSIZE
CURLOPT_TFTP_NO_OPTIONS
-1
- -- tlsv1 - Utiliser TLSv1.0 ou supérieurCURL_SSLVERSION_TLSv1
, CURL_SSLVERSION_TLSv1_0
, CURL_SSLVERSION_TLSv1_1
, CURL_SSLVERSION_TLSv1_2
CURLOPT_UNIX_SOCKET_PATH
CURLOPT_URL
-u
- -- utilisateur - Utilisateur et mot de passe du serveurCURLOPT_PROXYUSERPWD
, CURLOPT_USERAGENT
, CURLOPT_USERPWD
, CURLE_FTP_USER_PASSWORD_INCORRECT
, CURLE_FTP_WEIRD_USER_REPLY
, CURLE_MALFORMAT_USER
, CURLE_URL_MALFORMAT_USER
, CURLOPT_FTP_ALTERNATIVE_TO_USER
, CURLOPT_PROXYUSERNAME
, CURLOPT_USERNAME
, CURLOPT_TLSAUTH_USERNAME
-v
- -- verbeux - Rendre l'opération plus bavardeCURLOPT_VERBOSE
-V
- -- version - Afficher le numéro de version et quitterCURLOPT_HTTP_VERSION
, CURLOPT_SSLVERSION
, CURLVERSION_NOW
, CURL_HTTP_VERSION_1_0
, CURL_HTTP_VERSION_1_1
, CURL_HTTP_VERSION_NONE
, CURL_SSLVERSION_DEFAULT
, CURL_SSLVERSION_SSLv2
, CURL_SSLVERSION_SSLv3
, CURL_SSLVERSION_TLSv1
, CURL_VERSION_IPV6
, CURL_VERSION_KERBEROS4
, CURL_VERSION_LIBZ
, CURL_VERSION_SSL
, CURL_HTTP_VERSION_2_0
, CURL_VERSION_HTTP2
, CURL_SSLVERSION_TLSv1_0
, CURL_SSLVERSION_TLSv1_1
, CURL_SSLVERSION_TLSv1_2
, CURL_HTTP_VERSION_2
, CURL_HTTP_VERSION_2TLS
, CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE
Notez que cela ne répertorie que les correspondances quelque peu exactes des options --long aux constantes CURLOPT_ de même nom. Mais cela devrait vous donner suffisamment d'indices sur la façon de comparer les curl --help
sortie et la liste PHP curl_setopt ().
Mieux ça. En une seule ligne.
$cmd='curl -b cookie.txt -X PUT --data-binary "@test.png" -H "Content-Type: image/png" "http://hostname/@api/deki/pages/=TestPage/files/=test.png" -0';
exec($cmd,$result);