首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PHP执行Curl

用PHP执行Curl
EN

Stack Overflow用户
提问于 2013-02-15 16:29:16
回答 1查看 35.7K关注 0票数 4

我试图使用医生将LaTeX/markdown文件转换为PDF格式,但在使用通过API访问Docverter进行CURL 通过API访问Docverter时遇到了困难。我知道我不是一个完全愚蠢的b/c,我可以让它工作,适应shell脚本在这个Docverter示例中并从命令行(Mac )运行。

使用PHP的exec()

代码语言:javascript
复制
$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");

这不提供错误消息,但不起作用。哪里有路径问题吗?

根据@John的建议更新,下面是一个使用来自这里curl_exec()的示例。不幸的是,这也不起作用,但至少它会给出错误消息。

代码语言:javascript
复制
$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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-15 23:14:16

我自己解决了问题。上述代码存在两个主要问题:

1) $fields数组的input_files[]格式不正确。它需要一个@/和mime类型的声明(参见下面的代码)

2)需要返回curl_exec()输出(实际新创建的文件内容),而不仅仅是true/false,这是该函数的默认行为。这是通过设置curl选项curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);来实现的(参见下面的代码)。

全工作示例

代码语言:javascript
复制
//set POST variables
$url = 'http://c.docverter.com/convert';
$fields = array('from' => 'markdown',
    'to' => 'pdf',
    'input_files[]' => "@/".realpath('markdown.md').";type=text/x-markdown; charset=UTF-8"
    );

//open connection
$ch = curl_init();

//set options 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data"));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //needed so that the $result=curl_exec() output is the file and isn't just true/false

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);

//write to file
$fp = fopen('uploads/result.pdf', 'w');  //make sure the directory markdown.md is in and the result.pdf will go to has proper permissions
fwrite($fp, $result);
fclose($fp);
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14899037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档