2011-06-25 11 views
1

ffmpegを動作させるために使用しているexecコマンドがあります。 testing123.phpでphpスクリプトで出力2>&1を解析します

$process = exec("/usr/local/bin/ffmpeg -i /home/g/Desktop/cave.wmv -deinterlace 
-acodec libfaac -ab 96k -ar 44100 -vcodec libx264 -s 480x320 -f flv /home/g/Desktop 
/file.flv 2>&1 | php testing123.php") ; 

あなたは、ファイルが最初に他のファイル内のexecコマンドから実行した場合にのみ、私は1つのデータベースのエントリを取得推測していることとして、私は、しかし

$h = fopen('php://stdin', 'r'); $str = fgets($h); fclose($h); 
//topic removed 

$sql = 'INSERT INTO table 
(id,status) VALUES(?,?)'; 
$stmt3 = $conn->prepare($sql); 
$result=$stmt3->execute(array(rand(),$str)); 

を使用しています。 ファイルへの出力をカップル秒ごとにデータベースに挿入できるように、ファイルなどを実行し続ける方法はありますか?

答えて

3

ループはwhileループを使用する必要があります。 fgetsのマニュアルにいくつかの例があります。ドキュメントのコメントの

$h = fopen('php://stdin', 'r'); 

while (($str = fgets($h)) !== false) 
{ 
    $sql = 'INSERT INTO ...'; 

    mysql_query($sql); 
} 

fclose($h); 

一つstream_get_line代わりのfgetsを使用することを提案しています。興味がある場合は、直接リンクhttp://www.php.net/manual/en/function.fgets.php#86319です。

+0

美しい仲間。わたしは、あなたを愛しています。これをしばらく乱してしまった。もう2つの質問だけ。これの効率性についてどう思いますか?このプロセスを実行するスクリプトが複数あるとしましょう。また、解析される情報の間隔を制御するために、sleepを使用しますか? – Scarface

+1

@Scarface - 同じPHPスクリプトを同時に実行する複数のスクリプトには何の問題もありません。コントローラーのインターバルに関しては、私はあなたが何をコントロールするのではないかと恐れています。情報はあなたのスクリプトを通してパイプされているので、 'ffmpeg'バイナリはスリープする必要があります。あなたが行を読むときに挿入することに何も問題はありません。あなたが考えることができることは、配列を行に挿入することです。そして、 'ffmpeg'が実行終了すると、PHPスクリプトは配列をゆっくりとループし、データベースにデータを挿入することができます。 –

+0

私がこれをやっている理由はプログレスバーのためです。私がスリープ状態になることを心配していた理由は、スリープしてデータを遅らせれば処理が保存されると思ったからですが、それは不可能なので、正規表現を使って情報を並べ替えて、 。システムにストレスがかかるのでしょうか? – Scarface

関連する問題