LIBREOFFICEをPHP(Apatche)経由でPDFに変換するとエラーの対処方法

NO IMAGE

エラー内容

#[Java framework] Error in function createSettingsDocument (elements.cxx). javaldx failed! Warning: failed to read path from javaldx

現象
libreofficeでPDF変換ができない。その他の変換も含む。

プログラム内容

<?php
$command = '/usr/bin/libreoffice –headless –nologo –nofirststartwizard  –convert-to pdf test.xls –outdir ./ 2>&1';
exec ($command);
$output = shell_exec("{$command}  2>&1");
print_r ($output);
?>
 
上記のプログラムは、LibreOfficeを使って、PHPでExcelデータをPDFに変換するというものです。execで直接LibreOfficeのコマンドをたたくわけですが、
エラーが出ていまいます。
 
エラーをそのまま見ていると「javaldx」のパスが読めない(通らない)と見えがちですが、おなじコマンドをSSHで直接叩くとうまくいきます。(パスが通る)
 
LibreOffieの変換コマンドを叩く→OK
PHPでApatche経由で叩く→NG
 
これはLibreOfficeにかぎらずですが、この手のものはアクセス件によるものが多いです。今回ダメなパターンはApatche経由で叩くのでApatcheのプロセス上からプログラムを走らせるとアクセス件の関係でLibreOffieがうまく使えません。
 
その場合、このプログラムのみSUDO(管理者)権限で動かくことになります。
 
プログラム内容改訂
<?php
$command = 'sudo /usr/bin/libreoffice –headless –nologo –nofirststartwizard  –convert-to pdf test.xls –outdir ./ 2>&1';
exec ($command);
$output = shell_exec("{$command}  2>&1");
print_r ($output);
?>
 
このように管理者権限で動かすと無敵ですが、もちろんLinuxのセキュリティーの壁にぶち当たります。
そりゃ~管理者権限を持っていないのに、管理者権限で動かそうとしたら、パスワードを求められて動きません。
 
ですので、一般ユーザーをSUDOで動かせるうにサーバーを調節しないといけません。
参考URL
 
visudoコマンドを叩き、記述をします。
 
▼コメントアウト
#Defaults    requiretty
 
▼追記
Defaults visiblepw
apache ALL=(FTPユーザー名) NOPASSWD: /usr/bin/libreoffice
 
全てのユーザーにlibreofficeのコマンドを立たけるようにするには、
apache ALL=(all) NOPASSWD: /usr/bin/libreoffice
とします。
 
【注意!】
「Defaults    requiretty」をコメントアウトするだけでは、大きな脆弱性を招くので
かならず、追記をしてSUDOを使えるユーザーとコマンドを指定します。
 
/etc/sudoersを直接編集してはいけません。かならずvisudoを使います。前者はエラーがでても、反応しませんが、後者はエラーが有りましたら応答を返してくれます。
 

apacheカテゴリの最新記事