エラー内容
#[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で動かせるうにサーバーを調節しないといけません。
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を使います。前者はエラーがでても、反応しませんが、後者はエラーが有りましたら応答を返してくれます。