将命令行cURL转换为PHP cURL

时间:2009-12-21 11:35:53

标签: php curl

我从来没有做过任何卷曲,所以需要一些帮助。我试图从例子中解决这个问题,但无法理解它!

我有一个curl命令,我可以从linux(ubuntu)命令行成功运行,该命令行通过api将文件放到wiki中。

我需要将这个curl命令合并到我正在构建的PHP脚本中。

如何翻译此curl命令以使其在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包含身份验证,但我在脚本中以明文形式显示这个问题没有问题,因为这只会由我运行。

@ test.png必须是一个变量,例如$ filename

http://hostname/@api/deki/pages/=TestPage/files/=必须是变量,例如$ pageurl

感谢您的帮助。

8 个答案:

答案 0 :(得分:28)

一个起点:

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

答案 1 :(得分:11)

你需要......

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

&#34;立即将curl命令转换为PHP代码&#34;

答案 2 :(得分:6)

您在命令行中拥有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);

答案 3 :(得分:5)

试试这个:

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

答案 4 :(得分:2)

为此目的添加了--libcurl选项,即使它创建了一个C程序,我认为它应该很容易转换为PHP

答案 5 :(得分:2)

使用MYYN的答案作为起点,this page作为如何使用PHP cURL发送POST数据的参考,这是我的建议(我正在研究一些非常相似的东西):

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

答案 6 :(得分:2)

不幸的是,SO仍然没有CommonMark表标记。这是一个自动生成的列表,其中curl commandline options可能会映射到哪个php CURLOPT_常量:

请注意,这仅列出--long选项与类似名称的CURLOPT_常量的某些精确匹配。但这应该给您足够的提示,以了解如何比较curl --help输出和PHP curl_setopt()列表。

答案 7 :(得分:1)

更好的这一点。在一行。

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