現在、xml ファイルをロードし、xml ファイルから新しいデータを mysql データベースに挿入する parser.php があります。このphpファイルを30秒ごとに更新して、mysqlテーブルに常に新しいデータを保持するにはどうすればよいですか? これを行うためにショートポーリングを使用できると思いますが、これは最も効率的なオプションではないと思います。
前もって感謝します
現在、xml ファイルをロードし、xml ファイルから新しいデータを mysql データベースに挿入する parser.php があります。このphpファイルを30秒ごとに更新して、mysqlテーブルに常に新しいデータを保持するにはどうすればよいですか? これを行うためにショートポーリングを使用できると思いますが、これは最も効率的なオプションではないと思います。
前もって感謝します
これは、スクリプトを実行するためにシェル (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
cron ジョブを使用する必要がありますが、cron ジョブは 1 分以上ごとに実行されます。
別の方法は、「デーモン」を作成することです。
非常に基本的な例:
<?php
while(true) {
// check if 30 seconds has passed.
// then execute some function...
};
?>
次に、ターミナルでこれを実行する必要があります。
$ php script.php &
このリンクが役立ちます。
グレート!