2009-12-21 10 views
30

Je n'ai jamais fait de boucle avant donc j'ai besoin d'aide. J'ai essayé de trouver des exemples mais je n'arrive pas à comprendre!Convertir la ligne de commande cURL en PHP cURL

J'ai une commande curl que je peux exécuter avec succès à partir d'une ligne de commande linux (ubuntu) qui place un fichier sur un wiki via une API.

Je devrais incorporer cette commande curl dans un script PHP que je construis.

Comment puis-je traduire cette commande curl afin qu'elle fonctionne dans un 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 contient l'authentification, mais je n'ai pas un problème de mettre cela en texte clair dans le script que ce sera géré par moi seulement.

@ test.png doit être une variable comme nom de fichier de $

http://hostname/@api/deki/pages/=TestPage/files/= doit être une variable telle que pageurl $

de Merci pour toute aide.

+0

https://incarnate.github.io/curl-to-php/ ressemble à un bon outil ... – Shatiz

Répondre

27

un point de départ:

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

... 
?> 

Voir aussi: http://www.php.net/manual/en/function.curl-setopt.php

5

Essayez ceci:

$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

j'ai posté une question en double comme ceci: http: // stackoverflow. com/questions/38064372/curl-commande-en-php.Cette solution est assez sympa et je me demande si j'ai des 'vars' dans la commande curl comme' curl -b $ TEST -X PUT --data-binaire $ CHECK' et ainsi de suite. Cela fonctionnerait-il encore? –

+0

@PratikJaiswal bien sûr cela va fonctionner. Mais vous devez utiliser des guillemets au lieu de guillemets simples. cela signifie que vous avez remplacer le début et la fin de "avec" et tous "dans votre code avec ' – ananda

2

l'option --libcurl a été ajouté à cet effet, même si elle fait un C programme, je pense qu'il devrait être assez facile de traduire en PHP

2

en utilisant MY La réponse de YN comme point de départ, et this page comme une référence sur la façon d'envoyer des données POST en utilisant PHP cURL, voici ma suggestion (je travaille sur quelque chose de très similaire au moment):

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

Vous pouvez probablement optimiser les nombreux curl_setopts avec l'utilisation d'un appel curl_setopt_array() si vous le désirez.

1

Mieux vaut. En une ligne.

$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

Vous avez besoin ...

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

"convertir instantanément les commandes CURL code PHP"

+0

Il ne couvre pas toutes les options curl disponibles - pour la liste complète des drapeaux PHP pour les options de boucle voir: http : //php.net/manual/fr/function.curl-setopt.php – kris

+0

Excellent outil kris, merci! –

0

Whicvhever cURL que vous avez en ligne de commande, vous pouvez le convertir en PHP avec cet outil:

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

Il m'a aidé après de longues longues heures de recherche d'une solution! J'espère que cela vous aidera aussi! Votre solution est la suivante:

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