当我在我的mac xampp中运行此phpscript时,它返回成功但不生成pdf文件。但是当我从mac终端运行时,它能够从docx文件创建pdf文件。
<?php
$source_file = 'c++ documentation.docx';
$cmd = "unoconv/0.7/bin/unoconv";
$command = sprintf("/Applications/XAMPP/xamppfiles/htdocs/phpdocx/unoconv/0.7/bin/unoconv -h -v -f pdf -o /phpdocx/docimages/testing.pdf %s 2>&1",
escapeshellarg($source_file));
echo shell_exec($command);
echo "yoyo";
if(shell_exec($command)){
echo "successful";
}else{
echo "failed";
}
?>
这是我编辑的代码,它说sprintf():参数太少了!
答案 0 :(得分:0)
您需要转义shell参数,否则shell可能会解释其特殊字符:
$source_file = 'c++ documentation.docx';
$command = sprintf("unoconv/0.7/bin/unoconv -h -v -f pdf -o /phpdocx/docimages/testing.pdf %s 2>&1",
escapeshellarg($source_file));
提供unoconv/0.7/bin/unoconv
可执行文件的完整(绝对)路径,因为它似乎无法从您的$PATH
环境变量中获取:
$command = sprintf("/path/to/unoconv/0.7/bin/unoconv -h -v -f pdf -o /phpdocx/docimages/testing.pdf %s 2>&1",
escapeshellarg($source_file));
或者,在调用shell之前,在unoconv/0.7/bin/
环境变量中包含$PATH
目录的绝对路径。例如,请参阅this帖子。
显然,$source_file
应该在当前目录中。否则,该命令将无法访问它。