Подтвердить что ты не робот

Преобразование командной строки cURL в PHP cURL

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

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

Мне нужно включить эту команду curl в PHP script, который я создаю.

Как я могу перевести эту команду curl, чтобы она работала в PHP script?

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 содержит аутентификацию, но у меня нет проблем с помещением этого в чистый текст в script, поскольку это будет выполняться только мной.

@test.png должна быть переменной типа $filename

http://hostname/@api/deki/pages/=TestPage/files/= должна быть переменная, такая как $pageurl

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

4b9b3361

Ответ 1

отправная точка:

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

Ответ 3

Какой бы 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);

Ответ 4

Попробуйте следующее:

$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

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

Ответ 6

Использование ответа 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(), если хотите.

Ответ 7

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

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

Ответ 8

К сожалению, SO до сих пор не имеет разметки таблицы CommonMark. Это автоматически созданный список, из которого параметры командной строки curl могут сопоставляться с какой константой php CURLOPT_:

Обратите внимание, что это только перечисляет несколько точных совпадений опций --long с аналогично названными константами CURLOPT_. Но он должен дать вам достаточно советов о том, как сравнить вывод curl --help и список PHP curl_setopt().