2015-09-03 39 views
3

我试图通过命令行使用unoconv通过PHP将word文档转换为PDF。我使用Symfony Process Component通过命令行运行命令。使用unoconv通过Symfony组件转换DOC为PDF

public function run() 
{ 
    $cmd = 'unoconv --listener & unoconv ' . $this->path; 

    //Tested this to check for permissions and this worked. 
    //$cmd = 'touch /vagrant/public/testfile.pdf'; 

    $process = new Process($cmd); 
    $process->run(); 

    return $process->getOutput(); 
} 

这就产生了无输出,并且不转换的文件。但是,如果我回显$cmd并将其粘贴到CLI中,它会按预期方式转换文件,并随着日志输出进行日志输出。

任何想法可能是什么问题?

编辑: 我已经尝试过,因为:调用symfony的类mustRun() & start()方法。

mustRun()提供了以下错误:

"The command '//command//' failed. Exit Code: 251(Unknown error) Output: ================ Error Output: ================

添加日志代码迭戈费里的建议后,我得到的日志文件Error: Unable to connect or start own listener. Aborting.;但我无法在网上找到很多有用的信息。

+0

按以下顺序尝试:(1)指定unoconv的完整路径,(2)用'escapeshellarg'转义路径,(3)转义'&'。完整的命令可能如下所示:'/ usr/bin/unoconv --listener \&unoconv'。 escapeshellarg($ this-> path);' – bishop

+0

忘了提及,我已经试过#1。 #2和#3没有变化。 – Kiee

+0

错误输出文字?或者你是否用错误中显示的实际命令替换了'// //命令//''?无论如何,基于[手册页](http://linux.die.net/man/1/unoconv),使用Process与后台进程可能存在问题。尝试一次性版本:'$ cmd = sprintf('/ usr/bin/unoconv -f pdf%s',escapeshellcmd($ this-> path));'。 – bishop

回答

0

请阅读this section,还请检查troubleshooting section

shell可能缺少unoconv/LibreOffice正常工作的一些重要环境变量(PATH,HOME,...)。建议您使用unoconv调用LibreOffice python二进制文件,而不是将其保留为unoconv以确定LibreOffice和python的位置。