PHP实现文章定时发布设置

  1. <?php  
  2. /*获取文章的发布信息 
  3.  * 文件格式为: 
  4.  *  
  5.     //警告!警告!警告!警告!警告!警告!警告!警告! 
  6.  
  7.     //手动更改或删除此文件会导致XX网文章预签发时间错误!将造成严重损失!如若更改后果自负!!! 
  8.      
  9.     //警告!警告!警告!警告!警告!警告!警告!警告! 
  10.      
  11.     <article_num>15</article_num> 
  12.     <publish_time>2013-03-13 05:21:31</publish_time> 
  13.  *  
  14.  * 其中article_num为当前时间段已发布的文章数量, 
  15.  * publish_time为已发布的最后一篇文章的发布时间。 
  16.  * 每个时间段发布的文章数量默认不超过20篇,可在程序中改动。 
  17.  * 属于同一时间段的相邻两个时间点的最长间隔不超过20分钟,可在程序中改动。 
  18.  */  
  19. function get_article_statistic()  
  20. {  
  21.     $set_article_num = 30;//单位:篇  
  22.     $set_time_space = 15;//单位:分钟  
  23.     $act_file = 'sample_article_statistic.txt'  
  24.     if (file_exists($atc_file) === FALSE) {  
  25.         //文件不存在,创建并写入初始信息  
  26.         $fp = fopen($atc_file'w');  
  27.         $content = "//警告!警告!警告!警告!警告!警告!警告!警告!\n\n//手动更改或删除此文件会导致XX网文章预签发时间错误!将造成严重损失!如若更改后果自负!!!\n\n//警告!警告!警告!警告!警告!警告!警告!警告!\n\n<article_num>0</article_num>\n<publish_time>"date('Y-m-d H:i:s') ."</publish_time>";  
  28.         fwrite($fp$content);  
  29.         fclose($fp);  
  30.     }  
  31.     $fp = fopen($atc_file"r+");  
  32.     if (flock($fp, LOCK_EX)) { // 进行排它型锁定  
  33.         $content = fread($fpfilesize($atc_file));  
  34.         clearstatcache();//清除文件状态缓存  
  35.         //参数匹配模式  
  36.         $pat_article_num     = '#<article_num>(.+?)</article_num>#';  
  37.         $pat_publish_time    = '#<publish_time>(.+?)</publish_time>#';  
  38.         //获取参数并处理  
  39.         if (preg_match($pat_article_num$content$article_num) &&   
  40.             preg_match($pat_publish_time$content$publish_time)) {//如果读取所有参数成功  
  41.             $article_num = $article_num[1];  
  42.             $publish_time = strtotime($publish_time[1]);  
  43.             //检查当前阶段已预签发文章数量 和 上一篇文章的预签发时间  
  44.             if ($article_num < $set_article_num) {//如果小于20篇  
  45.                 if (($publish_time + $set_time_space * 60) >= time()) {//并且上一篇的预签发时间未早过当前时间20分钟  
  46.                     if ($publish_time >= time()) {//如果前一篇的预签发的时间大于等于当前时间  
  47.                         //将预签发时间设置为和上一篇文章一样  
  48.                         $article_publish_time = $publish_time;//保存当前文章发布时间并更新至文件中  
  49.                     } else {//如果前一篇的与签发时间小于当前时间  
  50.                         //将签发时间设置为当前时间  
  51.                         $article_publish_time = time();//保存当前文章发布时间并更新至文件中  
  52.                     }  
  53.                     $article_num_update = $article_num + 1;//当前阶段已发文章量+1(累加)  
  54.                 } else {//距上一篇的预签发时间大于20分钟  
  55.                     //预签发时间为当前时间  
  56.                     $article_publish_time = time();//保存当前文章发布时间并更新至文件中  
  57.                     $article_num_update = 1;//当前阶段(新一阶段)已发文章量置为1(清零)  
  58.                 }  
  59.                 } else {//如果大于等于20片  
  60.                     if (($publish_time + $set_time_space * 60) >= time()) {//并且距上一篇的预签发时间短于20分钟  
  61.                     //将预签发时间距上一篇间隔延长至20分钟  
  62.                     $article_publish_time = $publish_time + $set_time_space * 60;//保存当前文章发布时间并更新至文件中  
  63.                     $article_num_update = 1;//当前阶段(新一阶段)已发文章量置为1(清零)  
  64.                 } else {//距上一篇的预签发时间大于20分钟  
  65.                     //预签发时间为当前时间  
  66.                     $article_publish_time = time();//保存当前文章发布时间并更新至文件中  
  67.                     $article_num_update = 1;//当前阶段(新一阶段)已发文章量置为1(清零)  
  68.                 }  
  69.                 }  
  70.                 //保存信息至文件中  
  71.                 $publish_time_update = $article_publish_time;//更新的时间为当前文件的发布时间  
  72.                 $pattern_update = array($pat_article_num$pat_publish_time);  
  73.                 $replacement = array('<article_num>'$article_num_update .'</article_num>''<publish_time>'date('Y-m-d H:i:s'$publish_time_update) .'</publish_time>');  
  74.                 $content = preg_replace($pattern_update$replacement$content);  
  75.                 ftruncate($fp , 0);//文件长度置为零  
  76.                 fseek($fp, 0);//移动指针至文件首  
  77.                 fwrite($fp$content);//写入信息  
  78.                 flock($fp, LOCK_UN);// 释放锁定  
  79.                 fclose($fp);//关闭文件  
  80.                 return $article_publish_time;  
  81.         } else {//参数读取失败  
  82.             flock($fp, LOCK_UN);// 释放锁定  
  83.             fclose($fp);//关闭文件  
  84.             exit('文章统计信息错误!请保存此信息并通知系统管理员<br />文件内容为:'$content);  
  85.         }  
  86.     } else {  
  87.         fclose($fp);//关闭文件  
  88.         exit("锁定文章统计信息文件失败!请通知系统管理员!");  
  89.     }  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值