0

コマンドラインからこれを実行する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
4

3 に答える 3

0

使用した PHP 呼び出し (チャットから貼り付け):

exec("unoconv -f csv $file")

私の推測では、exec()あまりにも制限された環境を与えているのです。これを回避するには、ポーリングされたディレクトリを設定できます。PHP スクリプトは、変換対象のファイルをポーリングされたディレクトリにコピーし、ファイルが変換されるのを待ちます。

次に、無限ループで実行する bash スクリプト (root またはより安全なユーザーとして実行) を作成し、ポーリングされたディレクトリに着信ファイルがあるかどうかを確認します。bashスクリプトがどのように見えるかについては 、Unixに到着するまでファイルをディレクトリにポーリングし続ける方法を参照してください。

bash スクリプトが着信ファイルを検出すると、unoconv を実行します。

于 2015-12-21T22:26:18.947 に答える
0

libreoffice を直接実行して自分で解決策を見つけました

sudo libreoffice --headless --convert-to csv --outdir $tmp_path $file
于 2015-12-21T22:57:36.923 に答える