tim*_*son 4 php markdown curl latex docverter
我正在尝试使用Docverter将LaTeX/markdown文件转换为PDF,但是使用PHP进行CURL 以通过其API访问Docverter时遇到问题.我知道我不是一个完全白痴b/ci可以让这个工作适应这个Docverter示例中的shell脚本并从命令行(Mac OSX)运行.
使用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");
Run Code Online (Sandbox Code Playgroud)
这不会给出错误消息,但不起作用.某处有路径问题吗?
更新基于@ John的建议,这是一个使用PHP curl_exec()改编自这里的例子.不幸的是,这也不起作用,至少它提供了错误消息.
$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);
Run Code Online (Sandbox Code Playgroud)
tim*_*son 11
我解决了自己的问题.上面的代码有两个主要问题:
1)$fields数组格式不正确input_files[].它需要一个@/和mime类型的声明(见下面的代码)
2)curl_exec()需要返回输出(实际新创建的文件内容),而不仅仅是true/false此函数的默认行为.这可以通过设置curl选项来完成curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);(参见下面的代码).
完整的工作示例
//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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27239 次 |
| 最近记录: |