【问题标题】:unoconv return error when running as www-data作为 www-data 运行时 unoconv 返回错误
【发布时间】:2015-12-21 13:44:44
【问题描述】:

当从命令行以root 运行它时,它可以工作

unoconv -f csv $file

但是以www-data 运行时会返回此错误

Traceback (most recent call last):
  File "/usr/bin/unoconv", line 1114, in <module>
    office_environ(of)
  File "/usr/bin/unoconv", line 203, in office_environ
    os.environ['PATH'] = realpath(office.basepath, 'program') + os.pathsep + os.environ['PATH']
  File "/usr/lib/python3.4/os.py", line 633, in __getitem__
    raise KeyError(key) from None
KeyError: 'PATH'

更新

echo shell_exec('echo $PATH');
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

【问题讨论】:

  • www-data$PATH 和根的$PATH 的值是多少?在运行命令之前尝试设置www-data 的路径。见dirtyvital.wordpress.com/2012/11/11/…
  • www-data 的路径是什么意思?
  • 我的意思是将路径设置为不为空的东西。这样,密钥将存在于 os.environ 字典中。例如,您可以将其设置为 . 或空目录的路径。
  • 更新了我的问题..
  • 好吧,好像不是空的。 shell_exec 是什么——你在使用 PHP 吗?如果是这样,请添加该标签,并发布包含该调用的实际 PHP 代码。我以前没有使用过 PHP,但也许我可以帮忙。

标签: csv libreoffice unoconv


【解决方案1】:

centos 7.3 with php via php-fpm php 中的 env 由 php-fpm 清理

你可以使用putenv在php代码中设置evn["PATH"],例子

putenv("PATH=/sbin:/bin:/usr/sbin:/usr/bin"); 
var_dump(shell_exec('unoconv -vvvv -f pdf -o 123.pdf 123.doc));

或者你可以设置 env 使用一行 shell cmd

var_dump(shell_exec('PATH=/sbin:/bin:/usr/sbin:/usr/bin'.' unoconv -vvvv -f pdf -o 123.pdf 123.doc));

或者你可以更改 /etc/php-fpm.d/www.conf 以将 env 传递给 php,添加这一行

clean_env = no

然后重启php-fpm

systemctl restart php-fpm.service

【讨论】:

    【解决方案2】:

    您使用的 PHP 调用(从聊天中粘贴):

    exec("unoconv -f csv $file")
    

    我的猜测是exec() 给你的环境太有限了。要解决此问题,您可以设置一个轮询目录。 PHP脚本会将要转换的文件复制到轮询目录中并等待文件转换。

    然后创建一个 bash 脚本(以 root 用户或更安全的用户身份运行)以无限循环运行并检查轮询目录中是否有任何传入文件。请参阅 How to keep polling file in a directory till it arrives in Unix 了解 bash 脚本的外观。

    当 bash 脚本看到传入的文件时,它会运行 unoconv。

    【讨论】:

      【解决方案3】:

      直接运行libreoffice自己找到了解决办法

      sudo libreoffice --headless --convert-to csv --outdir $tmp_path $file
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-03
        • 2012-05-25
        • 2018-06-21
        • 2017-06-24
        相关资源
        最近更新 更多