waitじゃない!まとめて学ぶ、phpで一定時間待つ方法

こんにちは!独学プログラマー&ライターのつぶらやです。

いきなりですが、質問です。

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を学び始めた頃には必要のない場合が多いですが、使いこなせるようになると一つレベルが上がるかも!

それでは、また。

「プログラミング、右も左もわからない…」という方にオススメ

cta_under_bnr

当プログラミングスクール「侍エンジニア」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニアは上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

詳細はこちら

書いた人

つぶらや

独学PG&SE、東京在住30代女性。
誰でもプログラマーになれるがモットーで、わかりやすい記事を目指しています。

おすすめコンテンツ

まずはここから!初心者でも1から学べるプログラミング入門カリキュラム

転職成功で受講料0円!あなたもプログラミングを学んでエンジニアデビュー