PHPのsleep関数を使って実行を一時停止・遅延する方法【初心者向け】

プログラミング初心者向けにsleep関数を使って実行を一時停止、遅延する方法について解説しています。処理を行うタイミングを一時停止したり、遅らせることができるメソッドなので、指定した秒ごとに実行させることができます。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

PHPで書くsleep関数の使い方を解説しています。

sleep関数を使って実行を一時停止させたり、何秒か遅らせる指定をするなど便利なメソッドなので、ぜひ使い方を覚えておきましょう。

そもそもPHPが何か分からない場合は、先にPHPとはの記事をご覧ください。

 

なお本記事は、TechAcademyのPHPオンライン講座の内容をもとにしています。

 

sleepとは

sleepはプログラムの実行を遅延させる関数です。指定された秒数分、実行を遅らせることができます。

 

大石ゆかり

sleepは眠るって意味の英単語ですよね?sleep関数では、プログラムを停止させることが出来るんですか?

田島悠介

実際に停止するわけじゃないんだけど、実行をその時点で一時停止するんだ。

大石ゆかり

一時停止したりしている間に何かテストしたりするんですか?

田島悠介

そうそう。ファイルロックがちゃんと機能しているかなどデバッグに使うことが多いんだよ。さっそくsleep関数の書き方を見てみよう!

 

sleepの書き方

sleepは以下のように記述します。

sleep(遅延させる秒数)

( )内に遅延させたい秒数を数値で入力します。また、この値が負の数の場合はエラーとなります。

 

[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

指定した秒ごとに処理を実行する

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
  </head>
  <body>
    <?php
      for ($i = 0; $i < 3;$i++){
        sleep(2);
        echo date( "Y/m/d (D) H:i:s", time() );
        echo "<br />";
      }
    ?>
  </body>
</html>

ここではfor文を使用して現在の時刻を3回に分けて出力し、その際に毎回sleepによる遅延を行います。

sleepの( )内には”2″を指定しているため、各実行は2秒おきに行われます。

実行後、画面では以下のようになります。
2秒ごとの現在時刻が連続で表示されます。

また、sleepの( )内に負の数値が入力されている状態で同じ処理を行うとエラーとなり実行されません。(エラーメッセージ”sleep( ): Number of seconds must be greater than or equal to 0″が表示されます)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
  </head>
  <body>
    <?php
      for ($i = 0; $i < 3;$i++){
        sleep(-2);
        echo date( "Y/m/d (D) H:i:s", time() );
        echo "<br />";
      }
    ?>
  </body>
</html>

この場合指定されているのが”−2″の負の整数であるため、実行を行ってもエラーとなり結果は表示されない状態になります。

 

usleep

usleepは、sleepと同じくプログラムの遅延処理を行うことができる関数です。

sleepが秒単位での設定による遅延であるのに対し、usleepはマイクロ秒単位で遅らせる時間を指定することができます。指定した数値(マイクロ秒)ごとにプログラムの実行を遅延させます。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
  </head>
  <body>
    <?php
      for ($i = 0; $i < 3;$i++){
        usleep(1000000);
        echo date( "Y/m/d (D) H:i:s", time() );
        echo "<br />";
      }
    ?>
  </body>
</html>

sleepのときと同じように、現在時刻を一定の時間ごとに出力する処理をusleepを使用して行います。

usleepの( )内に遅延させたい長さのマイクロ秒を入力します。1マイクロ秒は100万分の1秒となります。

結果は以下のようになります。
指定した1,000,000秒(1秒)ごとに現在の時刻が表示されます。

usleepsleepと同様、指定した数値が負の場合エラーとなり実行されない状態になります。(エラーメッセージ”usleep( ): Number of microseconds must be greater than or equal to 0″が表示されます)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
  </head>
  <body>
    <?php
      for ($i = 0; $i < 3;$i++){
        usleep(-1000000);
        echo date( "Y/m/d (D) H:i:s", time() );
        echo "<br />";
      }
    ?>
  </body>
</html>

usleepで指定されている値が「−1000000」という負の整数であるため、実行はされずエラーとなります。

 

おわりに

sleep関数、usleep関数を使って、指定した秒数実行を遅らせる処理を解説しました。いざという時に便利な関数なので、ぜひ書きながら理解していきましょう。

 

大石ゆかり

秒数だけじゃなくて、マイクロ秒なんて細かい単位で指定できるんですねー。

田島悠介

CPUの計算速度は速いからねー。

大石ゆかり

後、思ったんですが、止める秒数っていくらでも問題ないんでしょうか?

田島悠介

レンタルサーバーやローカルの開発環境だと、PHPプログラムが30秒以上動作しないように設定されているので、それ以上は出来ないんだよね。

 

また、PHPを勉強していて、

  • もっと効率的に勉強したい
  • 誰かに聞きながら学びたい
  • 自分でWebサービスを作りたい

と思ったことはないでしょうか。

 

そんな方のために、TechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

独学に限界を感じている場合はご検討ください。