こんにちは!独学プログラマー&ライターのつぶらやです。
いきなりですが、質問です。
phpで一定期間待ってプログラムを実行して欲しい時、あなたはどういう関数を使おうとしますか?
タイトルに書いていますが、実はwait…ではないのです。
phpで一定時間待つために使う関数はsleepです。
今回はphpで一定期間待つ色々な方法を紹介していきたいと思います。
時限設定ってどうするの?sleep解説
早速、sleep関数について説明していきます。
サンプルコードを載せますので、それを元に解説します。
<?php echo date("Y/m/d H:i:s") . "n"; // 時間を表示 sleep(5); // 5秒間待つ echo date("Y/m/d H:i:s") . "n"; // 再度時間を表示 ?>
結果
2018/08/01 00:00:00 2018/08/01 00:00:10
sleep()の()内数値の単位は秒です。
sleep関数で一定期間待ってからプログラムを実行させることが出来ました。
簡単ですね。
次の項目ではsleep関数以外の関数を紹介します。
いろんな実行時間の制御関数
usleep
<?php function waitTestUsleep() { echo date("Y/m/d H:i:s") . "n"; // 時間を表示 usleep(5000000); // 5秒間待つ echo date("Y/m/d H:i:s") . "n"; // 再度時間を表示 } waitTestUsleep(); ?>
結果
2018/08/01 00:00:00 2018/08/01 00:00:10
あれ?sleepと結果が同じですね。
でも、usleep()の()内の値が、違います。
スリープと違って、usleep()の()内の数値はマイクロ秒単位です。
マイクロ秒とは1/100万(秒)を表します
sleepよりももっと細かい時間を設定できます。
プログラムの処理速度としての1秒はとても長いものです。
もっと小さい単位の時間を設定が必要な場合もあります。
time_nanosleep
<?php function waitTestNanosleep() { $nano_check = time_nanosleep(8, 500000); // 整数秒とナノ秒を引数に入れる if ($nano_check === true) { // 成功した場合tureが返る echo "遅延->8秒と500,000ナノ秒"; } elseif ($nano_check === false) { // 失敗した場合tureが返る echo "遅延失敗"; } elseif (is_array($nano_check)) { // 中断した場合、配列が返るのでis_arrayで判定 $seconds = $nano_check['seconds']; $nano_checkseconds = $nano_check['nanoseconds']; echo "【中断】残り秒数" . $seconds . "秒と " . $nanoseconds . "ナノ秒"; } } waitTestNanosleep(); ?>
成功結果
遅延->8秒と500,000ナノ秒
失敗結果
遅延失敗
中断結果
【中断】残り秒数8秒と500000ナノ秒
秒とナノ秒単位でプログラムの実行を遅らせる事が出来る関数です。
ナノ秒とは、1/10億(秒)の事です。
trueやfalseが返ってくるので、それを判定に利用します。
time_sleep_until
<?php function waitTestSleepuntil() { echo time() . "n"; $result = time_sleep_until(time() + (30)) ; // 現在時刻から30秒後 echo time() . "n"; echo $result; } waitTestSleepuntil(); ?>
結果
1533049200 1533049230 true
()内に指定したタイムスタンプまで実行を遅らせる事が出来る関数です。
time()関数や、タイムスタンプについては以下サイトを参考にしてください。
time_sleep_until()内に、過去日を指定した場合は、ワーニング(致命的なエラーではないです)が発生しますので注意です。
成功した場合にはtrue、失敗した場合にはfalseを返します。
時間を指定して実行できるという点が便利です。
どんな時に使うの?効果的な使い方
さて、これまでプログラム実行時間の遅延の方法について解説しましたが、どんな時に使用するかピンと来てない方もいらっしゃるかもしれません。
どんな時に使用するのか、以下に記載したいと思います。
デバッグのため処理時間計測コードに使用
デバッグとは、バグ(虫)を取り除く事。
プログラミングでいうと、プログラムの修正や手直しの事。
実行時間を測ることによって、どこで時間がかかっているかを確認してバグを修正できる場合があります。
実行時間を測定する際のサンプルコードにsleep関数を使用する事が多いです。
sleep関数自体で計測が出来るわけではない点にご注意ください。
時間を計るサンプルコードは検索すると沢山出てきますので、興味のある方は探してみてください。
たくさんのリクエストを投げるとき
例えば、サーバーにリクエスト(データが欲しいなどの要求)を送り、あるデータを得る機能を動かしたとします。
そのデータは大量にあるので、リクエストも多いです。
連続してリクエストを送り続けるとどうなるでしょうか。
そうです、サーバーに負荷がかかります。
そういう事態を避けるためにsleepが使用される事があります。
処理の終わりにsleep()を入れるだけでプログラムを遅延させられますので、やり方としては簡単ですね。
まとめ
今回は、一定期間待ってphpのプログラムを実行する方法について解説しました。
色んな方法がありましたね。
phpを学び始めた頃には必要のない場合が多いですが、使いこなせるようになると一つレベルが上がるかも!
それでは、また。