-1

現在、xml ファイルをロードし、xml ファイルから新しいデータを mysql データベースに挿入する parser.php があります。このphpファイルを30秒ごとに更新して、mysqlテーブルに常に新しいデータを保持するにはどうすればよいですか? これを行うためにショートポーリングを使用できると思いますが、これは最も効率的なオプションではないと思います。

前もって感謝します

4

2 に答える 2

2

これは、スクリプトを実行するためにシェル (SSH) アクセスが必要な非 PHP ソリューションですが、必要に応じてexec()を使用して PHP から実行することもできます。共有ホスティング環境では、このアプローチが困難になる場合がありますが、ユーザー資格情報でスクリプトを実行できる限り、実行に問題はありません。

最初に、次の内容で bash スクリプトを作成して保存する必要があります (parser.shこの例ではこの名前を使用します)。sleep 30必要に応じて、ラインのタイムアウトを調整できます。

#!/bin/sh  
while true
  do
    php parser.php
    sleep 30
  done

スクリプトを実行するには、スクリプトに実行権限を与える必要があります。

chmod +x parser.sh

アンパサンド (&) 引数を指定してnohupコマンドを使用すると、たとえばシェル (SSH) を閉じた後に終了シグナルが送信された場合でも、スクリプトがバックグラウンドで実行されるようになります。アンパサンドは重要です!

nohup ./parser.sh &

topまたはps aux | grep parserを使用して、スクリプトが実行されていることを確認できます。前に述べたように、PHPexec()を使用してプロセスを開始することもできますが、これを行うにはシェルを使用することをお勧めします。

スクリプトを実行するバックグラウンド プロセスを停止したい場合は、単純に強制終了する必要があります。ps aux | grep parserパーサー プロセスの PID (左側の 2 列目) を調べるために使用し、killコマンドで使用します。

kill 4183
于 2012-12-15T17:09:14.023 に答える
0

cron ジョブを使用する必要がありますが、cron ジョブは 1 分以上ごとに実行されます。

別の方法は、「デーモン」を作成することです。

非常に基本的な例:

<?php
while(true) {
   // check if 30 seconds has passed.
   // then execute some function...
};
?>

次に、ターミナルでこれを実行する必要があります。

$ php script.php &

このリンクが役立ちます。

グレート!

于 2012-12-15T16:48:16.310 に答える