2009-12-21 17 views
30

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

У меня есть команда curl, которую я могу успешно запустить из командной строки linux (ubuntu), которая помещает файл в wiki через 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 должен быть переменной, такие как $ имя_файла

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

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

+0

https://incarnate.github.io/curl-to-php/ выглядит как хороший инструмент ... – Shatiz

ответ

27

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

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

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); 
+0

я отправил дубликат вопрос, как это: HTTP: // StackOverflow. ком/вопросы/38064372/локон-команда-в-PHP.Это решение довольно приятно и интересно, что, если у меня есть некоторые «варсы» в команде curl, такие как 'curl -b $ TEST -X PUT --data-binary $ CHECK' и так далее. Будет ли это работать? –

+0

@PratikJaiswal, конечно, это сработает. Но вам нужно использовать двойные кавычки вместо одиночных кавычек. это означает, что вы замените запуск и завершение «с» и все «в вашем коде с помощью« – ananda

2

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

2

Использование MY Ответ YN в качестве отправной точки, и this page в качестве ссылки о том, как передавать данные 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(), если хотите.

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

Вам нужно ...

локон к PHP: https://incarnate.github.io/curl-to-php/

"Мгновенно конвертировать свертыванию команды PHP код"

+0

». Однако он не охватывает все доступные варианты завивки - полный список флагов PHP для вариантов завивки см .: http : //php.net/manual/en/function.curl-setopt.php – kris

+0

Отличный инструмент kris, спасибо! –

0

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); 
Смежные вопросы