2016-10-22 86 views
-1

当我在我的mac xampp中运行这个phpscript时,它会返回成功但不生成pdf文件。但是当我从mac终端运行它可以从docx文件创建pdf文件。Unoconv不在php脚本中创建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():太少的说法!

This is the part where it give this message but it said successful and not pdf files were found

+0

因此,当您通过CLI运行脚本时脚本成功,并且在通过Web服务器请求脚本时失败,对吗? –

+0

是在终端CLI成功,但在XAMPP网络服务器失败 – user3711175

+0

我会在某处打印命令,然后尝试从CLI运行它 –

回答

0

你需要跳脱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)); 

或者,包括abs调用shell之前将unoconv/0.7/bin/目录的olute路径转换为$PATH环境变量。例如,请参阅this

显然,$source_file应该在当前目录中。否则,该命令将无法访问它。

+0

呃我该怎么做?它被称为终端并放入它吗? – user3711175

+0

/Applications/XAMPP/xamppfiles/htdocs/phpdocx/unoconv/0.7/bin/unoconv 你的意思是这样的真实路径? – user3711175

+0

它仍然是相同的,它给了我这个用法:unoconv [options] file [file2 ..]从LibreOffice unoconv选项支持的任何格式转换为:-c,--connection = string使用自定义连接字符串-d, --doctype = type指定文档类型(文档,图形,演示文稿,电子表格)-e,--export = name = value设置导出过滤器选项。 -e PageRange = 1-2 -f,--format = format指定输出格式-F,--field = name = value用值替换用户定义的文本字段,例如。 -F Client_Name =“Oracle”-i,--import = string设置导入过滤器选项字符串例如。 -i utf8 -l但它说成功 – user3711175