【PHP入門】プログラムの実行を一時停止する方法(sleep)

こんにちは!フリーエンジニアのヤマシタです。

PHPではsleep関数を使用してプログラムの実行を一時停止することができます。

この記事では、

・sleepとは?
・sleepの使い方

という基本的な内容から、

・ループでsleepを使用する方法
・マイクロ秒単位で一時停止する方法

などの応用的な使い方に関しても解説していきます。

今回はそんなsleepを使用する方法について、わかりやすく解説します!

sleepとは

実行中のプログラムを一時停止するには、sleep関数を使用します。

sleep関数は、引数に一時停止する秒数を指定します。10秒スリープするなら引数に10を指定します。

int sleep (int $秒数);

返り値として、成功した場合にはゼロを、失敗した場合にはFALSEを返します。

FALSEを返すタイミングとしては、プログラムが何らかのエラーにより、シグナルを受信した場合に発生します。

sleepの使い方

ここでは、実際にsleep関数の使い方を見ていきましょう。

以下に指定した秒数分処理を一時停止するサンプルを紹介いたします。

<?php

echo date('Y-m-d H:i:s');
echo '<br>';

//10秒スリープ
sleep(10);

echo date('Y-m-d H:i:s');

?>
実行結果
2017-05-28 09:44:03
2017-05-28 09:44:13

サンプルではsleep関数の引数に一時停止する秒数として10を指定しています。実行結果のとおり10秒処理が一時停止していることがわかりますね!

ループ処理を一時停止する

以下に無限ループ内で繰り返し処理ごとにをsleepで1秒停止するプログラムを紹介します。

<?php

$i = 0;
while(true){

  echo $i;

  if ($i >= 10){
    echo 'プログラム終了';
    break;
  }
  sleep(1);
  $i++;
}

?>

sleep関数は、主に時間を計測するためのタイマー処理や、マルチスレッドなどで行う無限ループ処理などでよく使われます。

無限ループ処理を延々と実行しているとCPUの負荷が高まり、リソースが不足してメモリリークなどが発生する可能性があります。

また、無限ループの間はコンピュータの負荷が高まるため、他の処理が受付なくなるなどの弊害が発生します。

そこで無限ループ内でsleep処理を実行すると、その間処理がsleep関数に移行してコンピュータの負荷を下げることができます。

そのため、無限ループ処理を行うときは、sleep関数の使用を意識しておきましょう。

マイクロ秒単位で指定する

ここではusleep関数を使用して、マイクロ秒単位まで停止時間を指定する方法を紹介します。

usleepの使い方

プログラムをマイクロ秒単位で一時停止するにはusleep関数を使用します。

usleep関数は、sleep関数と同じく引数に一時停止する秒数を指定します。

void usleep(int $マイクロ秒数);

なお、usleep関数は値を返すことはありません。

以下にusleep関数を使用してマイクロ秒単位で一時停止する方法を記述します。

<?php

$now1 = new DateTime();

//時刻をマイクロ秒まで取得
echo $now1->format('Y-m-d H:i:s.u');
echo '<br>';

//0.2秒スリープ
usleep(200000);

$now2 = new DateTime();
echo $now2->format('Y-m-d H:i:s.u');

?>
実行結果
2017-05-28 19:21:58.506058
2017-05-28 19:21:58.707265

サンプルでは、usleep関数の引数でマイクロ秒単位の秒数である200000マイクロ秒(0.2秒)を指定しています。

実行結果のとおり、約0.2秒停止しているのがわかりますね!

まとめ

ここではsleep関数を使用して、プログラムを一時停止する方法や無限ループで使用する方法、sleep関数の用途やusleep関数を使用してマイクロ秒単位で指定する方法などを解説しました。

sleep関数は処理時間を計測したり、マルチスレッドや無限ループなどの処理でよく使われますので、この機会に覚えておきましょう。

もし、sleep関数の使い方を忘れてしまったら、この記事を思い出してくださいね。

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

ヤマシタ

エンジニア歴10年のフリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、200本以上の執筆経験があります。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説