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 パラメータで宣言します。

ここを参照してください。

putenv()2) コードを実行する直前に、スクリプトで宣言し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 bank generated Teacher_bulk_upload.csv');

これがうまくいくことを願っています

于 2013-05-31T05:14:41.403 に答える
0

私は同じ問題を抱えていて、unoconvに必要な /var/www/ .cache と .config に2つのサブフォルダーを追加することで解決しました

Env Ubuntu 18.04 サーバー Apache、uno​​conv 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 ユーザーおよびグループに) 変更するのは安全ではないと思いますが、.cache および .config フォルダーを www-data パーミッションで追加しても問題ありません。一部の専門家に確認させてください。

PSジェネレーターはdocxバージョンに関するエラーを返しますが、pdfは生成されます

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