-1

当我在我的 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(): Too little argument!

这是它给出此消息的部分,但它说成功并且未找到 pdf 文件

4

1 回答 1

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));

unoconv/0.7/bin/或者,在调用 shell 之前将目录的绝对路径包含到$PATH环境变量中。例如,参考这篇文章。

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

于 2016-10-22T07:10:30.533 回答