0

バックグラウンドで 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 &
4

1 に答える 1

4

この問題は通常、コマンドの最後に & を追加するだけで解決されます。ただし、標準出力ストリームと標準エラー ストリームもリダイレクトする必要があるようです。ここで、スタック オーバーフローに関する同じ質問への回答を見つけました。

php バックグラウンドプロセスを実行する

このプロセスがバックグラウンドで実行されないのはなぜですか?

于 2012-05-16T11:06:05.083 に答える