web-dev-qa-db-ja.com

コマンドラインcURLをPHP cURLに変換します

カールをしたことがないので、助けが必要です。私は例からこれを解決しようとしましたが、それを回避することはできません!

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などの変数でなければなりません

助けてくれてありがとう。

32
Brigante

出発点:

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

...
?>

参照: http://www.php.net/manual/en/function.curl-setopt.php

28
miku

あなたが必要...

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

"curlコマンドを即座にPHPコード"に変換 "

12
kris

あなたがコマンドラインで持っている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);
6

これを試して:

$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);
5
manny

この目的のために--libcurlオプションが追加されましたが、Cプログラムを作成しますが、PHPに翻訳するのはかなり簡単だと思います

2
Daniel Stenberg

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を最適化できます。

2
r00fus

残念ながらSOにはまだCommonMarkテーブルマークアップがありません。これは curlコマンドラインオプション がどのPHP CURLOPT_定数にマップされるかを自動生成したリストです。

これは、同様の名前のCURLOPT_定数に対する--longオプションの多少正確な一致のみをリストすることに注意してください。しかし、これは curl --help 出力およびPHP curl_setopt()リスト。

1
mario

これがいい。一行で。

$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);
1
Toxicity