6

我想从脚本 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 中启动命令时,会创建文件。

任何想法?

4

6 回答 6

7

You can add command unoconv to sudoers. I do this in this way:

I create wrapper bash script in for example /usr/local/bin where I have command unoconv.

#!/bin/bash

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

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

after this I adding entry in /etc/sudoers.d:

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

And now you can call script in php:

exec('sudo /usr/local/bin/unoconv.sh '.$fileName);
于 2012-07-11T08:01:04.110 回答
1

尝试运行

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

而是查看错误消息。

于 2012-07-11T07:59:07.420 回答
1

对我来说是这样的:

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

当然,您必须事先执行此操作(如果您从网络上启动 php 脚本):

chown -R www-data:www-data files/
于 2016-01-26T18:31:09.293 回答
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
于 2014-09-27T23:55:23.720 回答
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 开发人员进行调试。

于 2017-04-21T22:05:47.613 回答
0

就这么简单

$output = shell_exec('/opt/libreoffice5.0/program/python unoconv -f rtf test.html');

编辑路径以适应您的配置。

它只是工作!

于 2015-09-28T07:16:45.700 回答