2016-03-24 11 views
1

私はしばらく時間がかかります。タスクは、bashスクリプトと2つのパラメータを使用して実行されます。ユーザーがこのタスクを起動すると、彼はこのタスクのステータス(したがって出力)を監視することができます。このために、出力はデータベースに格納され、ユーザーインターフェイスは現在の出力をフェッチします。PHPはbashスクリプトを実行し、出力をデータベースにリダイレクトします

fetch.shを実行して、スクリプトの終了時だけでなく、各出力行をデータベースに挿入するにはどうすればよいですか?

この作品は気に入っていますか?

shell_exec("./script.sh | while read -r line ; do 
    sqlite "insert into history (str) values ("$1"); 
done &> /dev/null &") 
+0

fetch.shはアプリケーションからパラメータ/命令をどのように取得しますか?私はfetch.shがcronの仕事だと思いますか?とにかくデータベースに照会する必要がありますか? – Gerfried

+0

私はPHPのサーバーコード内から呼び出すので、本当に重要ですか? PHPでパラメータを取得して渡します。 – Niels

答えて

0

おそらくこのような何かがあなたのために働くだろう:

$db = new SQLite3('mydb'); 

if(($fp = popen("./script.sh", "r"))) { 
    while(!feof($fp)){ 
     $line = fread($fp, 1024); 
     $db->exec("insert into history (str) values ({$line})"); 
    } 
    fclose($fp); 
} 

UPDATE

結局のところ - 背景

セイでこれを実行するための比較的簡単な方法があります、私たちのスクリプトはlogger.phpと呼ばれています

その場合 - 私たちできる:

nohup php -q logger.php > script.log 2>&1 & 
+0

いいね!私はどのように私はユーザーのために非ブロッキングを行うだろう任意のアイデア? – Niels

+0

PHPは、非ブロッキングスクリプト、マイクロサービスなどに関しては、スーパースターになることはほとんどありません。おそらくhttp://reactphp.org/を試してみてください。そのことは、仕事をするバックグラウンドで動作するサーバーを作成できるようにする必要があります。私はあなたがnodejsであなたのサービスを書くことを考えることもできると思います。 –

+0

この記事もご覧くださいhttp://kvz.io/blog/2009/01/09/create-daemons-in-php/ –

関連する問題