:
ファイルindex.php
:
<iframe src="job.php" frameborder="0" scrolling="no" width="1" height="1"></iframe>
<script type="text/javascript">
function progress(percent){
document.getElementById('done').innerHTML=percent+'%';
}
</script><div id="done">0%</div>
ファイルjob.php
を新しい列はisSent(またはあなたが気に入っているもの)です。
入力した次の段落は、キューに入れられ、必要に応じていつでも夜間/週単位で実行する必要があります。特定の理由がある場合を除き、必要に応じて大量に行うべきではありません。 dbに列を追加して最後にチェックされた日時を確認することもできます。したがって、少なくともX日後に番号がチェックされていない場合は、必要に応じてその番号のチェックを実行できます。
データの処理はまだ、携帯電話番号のタイプ(例えばCDMA)をチェックさらなる参照のためにすべての番号に固有のIDを割り当て、ネットワーク/国独自の料金のチェックなど
しかし、その関係一度に50,000の数字に対してこれを行う方法の同じ問題に戻ります。あなたはcronジョブについて言及して以来、私はあなたがあなたのサーバーへのSSHアクセスを持っていると仮定しています。つまり、ブラウザは必要ありません。
私の推薦は毎回1,000の数字を処理することである/home/username/example.com/myscript.php
は/ usr/bin/php:これらのcronジョブは、次のようなコマンドラインを介して実行することができますcronを使用して10分後にこれにかかる時間を計測し、それをDBに保存します。あなたはcronジョブを使用しているので、時間が敏感なSMSメッセージのように見えないので、それらを広げることができます。このスクリプトが50回(50 * 1000 = 50k)実行されるのにどれくらいの時間がかかるか分かったら、cronジョブを更新してより頻繁に/より少なく実行することができます。
$time_start = microtime(true);
set_time_limit(0);
function doSendSMS($phoneNum, $msg, $blah);
$time_end = microtime(true);
$time = $time_end - $time_start;
saveTimeRequiredToSendMessagesInDB($time);
また、あなたはをset_time_limit(0)、これはデフォルトの30秒後にタイムアウトしないようにPHPを教えてくれます気づいたかもしれません。 PHP.iniファイルを変更できる場合は、このコード行を入力する必要はありません。 PHP.iniファイルを編集することができたとしても、他のページのタイムアウトが発生する可能性があるので、この機能を変更しないことをお勧めします。
http://php.net/manual/en/function.set-time-limit.php
素晴らしい答えは、ありがとうございました。 //ユーザーがプラグをプルしても続行する(非常に面白い) – elf1984
@ChristianこのソリューションはFireFoxとIEではうまく機能するが、Chromeはフリーズしている。 – elf1984
Safari Webkit(din Chromeも使用)は、PHPの進捗機能に問題があります。私は修正を見つけた、私はあなたとそれに戻ってくるだろう... **編集:**固定。 – Christian