6

我在php中编写了以下函数

public static function convert($originFilePath, $outputDirPath, $toFormat)
{
    $command = 'echo $PATH & UNO_PATH=/usr/lib/libreoffice unoconv --format %s --output %s %s';
    $command = sprintf($command, $toFormat, $outputDirPath, $originFilePath);
    exec($command, $output, $result_var);

    return compact('output', 'result_var', 'outputDirPath', 'originFilePath', 'toFormat');
}

它没有生成任何错误消息,也没有生成任何 pdf 文件。

在终端中,当我直接将 unoconv 作为 www-data 运行时,我没有任何问题。

这是我执行后的结果:

2013-05-26 03:05:30 Error: Array
(
    [output] => Array
        (
            [0] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
        )

    [result_var] => 1
    [outputDirPath] => /var/virtual/storyzer.com/cake-json/ltequotationapp/webroot/outputfiles/Excel/2
    [originFilePath] => /var/virtual/storyzer.com/cake-json/ltequotationapp/webroot/outputfiles/Excel/2/dsadas.xlsx
    [toFormat] => pdf
)

请指教。

4

3 回答 3

5

问题是我使用的是 Nginx 和 PHP-FPM。

在 Nginx 中,默认情况下不声明 PATH。

所以有2个解决方案。

1)你在 Nginx 的 fastcgi 参数中声明它。

这里

2)您在运行代码putenv()之前在脚本中声明它。unoconv

喜欢

putenv('PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/opt/node/bin');

我还想补充一点,某种故障排除方法帮助我意识到了这个问题。见这里

于 2013-06-03T02:42:08.383 回答
2

有关可能的解决方案,请参见此处

摘自帖子...

这就是我通过在 Cent OS 6.2(unoconv 版本 0.6 和 LibreOffice 3.4.5.2)上运行的 apache / php 代码使 unoconv 工作的方法:(这只是一种解决方法 - 我不知道根本原因)

将 apache 用户从 /sbin/nologin 更改为 /bin/bash(这在 /etc/passwd 文件中完成) 添加新用户 unoconv 添加了一个新文件 /etc/sudoers.d/unoconv,其内容如下:

apache ALL=(unoconv) NOPASSWD: /usr/bin/unoconv (注意我的 unoconv 程序在这个位置 /usr/bin/unoconv - 你可以使用 which unoconv 找到它)

使用 visudo 注释掉以下行(通过在行首添加 # )

#默认要求

重启 sshd 和 httpd 服务

使用 php exec() 函数像这样运行 unoconv(您需要更改输入文件名和输出目录):

exec('sudo -u unoconv /usr/bin/unoconv -f pdf -o bankgenerated Teacher_bulk_upload.csv');

希望这对你有用

于 2013-05-31T05:14:41.403 回答
0

我遇到了同样的问题,并通过在 /var/www/ .cache 和 .config 中添加 unoconv 所需的两个子文件夹来解决它

Env Ubuntu 18.04 服务器 Apache,unoconv 0.7,平台 posix/linux,python 3.6.9(默认,2021 年 12 月 8 日,21:08:43),[GCC 8.4.0],LibreOffice 6.0.7.3

    user@ip-*-*-*-*:/var/www$ sudo mkdir .cache
    user@ip-*-*-*-*:/var/www$ sudo chown -R www-data:www-data .cache/
    user@ip-*-*-*-*:/var/www$ sudo chmod -R 744 .cache/
    user@ip-*-*-*-*:/var/www$ sudo mkdir .config
    user@ip-*-*-*-*:/var/www$ sudo chown -R www-data:www-data .config/
    user@ip-*-*-*-*:/var/www$ sudo chmod -R 744 .config/

www-data 的主文件夹是 /var/www/,默认设置为 root 用户,unoconv 无法创建缓存和配置所需的文件夹。

检查您的 www-data $HOME

sudo cat /etc/passwd | grep www-data
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

我认为更改 /var/www/ (到 www-data 用户和组)的权限是不安全的,但是可以添加具有 www-data 权限的 .cache 和 .config 文件夹。让一些专家证实。

PS生成器返回有关docx版本的错误,但生成了pdf

$command = 'unoconv -f pdf ' . $path.$file;
exec($command, $output);
于 2022-01-28T10:02:18.017 回答