- <?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("锁定文章统计信息文件失败!请通知系统管理员!");
- }
- }
PHP实现文章定时发布设置
最新推荐文章于 2022-05-11 09:28:33 发布