PHP实现文章定时发布设置

	<?php
	/*获取文章的发布信息
	 * 文件格式为:
	 * 
	    //警告!警告!警告!警告!警告!警告!警告!警告!

		//手动更改或删除此文件会导致XX网文章预签发时间错误!将造成严重损失!如若更改后果自负!!!
		
		//警告!警告!警告!警告!警告!警告!警告!警告!
		
		<article_num>15</article_num>
		<publish_time>2013-03-13 05:21:31</publish_time>
	 * 
	 * 其中article_num为当前时间段已发布的文章数量,
	 * publish_time为已发布的最后一篇文章的发布时间。
	 * 每个时间段发布的文章数量默认不超过20篇,可在程序中改动。
	 * 属于同一时间段的相邻两个时间点的最长间隔不超过20分钟,可在程序中改动。
	 */
	function get_article_statistic()
	{
		$set_article_num = 30;//单位:篇
		$set_time_space = 15;//单位:分钟
		$act_file = 'sample_article_statistic.txt'
		if (file_exists($atc_file) === FALSE) {
			//文件不存在,创建并写入初始信息
			$fp = fopen($atc_file, 'w');
			$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>";
			fwrite($fp, $content);
			fclose($fp);
		}
		$fp = fopen($atc_file, "r+");
		if (flock($fp, LOCK_EX)) { // 进行排它型锁定
		    $content = fread($fp, filesize($atc_file));
		    clearstatcache();//清除文件状态缓存
		    //参数匹配模式
		    $pat_article_num     = '#<article_num>(.+?)</article_num>#';
		    $pat_publish_time    = '#<publish_time>(.+?)</publish_time>#';
		    //获取参数并处理
		   	if (preg_match($pat_article_num, $content, $article_num) && 
		   		preg_match($pat_publish_time, $content, $publish_time)) {//如果读取所有参数成功
		   		$article_num = $article_num[1];
		   		$publish_time = strtotime($publish_time[1]);
		   		//检查当前阶段已预签发文章数量 和 上一篇文章的预签发时间
		   		if ($article_num < $set_article_num) {//如果小于20篇
		   			if (($publish_time + $set_time_space * 60) >= time()) {//并且上一篇的预签发时间未早过当前时间20分钟
		   				if ($publish_time >= time()) {//如果前一篇的预签发的时间大于等于当前时间
		   					//将预签发时间设置为和上一篇文章一样
		   					$article_publish_time = $publish_time;//保存当前文章发布时间并更新至文件中
		   				} else {//如果前一篇的与签发时间小于当前时间
		   					//将签发时间设置为当前时间
		   					$article_publish_time = time();//保存当前文章发布时间并更新至文件中
		   				}
		   				$article_num_update = $article_num + 1;//当前阶段已发文章量+1(累加)
		   			} else {//距上一篇的预签发时间大于20分钟
		   				//预签发时间为当前时间
		   				$article_publish_time = time();//保存当前文章发布时间并更新至文件中
		   				$article_num_update = 1;//当前阶段(新一阶段)已发文章量置为1(清零)
		   			}
   				} else {//如果大于等于20片
   					if (($publish_time + $set_time_space * 60) >= time()) {//并且距上一篇的预签发时间短于20分钟
		   				//将预签发时间距上一篇间隔延长至20分钟
		   				$article_publish_time = $publish_time + $set_time_space * 60;//保存当前文章发布时间并更新至文件中
		   				$article_num_update = 1;//当前阶段(新一阶段)已发文章量置为1(清零)
		   			} else {//距上一篇的预签发时间大于20分钟
		   				//预签发时间为当前时间
		   				$article_publish_time = time();//保存当前文章发布时间并更新至文件中
		   				$article_num_update = 1;//当前阶段(新一阶段)已发文章量置为1(清零)
		   			}
   				}
   				//保存信息至文件中
   				$publish_time_update = $article_publish_time;//更新的时间为当前文件的发布时间
   				$pattern_update = array($pat_article_num, $pat_publish_time);
   				$replacement = array('<article_num>'. $article_num_update .'</article_num>', '<publish_time>'. date('Y-m-d H:i:s', $publish_time_update) .'</publish_time>');
   				$content = preg_replace($pattern_update, $replacement, $content);
   				ftruncate($fp , 0);//文件长度置为零
   				fseek($fp, 0);//移动指针至文件首
   				fwrite($fp, $content);//写入信息
   				flock($fp, LOCK_UN);// 释放锁定
   				fclose($fp);//关闭文件
   				return $article_publish_time;
		   	} else {//参数读取失败
		   		flock($fp, LOCK_UN);// 释放锁定
		   		fclose($fp);//关闭文件
		   		exit('文章统计信息错误!请保存此信息并通知系统管理员<br />文件内容为:'. $content);
		   	}
		} else {
			fclose($fp);//关闭文件
		    exit("锁定文章统计信息文件失败!请通知系统管理员!");
		}
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值