バックグラウンドで OpenOffice サーバーを起動し (インスタンス化されていない場合)、JODConverter でファイル変換を行う必要があります。
シナリオは次のとおりです。
- ユーザーは *.html ファイルをフォームで入力します。
- フォームアクションに対応するPHPスクリプトの $_FILES 変数でファイルを取得します
- shell_exec で bash スクリプトを実行し、それに一時パスを渡して、bash スクリプトのファイルにアクセスし、変換を行います。
これはPHPコードです:
$fichier = $_FILES['html_file'];
if($fichier) {
if(is_uploaded_file($fichier['tmp_name'])) {
if(move_uploaded_file($fichier['tmp_name'],"/var/www/test/doc/".$fichier['name'])) {
$output = shell_exec("./converter {$fichier['name']}");
echo $output;
}
}
}
スクリプト「コンバーター」コード:
#!/bin/bash
fichier=$1
pid=$$
echo RUNNING sOFFICE :
SERVICE=soffice
if P=$(pgrep $SERVICE)
then
echo sOFFICE IS ALREADY RUNNING
else
echo sOFFICE WILL BE START WAIT 5s PLEASE
soffice --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --nofirststartwizard &
sleep 5
fi
echo CONVERSION START
java -jar ./jodconverter/lib/jodconverter-cli-2.2.2.jar ./$1 ./$1.odt
echo CONVERSION END
私の問題は、bash スクリプトの最初の部分にあります。sOFFICE サーバーをバックグラウンドで実行しようとすると、&
.
このスクリプトを端末で実行しようとしましたが、完全に機能します。
だから、bashスクリプトのphp実行に問題があると思います。アイディアがある ?
編集:
Jim Rubensteinの回答のおかげで解決策が見つかりました:
標準出力ストリームと標準エラー ストリームをリダイレクトする
: 交換
soffice --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --nofirststartwizard &
に
soffice --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --nofirststartwizard > /dev/null 2> /dev/null &