2009-12-21 23 views
30

Non ho mai fatto alcun ricciolo prima di così ho bisogno di aiuto. Ho provato a capirlo dagli esempi ma non riesco a capirlo!Conversione da riga di comando cURL a PHP cURL

Ho un comando di arricciatura che posso eseguire correttamente da una riga di comando linux (ubuntu) che mette un file in un wiki attraverso un'api.

Avrei bisogno di incorporare questo comando di arricciatura in uno script PHP che sto costruendo.

Come posso tradurre questo comando di arricciatura in modo che funzioni in uno script 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 contiene l'autenticazione, ma non ho un problema mettere questo in chiaro nello script come questo verrà eseguito solo da me.

@ test.png deve essere una variabile, ad esempio $ nomefile

http://hostname/@api/deki/pages/=TestPage/files/= deve essere una variabile come $ PAGEURL

Grazie per qualsiasi aiuto.

+0

https://incarnate.github.io/curl-to-php/ sembra un buon strumento ... – Shatiz

risposta

27

un punto di partenza:

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

... 
?> 

Vedere anche: http://www.php.net/manual/en/function.curl-setopt.php

5

Prova questa:

$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

Ho postato una domanda duplicato come questo: http: // StackOverflow. com/domande/38064372/curl-comando-in-php.Questa soluzione è molto carina e mi chiedo se avrò alcuni 'vars' nel comando di arricciatura come' curl -b $ TEST -X PUT --data-binary $ CHECK' e così via. Funzionerebbe ancora? –

+0

@PratikJaiswal ovviamente funzionerà. Ma devi usare le doppie virgolette invece delle virgolette singole. ciò significa che hai rimpiazzato l'inizio e la fine di "con" e tutto "nel tuo codice con" – ananda

2

l'opzione --libcurl è stata aggiunta a questo scopo, anche se fa un C programma Penso che dovrebbe essere abbastanza facile da tradurre in PHP

2

Utilizzo di MY La risposta di YN come punto di partenza, e this page come riferimento su come inviare i dati POST utilizzando PHP cURL, ecco il mio suggerimento (sto lavorando su qualcosa di molto simile al momento):

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

probabilmente si può ottimizzare i molti curl_setopts con l'uso di una chiamata a curl_setopt_array() se lo desideri.

1

Meglio questo. In una riga.

$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

È necessario ...

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

"Immediatamente converta i comandi ricciolo di codice PHP"

+0

Non copre, tuttavia, tutte le opzioni di arricciatura disponibili - per l'elenco completo dei flag PHP per le opzioni di arricciatura vedi: http : //php.net/manual/en/function.curl-setopt.php – kris

+0

Ottimo strumento kris, grazie! –

0

Whicvhever cURL che avete in linea di comando, puoi convertirlo in PHP con questo strumento:

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

Mi ha aiutato dopo lunghe lunghe ore di ricerca di una soluzione! Spero che ti aiuti anche tu! La soluzione è questa:

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