php原生态生成静态缓存页,定时更新

	public function insertAction() {

		ini_set(‘max_execution_time‘, ‘0‘);
		// error_reporting(E_ALL);
		// ini_set(‘display_errors‘, ‘Off‘);
		// 插入之前首先更新目录文件
		$getHomeList = $this->getXmlAction();

		$arr_code = array(
			1 => ‘插入成功‘,
			-1 => ‘插入失败!请检查再试!‘,
			-2 => ‘获取xml文件失败!请检查再试!‘,
		);

		showApiCode($arr_code);

		//把目录改成对应的ID
		$getHomeList = array_combine(array_column($getHomeList, ‘name‘), array_column($getHomeList, ‘id‘));
		// 添加颜色字段
		$color = array(
			0 => ‘#a56d57‘,
			1 => ‘#4c889c‘,
			2 => ‘#658965‘,
		);

		//连接数据库
		$ArticleModel = new ArticleModel();

		//创建dom对象
		$dom = new DOMDocument();
		//创建抓取对象
		$Utils_CaptureWebContent = new Utils_CaptureWebContent(‘‘);

		//加载xml.rss文件
		// $xml = json_decode(file_get_contents(DATA_DIR . ‘infomation.json‘));
		$xml = json_decode(file_get_contents(DATA_DIR . ‘infomation.json‘), true);

		foreach ($xml as &$value) {
			// 获取标题
			$title = $value[‘title‘];
			// 获取描述
			$summary = $value[‘description‘];
			//获取分类名字
			$category_name = $value[‘category‘];

			$send_time = strtotime($value[‘pubDate‘]);
			$utime = $ctime = time();
			//添加一级分类id
			$article_category = $getHomeList[$category_name];
			$category_color = $color[$article_category % 3];

			// 测试的链接
			$content_url = $value[‘link‘];
			$id = sprintf("%u", crc32($content_url));
			$out = $this->getDataAction($content_url);
			$out = preg_replace(array(‘/<head>([\s\S]+?)<\/head>/i‘), array(‘<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"></head>‘), $out[‘output‘]);

			@$dom->loadHTML($out);
			$xpath = new DOMXPath($dom);
			// 截取最后一次/后面的字符,根据这个长度来判断属于哪一个类型
			$str = strlen(strrchr($content_url, ‘/‘));

			$html = $Utils_CaptureWebContent->captureGet($content_url);

			$html = $Utils_CaptureWebContent->formatHtml($html);

			// 对网站进行分类,分三类,分别处理,获取其中的from_site,content,category_name(二级分类)
			if ($str < 2) {
				// 第一类(非标准链接):http://kjs.mep.gov.cn/hjbhbz/bzwb/dqhjbh/jcgfffbz/

			} else if ($str < 10) {
				// 第二类(标准链接):http://www.gdczepb.gov.cn/detail/24441
				$site = $xpath->query("//div[@class=‘cdaylist‘]/ul/li");
				//获取来源地址
				$from_site = $site->item(0)->nodeValue;
				if (strlen(trim($from_site)) < 10) {
					$from_site = ‘来源:资讯‘;
				}
				// 获取二级分类外面的那个div
				$cate_html = $Utils_CaptureWebContent->matchHtmlElement("div", "class", "cnav", $html);
				$cate_html = preg_replace(‘/ /‘, ‘‘, $cate_html);
				$category_name = substr($cate_html, strripos($cate_html, ‘>‘) + 1);
				if (!$category_name) {
					//如果上面获取不到,则说明二级分类在a标签里面,获取最后一个a标签里面的内容
					$cate_name = $xpath->query("//div[@class=‘cnav‘]/a");
					$category_name = $cate_name->item($cate_name->length - 1)->nodeValue;
				}
				//获取内容
				$content = $Utils_CaptureWebContent->matchHtmlElement("div", "class", "contents", $html);

			} else {
				// 第三类(次标准链接):http://kjs.mep.gov.cn/hjbhbz/bzwb/stzl/201109/t20110919_217415.htm
				//获取来源地址,没有数据,直接指定来源为科技司
				$from_site = ‘来源:科学技术司‘;
				$content = $Utils_CaptureWebContent->matchAllHtmlElement("table", "class", "txtnormal", $html);
				$content = join($content[0], ‘‘);
				$category_name = $Utils_CaptureWebContent->matchAllHtmlElement("a", "class", "dtdir12 CurrChnlCls", $html);
				$category_name = $category_name[1][3];

			}

			//内容里面的图片也有多种src,
			//第一种: upload ;
			//第二种:/upload ;
			//第三种:./upload/文件名;
			//第四种:直接文件;
			//第五种:./文件名 这种;
			//正则匹配href和src
			$src_pat = ‘/src="(\.?\/?upload.+?)"/‘;
			$href_pat = ‘/href="(\.?\/?upload.+?)"/‘;

			// 获取前缀
			$host = parse_url($content_url);
			$host = ‘http://‘ . $host[‘host‘] . ‘/‘;

			$host_name = dirname($content_url) . ‘/‘;

			$content = preg_replace(array("/style=\".+?\"/i", "/width=\".+?\"/i", "/<style([\s\S]+?)<\/style>/i", "/<script([\s\S]+?)<\/script>/i"), ‘‘, $content); //去除样式

			// $content = preg_replace(array($src_pat, $href_pat), array($host . "$1", $host . "$1"), $content);
			$content = preg_replace(array($src_pat, $href_pat), array(‘src="‘ . $host . "$1" . ‘"‘, ‘href="‘ . $host . "$1" . ‘"‘), $content);

			$src_pat2 = ‘/src="([^http].*?)"/is‘;
			$href_pat2 = ‘/href="([^http].*?)"/is‘;

			// 第二次替换,把非http开头的都加上detail替换掉
			$content = preg_replace(array($src_pat2, $href_pat2), array(‘src="‘ . $host_name . "$1" . ‘"‘, ‘href="‘ . $host_name . "$1" . ‘"‘), $content);

			$src_one = ‘/<img[^>]*src="([^>"]*)"/is‘;
			preg_match($src_one, $content, $cover_url);

			$old_data = $ArticleModel->getItem($id);

			$content = empty(trim($content)) ? $old_data[‘content‘] : htmlspecialchars($content);

			$data_check = sprintf("%u", crc32(join(‘‘, array($title, $content))));

			$params = array(
				"id" => $id,
				"link" => $content_url,
				"article_category" => $article_category,
				"title" => $title,
				"summary" => $summary,
				"content" => $content,
				"send_time" => $send_time,
				"from_site" => $from_site,
				"ctime" => $ctime,
				"utime" => $utime,
				"category_name" => $category_name,
				"category_color" => $category_color,
				"cover_url" => $cover_url[1],
				"data_check" => $data_check,
			);
			// echo "<pre>";
			// print_r($params);
			// echo "</pre>";

			$i = 0;
			if (!empty($content)) {
				try {
					$ArticleModel->add($params);
					echo $i;
				} catch (Exception $e) {
					$old_check = $old_data[‘data_check‘];
					if ($old_check != $data_check) {
						$ArticleModel->update($params, " id = {$id} ");
						$i++;
						// echo ‘<h1 color="red">插入的数据与之前的不样!执行更新操作。</h1><br>‘;
					}
				}
			} else {
				continue;
			}

			$need = array(
				‘title‘ => $title,
				‘content‘ => htmlspecialchars_decode($content),
				‘from_site‘ => $from_site,
				‘send_time‘ => $send_time,
			);

			$data_test = array(
				‘info‘ => $need,
			);

			ob_start();
			$this->display("/article/infoContent.phtml", $data_test);
			$id_html = ob_get_clean();

			file_put_contents(PROJECT_ROOT . ‘/html/article/a‘ . $id . ‘.html‘, $id_html);

			usleep(700000);
		}
		printf("本次更新了 %s 条数据", $i);
	}

  php原生态生成静态缓存,配合crontab定时刷新缓存,不需要第三方模板

