Конвертировать командную строку cURL в PHP cURL - PullRequest
32 голосов
/ 21 декабря 2009

Я никогда не делал никаких кудрей, поэтому мне нужна помощь. Я пытался понять это на примерах, но не могу обойти это!

У меня есть команда curl, которую я могу успешно запустить из командной строки linux (ubuntu), которая помещает файл в вики через API.

Мне нужно включить эту команду 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

Спасибо за любую помощь.

Ответы [ 7 ]

28 голосов
/ 21 декабря 2009

начальная точка:

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

11 голосов
/ 09 мая 2017

Тебе нужно ...

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

"Мгновенное преобразование команд curl в код PHP"

6 голосов
/ 20 октября 2017

Какой бы 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);
5 голосов
/ 22 декабря 2009

Попробуйте это:

$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);
2 голосов
/ 10 февраля 2011

Используя ответ MYYN в качестве отправной точки, и эту страницу в качестве ссылки о том, как отправлять POST-данные с использованием PHP cURL, вот мое предложение (я работаю над чем-то очень похожим в данный момент):

<?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_setopts с помощью вызова curl_setopt_array (), если хотите.

2 голосов
/ 23 декабря 2009

для этой цели была добавлена ​​опция --libcurl, хотя она и делает программу на C, я думаю, ее довольно легко перевести на PHP

1 голос
/ 13 мая 2015

Лучше это. В одну строку.

$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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...