Convertir la ligne de commande cURL en PHP cURL

Je n'ai jamais fait de boucle avant, donc j'ai besoin d'aide. J'ai essayé de résoudre ce problème à partir d'exemples mais je ne peux pas y penser!

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 dans un wiki via une api.

J'aurais besoin d'incorporer cette commande curl dans un script PHP que je construis.

Comment puis-je traduire cette commande curl pour 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 le authentification mais je n'ai pas de problème à mettre cela en texte clair dans le script car cela sera exécuté par moi seulement.

@ test.png doit être une variable telle que $filename

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

Merci pour toute aide.

31
demandé sur miku 2009-12-21 14:35:52

7 réponses

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

28
répondu miku 2015-04-28 18:03:23

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);
5
répondu manny 2009-12-22 20:30:47

Quelle que soit la boucle que vous avez en ligne de commande, vous pouvez la convertir en PHP avec cet outil:

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

Cela m'a aidé après de longues heures de recherche de solution! Espérons qu'il saura vous aider 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);
5
répondu Vladimir Despotovic 2017-10-20 11:20:49

Vous avez besoin ...

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

"convertissez instantanément les commandes curl en code PHP"

3
répondu kris 2017-05-08 23:22:06

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

2
répondu Daniel Stenberg 2009-12-22 21:22:49

En utilisant la réponse de MYYN comme point de départ, et cette page {[3] } comme 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 en ce 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 souhaitez.

2
répondu r00fus 2011-02-10 01:20:41

Mieux ceci. Dans 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);
1
répondu Toxicity 2015-05-13 09:02:41