カールをしたことがないので、助けが必要です。私は例からこれを解決しようとしましたが、それを回避することはできません!
APIを介してwikiにファイルを置くlinux(ubuntu)コマンドラインから正常に実行できるcurlコマンドがあります。
このcurlコマンドを、作成中のPHPスクリプトに組み込む必要があります。
PHPスクリプトで動作するようにこのcurlコマンドをどのように変換できますか?
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には認証が含まれていますが、これは自分だけが実行するので、スクリプトにクリアテキストで入力しても問題ありません。
@ test.pngは、$ filenameなどの変数でなければなりません
http:// hostname/@ api/deki/pages/= TestPage/files/= は、$ pageurlなどの変数でなければなりません
助けてくれてありがとう。
出発点:
<?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
...
?>
あなたがコマンドラインで持っているWhicvhever cURLは、このツールでPHPに変換できます:
https://incarnate.github.io/curl-to-php/
長い時間をかけて解決策を探した後、私を助けてくれました!それがあなたにも役立つことを願っています!あなたの解決策はこれです:
// 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);
これを試して:
$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);
この目的のために--libcurlオプションが追加されましたが、Cプログラムを作成しますが、PHPに翻訳するのはかなり簡単だと思います
MYYNの回答を出発点として使用し、 このページ を送信する方法のリファレンスとしてPOST data using PHP cURL、here私の提案です(現時点では非常によく似たものに取り組んでいます):
<?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);
?>
必要に応じてcurl_setopt_array()呼び出しを使用して、おそらく多くのcurl_setoptsを最適化できます。
残念ながらSOにはまだCommonMarkテーブルマークアップがありません。これは curlコマンドラインオプション がどのPHP CURLOPT_定数にマップされるかを自動生成したリストです。
-a
–-append–アップロード時にターゲットファイルに追加CURLOPT_FTPAPPEND
、CURLOPT_APPEND
CURLAUTH_BASIC
CURLE_SSL_CACERT
、CURLE_SSL_CACERT_BADFILE
CURLOPT_CAPATH
-E
–-cert–クライアント証明書ファイルとパスワード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
CURLOPT_CONNECT_TO
-b
–-cookie–文字列/ファイルからcookieを送信CURLOPT_COOKIE
、CURLOPT_COOKIEFILE
、CURLOPT_COOKIEJAR
、CURLOPT_COOKIESESSION
、CURL_LOCK_DATA_COOKIE
、CURLINFO_COOKIELIST
、CURLOPT_COOKIELIST
CURLOPT_CRLF
、CURLOPT_CRLFILE
CURLOPT_CRLFILE
-d
–-data– 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
–-fail– HTTPエラーでサイレント失敗(出力なし)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–マルチパートMIMEデータを指定CURLE_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
–-ftp-port– PASVの代わりにPORTを使用CURLE_FTP_PORT_FAILED
CURLOPT_FTP_SKIP_PASV_IP
CURLOPT_FTP_SSL_CCC
-G
–-get– URLに投稿データを入れ、GETを使用CURLOPT_HTTPGET
、CURLE_FTP_CANT_GET_Host
、CURLE_FTP_COULDNT_GET_SIZE
、CURL_RTSPREQ_GET_PARAMETER
-I
–-head–文書情報のみを表示CURLOPT_HEADER
、CURLOPT_HEADERFUNCTION
、CURLOPT_HTTPHEADER
、CURLOPT_WRITEHEADER
、CURLINFO_HEADER_OUT
、CURLINFO_HEADER_SIZE
、CURLHEADER_SEPARATE
、CURLHEADER_UNIFIED
、CURLOPT_HEADEROPT
、CURLOPT_PROXYHEADER
-H
–-header–サーバーにカスタムヘッダーを渡すCURLOPT_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–名前をIPv6アドレスに解決するCURL_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
–-location–リダイレクトに従うCURLOPT_FOLLOWLOCATION
CURLOPT_LOGIN_OPTIONS
CURLOPT_MAIL_AUTH
CURLOPT_MAIL_FROM
CURLOPT_MAIL_RCPT
CURLAUTH_GSSNEGOTIATE
、CURLAUTH_NEGOTIATE
-n
–-netrc–ユーザー名とパスワードについては.netrcを読み取る必要がありますCURLOPT_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– [protocol://] Host [:port]このプロキシを使用CURLOPT_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– HTTPプロキシトンネルを介して操作する(CONNECTを使用)CURLOPT_HTTPPROXYTUNNEL
CURLE_SSL_PINNEDPUBKEYNOTMATCH
-Q
–-quote–転送前にコマンドをサーバーに送信CURLOPT_POSTQUOTE
、CURLOPT_PREQUOTE
、CURLOPT_QUOTE
、CURLE_FTP_QUOTE_ERROR
CURLOPT_RANDOM_FILE
-r
–-range– RANGE内のバイトのみを取得CURLOPT_RANGE
、CURLE_HTTP_RANGE_ERROR
、CURLOPT_LOCALPORTRANGE
-e
–-referer–リファラーURLCURLOPT_AUTOREFERER
、CURLOPT_REFERER
-X
–-request–使用する要求コマンドを指定CURLOPT_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
–-speed-limit–これより遅い転送を停止CURLOPT_LOW_SPEED_LIMIT
-y
–-speed-time–トリガー「速度制限」はこの時間後に中止CURLOPT_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– SSLv2を使用CURL_SSLVERSION_SSLv2
-3
–-sslv3– SSLv3を使用CURL_SSLVERSION_SSLv3
CURLOPT_STDERR
CURLOPT_TCP_FASTOPEN
CURLOPT_TCP_NODELAY
-t
–-telnet-option– telnetオプションを設定CURLE_TELNET_OPTION_SYNTAX
、CURLE_UNKNOWN_TELNET_OPTION
CURLOPT_TFTP_BLKSIZE
CURLOPT_TFTP_NO_OPTIONS
-1
–-tlsv1– TLSv1.0以降を使用CURL_SSLVERSION_TLSv1
、CURL_SSLVERSION_TLSv1_0
、CURL_SSLVERSION_TLSv1_1
、CURL_SSLVERSION_TLSv1_2
CURLOPT_UNIX_SOCKET_PATH
CURLOPT_URL
-u
–-user–サーバーのユーザーとパスワード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–操作をより話しやすくするCURLOPT_VERBOSE
-V
–-version–バージョン番号を表示して終了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
これは、同様の名前のCURLOPT_定数に対する--longオプションの多少正確な一致のみをリストすることに注意してください。しかし、これは curl --help
出力およびPHP curl_setopt()リスト。
これがいい。一行で。
$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);