天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP中使用sleep函數實現定時任務實例分享

在某些程序中,有一些特殊的功能需要用到定時執行,如果熟悉Linux的朋友肯定會說這不是容易嗎,直接來個計劃任務crontab不久實現了嗎?這的確是可以實現,但必須是提前知道具體的執行時間,然后才能寫到計劃任務里去。比如凌晨兩點,上午七點,或者每天上午六點三十分等等。

然而有時候,這個時間我們無法預知,而執行時間是程序動態生成的。然后在動態生成的時間后執行某些程序片段,這里就不能用Linux的crontab計劃任務了,因為每次執行的時間都是動態生成,而計劃任務需要知道一個定死了的時間。既然無法使用計劃任務,那么就只能從程序本身尋找實現方法。

php中,有一個sleep函數,大概意思是程序執行遇到sleep函數時暫停N秒后繼續往下執行。如sleep(10)意思就是程序自上往下執行,遇到sleep(10)語句后暫停十秒,然后繼續往下執行。函數括號內的參數是一個數值,代表暫停時間值,單位秒。請看下面一段代碼
復制代碼 代碼如下:
<?php
/**
 * sleep函數的用法
 * 瓊臺博客
 */
// 輸出當前程序時間戳
echo time();  // out:1338088780
echo '<br />';
 
// 暫停十秒
sleep(10);
 
// 輸出時間戳
echo time(); // out:1338088790

以上程序執行結果是
復制代碼 代碼如下:
1338088780
1338088790

我們來解析下執行過程,第一步是打印當前時間戳1338088780,然后暫停十秒,再打印時間戳。由于程序是等待了十秒然后再次打印時間戳,那么就是最后一次的時間戳肯定要比第一次打印的時間戳多十秒鐘,結果最后一次的時間戳是1338088790。

以上例子,我們只用了一次sleep函數,頁面中可以無限制使用sleep()函數。請看以下代碼:
復制代碼 代碼如下:
<?php
/**
 * sleep函數的用法
 * 瓊臺博客
 */
// 輸出第一次時間戳
echo time();      // out: 1338088780
echo '<br />';
 
// 暫停十秒
sleep(10);
 
// 輸出第二次時間戳
echo time();     // out: 1338088790
echo '<br />';
 
// 暫停二十秒鐘
sleep(20);
 
// 輸出第三次時間戳
echo time();     // out: 1338088810

以上程序執行結果是
復制代碼 代碼如下:1338088780
1338088790
1338088810

以上代碼執行過程:
第一,打印第一次時間戳1338088780
第二,暫停十秒
第三,打印第二次時間戳 1338088790,是第一次時間戳加上十秒后的總和
第四,暫停二十秒
第五,打印第三次時間戳 1338088810,是第二次時間戳1338088790加上二十秒后的總和。

頁面中出現兩次sleep,第一次是十秒,第二次二十秒。由此得出以上實例總共執行三十秒。頁面中多次出現sleep()函數時為累加而不是覆蓋前面的代碼。

那如何結合sleep定時執行動態生成時間的代碼呢?請看以下代碼:
復制代碼 代碼如下:
<?php
/**
 * sleep函數定時執行動態生成時間段的代碼
 * 瓊臺博客
 */
// 目前時間
echo date('Y-m-d H:i:s'); // out:2012-05-27 14:58:00
echo '<br />';
 
// 動態生成時間 范圍在今天下午六點到晚上零點前的任意時間
$datetime = date('Y-m-d').' '.rand('18,23').':'.rand('0,59').':'.rand('0,59');  // 2012-05-27 19:20:00
 
// 算得時間戳
$a = strtotime($datetime);
 
// 算得時間差
$reduce = $a-time();
 
// sleep等待
sleep($reduce);
 
// 執行到時間后執行的代碼塊
echo date('Y-m-d H:i:s');  // out:2012-05-27 19:20:00

以上代碼輸出:
復制代碼 代碼如下:2012-05-27 14:58:00
2012-05-27 19:20:00

解析:開始打印當前時間,然后隨機算出程序往后執行時間 2012-05-27 19:20:00,由于sleep接受參數是一個以秒為單位的一個數值,所以先把生成的時間轉換為時間戳然后再用時間戳減去當前時間戳得出一個時間差,再sleep即可達到程序在隨機生成時間執行某些語句達到定時執行效果。這里注意必須算的一個以秒為單位的時間差,如果不能算出秒差就沒法使用sleep函數功能。

最后,可能某些童鞋做實例的時候會說怎么我的程序執行出錯,提示超時。出現這個問題不要慌,這是php默認頁面執行時間導致的,在php中默認執行頁面時間是三十秒鐘,這對于一般程序夠用了。但如果你要做類似定時執行功能就必須再頭部聲明設置下執行時間set_time_limit(0)。0是代表不限時,單位是秒。最后整體貼出代碼:
復制代碼 代碼如下:
<?php
/**
 * sleep函數定時執行動態生成時間段的代碼
 * 瓊臺博客
 */
// 設置頁面執行時間,否則會有超時錯誤提示
set_time_limit(0);
 
// 目前時間
echo date('Y-m-d H:i:s'); // out:2012-05-27 14:58:00
 
// 動態生成時間 范圍在今天下午六點到晚上零點前的任意時間
$datetime = date('Y-m-d').' '.rand('18,23').':'.rand('0,59').':'.rand('0,59');  // 2012-05-27 19:20:00
 
// 算得時間戳
$a = strtotime($datetime);
 
// 算得時間差
$reduce = $a-time();
 
// sleep等待
sleep($reduce);
 
// 執行到時間后執行的代碼塊
echo date('Y-m-d H:i:s');  // out:2012-05-27 19:20:00

php技術PHP中使用sleep函數實現定時任務實例分享,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 中文文字幕文字幕亚洲色 | 琪琪热热色原日韩在线 | 芭乐视频网页版在线观看 | 亚洲成在人线视频 | 午夜国产精品免费观看 | 538prom精品视频我们不只是 | 国产精品亚洲专一区二区三区 | 伊人影院久久 | 真实国产熟睡乱子伦对白无套 | 理论片午午伦夜理片I | 国产精品永久免费 | 琪琪色原网20岁以下热热色原网站 | 久久精品免视看国产 | 麻婆豆腐传媒视频免费 | 日本午夜精品一区二区三区电影 | 冰山高冷受被c到哭np双性 | 久久囯产精品777蜜桃传媒 | 国产又黄又硬又粗 | 国产综合视频在线观看一区 | 使劲别停好大好深好爽动态图 | 再深点灬舒服灬太大了在线视频 | 亚洲国产中文字幕在线视频综合 | 琉璃美人煞在线观看 | 人妻天天爽夜夜爽三区麻豆A片 | 国精产品一区一区三区M | 国产精品自在在线午夜蜜芽tv在线 | 99久久免费看少妇高潮A片 | 亚洲中文 字幕 国产 综合 | 白丝女仆被强扒内裤 | 日韩精品专区在线影院重磅 | 亚洲国产高清视频在线观看 | 免费视频久久只有精品 | 亚洲免费黄色片 | 北条麻妃久久99精品 | 国内精品不卡一区二区三区 | 国产人妻XXXX精品HD电影 | 欧美午夜免费观看福利片 | 一本道久在线综合色色 | 影音先锋色av男人资源网 | 久久精品一卡二卡三卡四卡视频版 | 婷婷亚洲五月色综合久久 |