时间: 2024-09-29 01:17:00

php原生态生成静态缓存页,定时更新的相关文章

Redis在windows实现将数据缓存起来定时更新读取

实现接口的读取存放在内存中,实现了Web网站直接读取内存数据,大大的减少了访问接口带来的等待时间,这个功能是比较实用的 需要下载一下'类库'及'Redis-x64-3.2.100程序包' 百度云材料下载地址:链接: 链接: https://pan.baidu.com/s/1boYltxl 密码在 http://www.cnblogs.com/AnkerZhang/  打开就可以看到或者,就在上面 1.材料下载完,在Windows64位系统上安装[Redis-x64-3.2.100程序包] 这里为

最佳 WordPress 静态缓存插件 WP Super Cache 安装和使用(转)

WP Super Cache 是 WordPress 官方开发人员 Donncha开发,是当前最高效也是最灵活的 WordPress 静态缓存插件.它把整个网页直接生成 HTML 文件,这样 Web 服务器就不用解析 PHP 脚本,通过使用这个插件,能使得你的 WordPress 博客将显著的提速. WP Super Cache 基本介绍 WP Super Cache 是基于 Ricardo Galli Granada 的 WP-Cache 2.WP-Cache 2 可以缓存你的 WordPre

.net 生成 静态页面

.net 生成 静态页面 <!--Main.Aspx--> <%@ page language="C#" %> <%@ import namespace=System.IO %> <script runat="server"> protected override void OnInit (EventArgs e) { int id; try { id = int.Parse (Request.QueryString[

如何生成静态页面的五种方案

方案1: /// <summary> /// 传入URL返回网页的html代码 /// </summary> /// <param name="Url">URL</param> /// <returns></returns> public static string getUrltoHtml(string Url) { errorMsg = ""; try { System.Net.WebReq

ASP.NET生成静态页面方法大全

方案1: /// <summary> /// 传入URL返回网页的html代码 /// </summary> /// <param name="Url">URL</param> /// <returns></returns> public static string getUrltoHtml(string Url) { errorMsg = ""; try { System.Net.WebReq

基于PHP生成静态页的实现方法

t1.php 复制代码 代码如下: <?php// 方法一根据模版生成静态页面// replaceTemplateString函数用于替换模板中指定字符串function replaceTemplateString($templateString) {    // 用来替换的变量    $title = "文章标题";    $body = "这里是文章主体";    // 替换模板 中指定字符串    $showString = str_replace (

动态请求页面生成静态页

话说百度也是这样提高浏览速度的:此案例是控件开发的,MVC或一般处理程序开发的小伙伴们,修修改改一样可以用的: 后台: 1 protected void btnHtml_Click(object sender, EventArgs e) 2 { 3 if (Request.QueryString["id"] != null) 4 { 5 string NewId = Request.QueryString["id"]; 6 CJRZ.Model.Admin.Loan

php+Smarty生成静态页原理,论坛里好多朋友都在问我这个问题。不懂的进来看下

其实用Smarty生成静态页我个人感觉比缓存生成静态页还要简单. 主要用到Smarty的这个方法 $Smarty->fetch("模板名") 这个函数用法很简单,和$Smarty->display("模板名") 是一样的. 不同的是$Smarty->fetch("模板名") 是把模板替换后的内容返回 而$Smarty->display("模板名")是直接输出也可以说是显示出来. 我们用$Smarty-&

生成静态页技术

概要: 1.什么是生成静态页技术? 答:互联网上流行的做法是将数据源代码写入数据库再从数据库读取生成静态面,这样无形间就加大了数据库.将现有的ASP页直接生成静态页,将会节省很多. 2.为什么要生成静态页以及好处? 答:一.加快页面打开浏览速度,静态页面无需连接数据库打开速度较动态页面有明 显提高: 二.有利于搜索引擎优化SEO,Baidu.Google都会优先收录静态页面,不仅被收录的快还收录的全: 三.减轻服务器负担,浏览网页无需调用系统数据库: 四.网站更安全,HTML页面不会受Asp相关