2012-01-29 40 views
11

プログラムを使って文書をプログラムに変換するために、freebsd-serverにliblessofficeをインストールしました(例:odt-> pdf)。それはコマンドラインから動作します!しかし、私の目標は、PHPからそれを行うことができるようにすることです。これは、Webユーザー(www)がlibreofficeを実行できることを要求します。しかし、それはできません。php exec()からlibreofficeを実行する

自分のユーザーとしてLibreOfficeのを実行している場合は、私が取得:

%libreoffice --headless -convert-to pdf Litteraturundervisningogit.doc 
javaPathHelper: not found #This should not be a problem, says people on the net. 
convert /usr/home/bundsgaard.net/www/jeppe/foredrag/Litteraturundervisningogit.doc -> 
/usr/home/bundsgaard.net/www/jeppe/foredrag/Litteraturundervisningogit.pdf using writer_pdf_Export 
% 

私はルートと同じコマンドをしようとした場合、それは動作しません。同じことが、PHPからWWW-ユーザーの問題です:

sp# libreoffice --headless -convert-to pdf Litteraturundervisningogit.doc 
javaPathHelper: not found 
sp# 

問題は、LibreOfficeの以外のユーザーとして実行したくない理由ので、私は知らない、私はLibreOfficeのから任意の情報を得ることはありませんということです私自身。

私の質問は次のとおりです。PHPでexec()経由でlibreofficeを実行する権限をwwwユーザに与えるにはどうすればよいですか?

+2

"--outdir" LibreOfficeのコマンドから同じforlderはそれだけでPATHの問題ですか?それぞれの '$ PATH'には何がありますか? – Wrikken

+1

rootユーザーの '%sudo php program.php'をコマンドラインでテストしましたが、クライアントは権限を持っていますか? –

答えて

3

PHPのexecを使用するのではなく、OpenOffice.org UNO Programming APIへのアクセスを提供するPHP5モジュールPUNOの使用を検討することをお勧めします。

1

/usr/local/sbinをPATH環境変数に先行させた後、私は同じ問題を抱えていました(ありがとうWrikken)。私はlibreofficeをApacheの下でwww-dataとして実行することができました。

+0

@nikyspag先生、私とあなたのコードを共有してください。 –

10

私は変換コマンドを実行する前に、迅速export HOME=/tmpでこの問題を解決するために管理し、これは魔法だ仕事がどこかに書き込み可能なLibreOfficeのを提供します。

+0

これは非常にスマートです...おそらく私は多くの時間を節約しました。ありがとう。 – Scalpweb

+0

これは、私のためにPHPからの変換の問題を解決しますが、これが正確に何をしているか教えてください。これはなぜハンギングコンバージョンを解決するのですか? – Rvanlaak

+0

Libreofficeはシャドー/一時/隠しファイルをユーザー(PHPを実行しているユーザー、通常はapacheまたはhttpまたはwww-data)のホームディレクトリに書き込みます。 Webサーバから(CLIではなく)WebサーバからPHPを実行しているユーザは、通常はホームディレクトリを持っていないので、$ HOME env変数は空白になるか、設定されず、libreofficeは/に書き込めません。したがって、これを明示的にtmpに設定すると、libreofficeに書き込む権限が与えられます。 HTH –

0

は約Universal Network Objects (UNO)DocvertJODConverterjODconverterpyODconverter)を参照してください、いくつかの「プラグアンドプレイ」最終ユーザツールがあります。そのすべては、PHPによってWebサービスまたはexecとして呼び出すことができます。

0

私はあなたがexec()またはshell_exec()を実行する前にput configパスをお勧めします。

IE:

// Vars 
putenv('PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin'); 
putenv('HOME=' . $outputdir); 

$ outputDirの=のchmod 777と