如何从php文件启动unoconv

时间:2012-07-11 07:49:25

标签: php shell pdf command

我想从脚本php启动命令“unoconv”。

$command = '/usr/bin/unoconv --server localhost --port 2002 --format=pdf file.rtf >/dev/null 2>/dev/null';
$rc = system( $command );
echo $rc;

该命令没有返回结果,也没有创建文件。

我认为访问www-data和unoconv是一个问题。

当我在shell中启动命令时,会创建该文件。

有什么想法吗?

6 个答案:

答案 0 :(得分:6)

您可以将命令unoconv添加到sudoers。 我是这样做的:

我在/ usr / local / bin中创建了包装器bash脚本,其中我有unoconv命令。

#!/bin/bash

if [ -z "$1" ]; then
    echo "Must pass file";
    exit 10;
fi

/usr/bin/unoconv -f pdf $1.rtf

之后我在/etc/sudoers.d中添加了条目:

www-data    ALL=NOPASSWD: /usr/local/bin/unoconv.sh

现在你可以在php中调用脚本:

exec('sudo /usr/local/bin/unoconv.sh '.$fileName);

答案 1 :(得分:1)

尝试运行

$output = `/usr/bin/unoconv --server localhost --port 2002 --format=pdf file.rtf`;

而是看错误消息。

答案 2 :(得分:0)

运行Apache时,我找到了解决此问题的方法。您必须为www-data用户

创建主文件夹
 sudo mkdir /home/www-data
 sudo chown www-data /home/www-data

最后,我们必须编辑www-data用户

的主目录和默认shell
sudo vim /etc/passwd

对于www-data的输入,最后两个字符串必须分别用

替换
/home/www-data
/bin/bash

答案 3 :(得分:0)

这很简单

webapp

编辑套件以配置您的配置。

它只是有效!

答案 4 :(得分:0)

对我来说是这样的:

<div style="display:none" id="dummy"></div>

当然你必须先做这个(如果你从网上发布你的php脚本):

$cmd = "/usr/bin/unoconv -f docx files/thefile";
shell_exec($cmd);

答案 5 :(得分:0)

您可能遇到LibreOffice,OpenOffice或soffice无法写入当前用户的$HOME目录的问题。

通过运行以下命令,我能够识别正确的$HOME目录并查看正在生成的错误。

$cmd = 'echo $HOME & unoconv -vvvv --format %s --output %s %s 2>/tmp/unoconv.debug.txt';
exec($cmd);

$cmd的详细输出将生成写入文件:/tmp/unoconv.debug.txt

在我的情况下,输出是:

Verbosity set to level 5
DEBUG: Connection type: socket,host=127.0.0.1,port=2002,tcpNoDelay=1;urp;StarOffice.ComponentContext
DEBUG: Existing listener not found.
DEBUG: Launching our own listener using /usr/lib64/libreoffice/program/soffice.bin.
Failed to connect to /usr/lib64/libreoffice/program/soffice.bin (pid=32012) in 6 seconds.
Connector : couldn't connect to socket (Success)
Error: Unable to connect or start own listener. Aborting.

命令运行似乎与root一样好,而sudo -u nobody。看到这个输出后,我意识到主目录存在问题。

感谢 Dag Wieers 的帮助 - 我希望这有助于其他unoconv开发人员进行调试。