Convert command line cURL to PHP cURL

a starting point:

<?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

...
?>

See also: http://www.php.net/manual/en/function.curl-setopt.php


You need ...

curl-to-PHP : https://incarnate.github.io/curl-to-php/

"Instantly convert curl commands to PHP code"


Whicvhever cURL you have in command line, you can convert it to PHP with this tool:

https://incarnate.github.io/curl-to-php/

It helped me after long long hours of searching for a solution! Hope it will help you out too! Your solution is this:

// 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);

This is an autogenerated list of which curl commandline options might map onto which php CURLOPT_ constant:

--arg description curl_setopt()
-a
--append
Append to target file when uploading CURLOPT_FTPAPPEND, CURLOPT_APPEND
--basic Use HTTP Basic Authentication CURLAUTH_BASIC
--cacert <file> CA certificate to verify peer against CURLE_SSL_CACERT, CURLE_SSL_CACERT_BADFILE
--capath <dir> CA directory to verify peer against CURLOPT_CAPATH
-E
--cert <certificate[:password]>
Client certificate file and password CURLOPT_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
--connect-to <HOST1:PORT1:HOST2:PORT2> Connect to host CURLOPT_CONNECT_TO
-b
--cookie <data>
Send cookies from string/file CURLOPT_COOKIE, CURLOPT_COOKIEFILE, CURLOPT_COOKIEJAR, CURLOPT_COOKIESESSION, CURL_LOCK_DATA_COOKIE, CURLINFO_COOKIELIST, CURLOPT_COOKIELIST
--crlf Convert LF to CRLF in upload CURLOPT_CRLF, CURLOPT_CRLFILE
--crlfile <file> Get a CRL list in PEM format from the given file CURLOPT_CRLFILE
-d
--data <data>
HTTP POST data CURLOPT_READDATA, CURL_LOCK_DATA_COOKIE, CURL_LOCK_DATA_DNS, CURL_LOCK_DATA_SSL_SESSION
--delegation <LEVEL> GSS-API delegation permission CURLGSSAPI_DELEGATION_FLAG, CURLGSSAPI_DELEGATION_POLICY_FLAG, CURLOPT_GSSAPI_DELEGATION
--digest Use HTTP Digest Authentication CURLAUTH_DIGEST, CURLAUTH_DIGEST_IE
--dns-interface <interface> Interface to use for DNS requests CURLOPT_DNS_INTERFACE
--dns-servers <addresses> DNS server addrs to use CURLOPT_DNS_SERVERS
--engine <name> Crypto engine to use CURLOPT_SSLENGINE, CURLOPT_SSLENGINE_DEFAULT, CURLE_SSL_ENGINE_NOTFOUND, CURLE_SSL_ENGINE_SETFAILED, CURLINFO_SSL_ENGINES
-f
--fail
Fail silently (no output at all) on HTTP errors CURLOPT_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
--form <name=content>
Specify multipart MIME data CURLE_FTP_WEIRD_227_FORMAT, CURLE_MALFORMAT_USER, CURLE_URL_MALFORMAT, CURLE_URL_MALFORMAT_USER, CURLM_CALL_MULTI_PERFORM
--ftp-account <data> Account data string CURLOPT_FTP_ACCOUNT
--ftp-alternative-to-user <command> String to replace USER [name] CURLOPT_FTP_ALTERNATIVE_TO_USER
-P
--ftp-port <address>
Use PORT instead of PASV CURLE_FTP_PORT_FAILED
--ftp-skip-pasv-ip Skip the IP address for PASV CURLOPT_FTP_SKIP_PASV_IP
--ftp-ssl-ccc Send CCC after authenticating CURLOPT_FTP_SSL_CCC
-G
--get
Put the post data in the URL and use GET CURLOPT_HTTPGET, CURLE_FTP_CANT_GET_HOST, CURLE_FTP_COULDNT_GET_SIZE, CURL_RTSPREQ_GET_PARAMETER
-I
--head
Show document info only CURLOPT_HEADER, CURLOPT_HEADERFUNCTION, CURLOPT_HTTPHEADER, CURLOPT_WRITEHEADER, CURLINFO_HEADER_OUT, CURLINFO_HEADER_SIZE, CURLHEADER_SEPARATE, CURLHEADER_UNIFIED, CURLOPT_HEADEROPT, CURLOPT_PROXYHEADER
-H
--header <header/@file>
Pass custom header(s) to server CURLOPT_HEADER, CURLOPT_HEADERFUNCTION, CURLOPT_HTTPHEADER, CURLOPT_WRITEHEADER, CURLINFO_HEADER_OUT, CURLINFO_HEADER_SIZE, CURLHEADER_SEPARATE, CURLHEADER_UNIFIED, CURLOPT_HEADEROPT, CURLOPT_PROXYHEADER
--http2 Use HTTP 2 CURLOPT_HTTP200ALIASES, CURL_VERSION_HTTP2
--ignore-content-length Ignore the size of the remote resource CURLOPT_IGNORE_CONTENT_LENGTH
--interface <name> Use network INTERFACE (or address) CURLOPT_INTERFACE, CURLOPT_DNS_INTERFACE
-6
--ipv6
Resolve names to IPv6 addresses CURL_VERSION_IPV6
--key <key> Private key file name 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
--krb <level> Enable Kerberos with security CURLOPT_KRB4LEVEL, CURLOPT_KRBLEVEL
--local-port <num/range> Force use of RANGE for local port numbers CURLINFO_LOCAL_PORT
-L
--location
Follow redirects CURLOPT_FOLLOWLOCATION
--login-options <options> Server login options CURLOPT_LOGIN_OPTIONS
--mail-auth <address> Originator address of the original email CURLOPT_MAIL_AUTH
--mail-from <address> Mail from this address CURLOPT_MAIL_FROM
--mail-rcpt <address> Mail to this address CURLOPT_MAIL_RCPT
--negotiate Use HTTP Negotiate (SPNEGO) authentication CURLAUTH_GSSNEGOTIATE, CURLAUTH_NEGOTIATE
-n
--netrc
Must read .netrc for user name and password CURLOPT_NETRC, CURL_NETRC_IGNORED, CURL_NETRC_OPTIONAL, CURL_NETRC_REQUIRED, CURLOPT_NETRC_FILE
--netrc-file <filename> Specify FILE for netrc CURLOPT_NETRC_FILE
--netrc-optional Use either .netrc or URL CURL_NETRC_OPTIONAL
--noproxy <no-proxy-list> List of hosts which do not use proxy CURLOPT_NOPROXY
--ntlm Use HTTP NTLM authentication CURLAUTH_NTLM, CURLAUTH_NTLM_WB
--ntlm-wb Use HTTP NTLM authentication with winbind CURLAUTH_NTLM_WB
--oauth2-bearer <token> OAuth 2 Bearer Token CURLOPT_XOAUTH2_BEARER
--pass <phrase> Pass phrase for the private key 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
--path-as-is Do not squash .. sequences in URL path CURLOPT_PATH_AS_IS
--pinnedpubkey <hashes> FILE/HASHES Public key to verify peer against CURLE_SSL_PINNEDPUBKEYNOTMATCH
--proto <protocols> Enable/disable PROTOCOLS 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
--proxy-service-name <name> SPNEGO proxy service name CURLOPT_PROXY_SERVICE_NAME
-p
--proxytunnel
Operate through an HTTP proxy tunnel (using CONNECT) CURLOPT_HTTPPROXYTUNNEL
--pubkey <key> SSH Public key file name CURLE_SSL_PINNEDPUBKEYNOTMATCH
-Q
--quote
Send command(s) to server before transfer CURLOPT_POSTQUOTE, CURLOPT_PREQUOTE, CURLOPT_QUOTE, CURLE_FTP_QUOTE_ERROR
--random-file <file> File for reading random data from CURLOPT_RANDOM_FILE
-r
--range <range>
Retrieve only the bytes within RANGE CURLOPT_RANGE, CURLE_HTTP_RANGE_ERROR, CURLOPT_LOCALPORTRANGE
-e
--referer <URL>
Referrer URL CURLOPT_AUTOREFERER, CURLOPT_REFERER
-X
--request <command>
Specify request command to use CURLOPT_CUSTOMREQUEST, CURLINFO_REQUEST_SIZE, CURLOPT_RTSP_REQUEST
--resolve <host:port:address[,address]...> Resolve the host+port to this address CURLE_COULDNT_RESOLVE_HOST, CURLE_COULDNT_RESOLVE_PROXY, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4, CURL_IPRESOLVE_V6, CURL_IPRESOLVE_WHATEVER, CURLOPT_RESOLVE
--retry <num> Retry request if transient problems occur CURLFTP_CREATE_DIR_RETRY
--sasl-ir Enable initial response in SASL authentication CURLOPT_SASL_IR
--service-name <name> SPNEGO service name CURLOPT_PROXY_SERVICE_NAME, CURLOPT_SERVICE_NAME
--socks4 <host[:port]> SOCKS4 proxy on given host + port CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A
--socks4a <host[:port]> SOCKS4a proxy on given host + port CURLPROXY_SOCKS4A
--socks5 <host[:port]> SOCKS5 proxy on given host + port CURLPROXY_SOCKS5, CURLPROXY_SOCKS5_HOSTNAME, CURLOPT_SOCKS5_GSSAPI_NEC, CURLOPT_SOCKS5_GSSAPI_SERVICE
--socks5-gssapi Enable GSS-API auth for SOCKS5 proxies CURLOPT_SOCKS5_GSSAPI_NEC, CURLOPT_SOCKS5_GSSAPI_SERVICE
--socks5-gssapi-nec Compatibility with NEC SOCKS5 server CURLOPT_SOCKS5_GSSAPI_NEC
--socks5-gssapi-service <name> SOCKS5 proxy service name for GSS-API CURLOPT_SOCKS5_GSSAPI_SERVICE
--socks5-hostname <host[:port]> SOCKS5 proxy, pass host name to proxy CURLPROXY_SOCKS5_HOSTNAME
-Y
--speed-limit <speed>
Stop transfers slower than this CURLOPT_LOW_SPEED_LIMIT
-y
--speed-time <seconds>
Trigger 'speed-limit' abort after this time CURLOPT_LOW_SPEED_TIME
--ssl Try SSL/TLS 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
Use SSLv2 CURL_SSLVERSION_SSLv2
-3
--sslv3
Use SSLv3 CURL_SSLVERSION_SSLv3
--stderr Where to redirect stderr CURLOPT_STDERR
--tcp-fastopen Use TCP Fast Open CURLOPT_TCP_FASTOPEN
--tcp-nodelay Use the TCP_NODELAY option CURLOPT_TCP_NODELAY
-t
--telnet-option <opt=val>
Set telnet option CURLE_TELNET_OPTION_SYNTAX, CURLE_UNKNOWN_TELNET_OPTION
--tftp-blksize <value> Set TFTP BLKSIZE option CURLOPT_TFTP_BLKSIZE
--tftp-no-options Do not send any TFTP options CURLOPT_TFTP_NO_OPTIONS
-1
--tlsv1
Use TLSv1.0 or greater CURL_SSLVERSION_TLSv1, CURL_SSLVERSION_TLSv1_0, CURL_SSLVERSION_TLSv1_1, CURL_SSLVERSION_TLSv1_2
--unix-socket <path> Connect through this Unix domain socket CURLOPT_UNIX_SOCKET_PATH
--url <url> URL to work with CURLOPT_URL
-u
--user <user:password>
Server user and password CURLOPT_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
--verbose
Make the operation more talkative CURLOPT_VERBOSE
-V
--version
Show version number and quit CURLOPT_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

Note that this only lists somewhat exact matches of --long options to similarly named CURLOPT_ constants. But it should give you enough hints on how to compare the curl --help output and the PHP curl_setopt() list.