Konwertuj cURL wiersza poleceń na cURL PHP

Nigdy wcześniej nie kręciłem, więc potrzebuję pomocy. Próbowałem to rozpracować na przykładach, ale nie mogę tego ogarnąć!

Mam polecenie curl, które mogę z powodzeniem uruchomić z Linuksa (ubuntu), który umieszcza plik na wiki przez api.

Musiałbym włączyć to polecenie curl w skrypcie PHP, który buduję.

Jak przetłumaczyć to polecenie curl, aby działało w skrypcie 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
Ciasteczko.txt zawiera uwierzytelnianie ale nie mam problemu z umieszczeniem tego w skrypcie, bo to będzie uruchamiane tylko przeze mnie.

@test.png musi być zmienną taką jak $filename

Http://hostname/@api/deki/pages/=TestPage/files/ = musi być zmienna taka jak $pageurl

Dzięki za pomoc.
 31
Author: miku, 2009-12-21

7 answers

Punkt wyjścia:

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

...
?>

Zobacz też: http://www.php.net/manual/en/function.curl-setopt.php

 28
Author: miku,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-28 18:03:23

Spróbuj tego:

$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
Author: manny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-22 20:30:47

Whicvhever cURL masz w wierszu poleceń, możesz przekonwertować go do PHP za pomocą tego narzędzia:

https://incarnate.github.io/curl-to-php/
Pomogło mi to po długich godzinach szukania rozwiązania! Mam nadzieję, że to też ci pomoże! Twoje rozwiązanie jest takie:
// 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
Author: Vladimir Despotovic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-20 11:20:49

Potrzebujesz ...

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

"Natychmiastowa konwersja poleceń curl do kodu PHP"

 3
Author: kris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-08 23:22:06

Opcja --libcurl została dodana w tym celu, nawet jeśli tworzy program w języku C, myślę, że powinno być dość łatwe do przetłumaczenia na PHP

 2
Author: Daniel Stenberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-22 21:22:49

Używając odpowiedzi MYYN jako punktu wyjścia i tej strony jako odniesienia do wysyłania danych postów za pomocą PHP cURL, oto moja sugestia (pracuję obecnie nad czymś bardzo podobnym):

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

Możesz prawdopodobnie zoptymalizować wiele funkcji curl_setopts za pomocą wywołania curl_setopt_array (), jeśli chcesz.

 2
Author: r00fus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-10 01:20:41

Lepiej to. W jednej linii.

$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
Author: Toxicity,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-13 09:02:41