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.
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
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);
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);
Vous avez besoin ...
Curl de PHP : https://incarnate.github.io/curl-to-php/
"convertissez instantanément les commandes curl en code PHP"
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
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.
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);