最近做了一个seo项目是针对一些优秀的网站,把它们的资源变成我们自己。
要求是:要能实时更新,静态页面本地化,本地化的页面不能出现原有的主题。
实时更新和替换主题利用一般的小偷程序就可以实现,但是本地化就得把页面下载下来,这样一来样式,图片路径,实时更新等一系列的问题就要注意了。
css,js,图片等资源都要下载到本地,这些文件下载一两个没问题,一旦批量下载就要仔细观察它们的路径规则,而且一般css里面会含有背景图片,这也需要使用本地图片。所以首先要解决资源本地化,我写了一个小偷本地化的类,其中有几个方法可以实现资源本地化,暂时先展示资源本地化的方法,待介绍完了将开源所有的代码以及使用方法:
/**
* 生成文件夹,但是不生成文件
*
* @param $address
*/
public function get_file_adress($address){
//$first = substr($address, 0, 1);
$dirs = explode('/',$address);
$this->array_remove_empty($dirs);
//$address = implode($dirs, '/');
//if($first == '/') $address = '/'.$address;
$dirs = array_values($dirs);
$nums = count($dirs);
if($nums > 1)
{
$s=0;
while ($s<$nums-1){
$dirs[$s] = self::filename_safe($dirs[$s]);
if(!file_exists($dirs[$s])){
if(self::filename_check($dirs[$s])){
if(!file_exists($dirs[$s])) @$mkdir = mkdir($dirs[$s],0777);
}
}
++$s;
$dirs[$s]=$dirs[$s-1]."/".$dirs[$s];
}
}
}
/**
* 生成文件
*
* @param $filename
* @param $url
*/
private function grab_file($filename, $url) {
if($url == "") return false;
if($filename == "") return false;//echo $filename.'||'.$url.'<hr>';
$filename = ltrim($filename, '/');
if(!file_exists($filename))
{
$this->get_content($filename, $url);
}
/*$session_name = "grab_caches_file";
if($_SESSION[$session_name])
{
$grab_caches_time = $_SESSION[$session_name];//echo time().'||'.$grab_caches_time.'<hr>';
if((time() - $grab_caches_time) >= $this->cache_time)
{
$_SESSION[$session_name] = null;
unset($_SESSION[$session_name]);
$this->get_content($filename, $url);
}
}
else
{
$_SESSION[$session_name] = time();
$this->get_content($filename, $url);
}*/
}
public function get_content($filename, $url)
{//echo $filename.'||'.$url.'<hr>';
$content = curl_get_content($url);
if($content){
@file_put_contents($filename, $content);
return true;
}else{
return false;
}
}
先利用get_file_adress函数生成文件存放的文件夹,再用grab_file生成文件。