L'exécution de Curl avec PHP
Je suis en train d'utiliser Docverter pour convertir LaTeX/markdown des fichiers au format PDF mais j'ai du mal à l'utiliser PHP pour faire du ROULAGE pour accéder à Docverter via leur API. Je suis sais que je ne suis pas stupide en b/c je peux obtenir que cela fonctionne en adaptant le script shell dans ce Docverter exemple et en cours d'exécution en ligne de commande (Mac OSX).
Aide de PHP exec()
:
$url=$_SERVER["DOCUMENT_ROOT"];
$file='/markdown.md';
$output= $url.'/markdown_to_pdf.pdf';
$command="curl --form from=markdown \
--form to=pdf \
--form input_files[]=@".$url.$file." \
http://c.docverter.com/convert > ".$output;
exec("$command");
Cela donne pas de message d'erreur, mais ne fonctionne pas. Est-il un problème de chemin d'accès quelque part?
Mise à JOUR @Jean suggestion, voici un exemple d'utilisation de PHP curl_exec()
adapté de ici. Malheureusement, cela ne fonctionnera pas non plus mais au moins il donne des messages d'erreurs.
$url = 'http://c.docverter.com/convert';
$fields_string ='';
$fields = array('from' => 'markdown',
'to' => 'pdf',
'input_files[]' => $_SERVER['DOCUMENT_ROOT'].'/markdown.md',
);
//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
//execute post
$result = curl_exec($ch);
//close connection
curl_close($ch);
shell_exec
?-@Dainis, pas encore, j'ai pris de l'
exec()
travailler sur d'autres choses et admettre que je ne suis pas sûr de la distinction avec shell_exec()
. La raison pour laquelle je ne veux pas exécuter un script shell est parce que les noms de fichiers et les chemins d'accès va changer donc j'ai besoin de ces être variables.Pourquoi ne pas vous utiliser la boucle de fonctions écrites pour PHP au lieu de exec?
je serais heureux de PHP
curl()
que je n'étais pas sûr de la façon de faire qui soit. J'étais arrivé exec()
de travailler sur autre chose si c'est ce que j'ai commencé avec. Pourriez-vous fournir une réponse à l'aide de curl()
?Regarder les docs pour
curl_init
, curl_setopt
, curl_exec
.OriginalL'auteur tim peterson | 2013-02-15
Vous devez vous connecter pour publier un commentaire.
J'ai résolu mon problème. Il y avait deux problèmes principaux avec le code ci-dessus:
1) Le
$fields
tableau a été incorrectement formaté pour leinput_files[]
. Il avait besoin d'un@/
et le mime-type de déclaration (voir le code ci-dessous)2) Le
curl_exec()
de sortie (le fichier nouvellement créé contenu) nécessaires pour être retournée, et pas seulementtrue/false
qui est cette fonction du comportement par défaut. Ceci est accompli par le réglage de la boucle de l'optioncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
(voir code ci-dessous).De travail complète, exemple
OriginalL'auteur tim peterson