ホームページ  >  記事  >  バックエンド開発  >  Webページスナップショット関数_PHPチュートリアル

Webページスナップショット関数_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-20 11:05:241148ブラウズ

//========================================== ==========
// ファイル名: snap.class.php
// 概要: 网页快照类
// 著者: millken(迷路林サック)
// 最終更新日:2007-06-29
/ / copyright (c)2007 [email]millken@gmail.com[/email]
//============================= =======================
クラススナップ{
var $dir;
var $log;
var $contents;
var $filename;
var $ host;
var $name;
var $data_ts;
var $ttl;
var $url;
var $ts;
function snap(){
$this->log = "新しい snap() オブジェクトがインスタンス化されました。< ;br />n";  
$this->dir = dirname(__FILE__)."/";
}
function fetch($url="",$ttl=10){
$this->log .= "----- -------------------------
fetch() が呼び出されました
n";
$this-> ;log .= "url: ".$url."
n";
$hosts = parse_url($url);
$this->host = $hosts['scheme'].': //'.$hosts['host'].'/';
if (!$url) {
$this->log .= "おっと: URL を渡す必要があります!
" ;
return false;
}
$this->ttl = $ttl;
$this->url = $url;
$this->name = md5($this->url);
$this ->ファイル名 = $this->dir.$this->name;
$this->log .= "ファイル名: ".$this->ファイル名."
";
$this->getFile_ts();
$this->file_get_content();

}
function file_get_content(){
ob_start();
$this->ts = time() - $this->data_ts;
if($this->data_ts <>0 && $this- >ts <= $this->ttl){
$this->log .= "キャッシュの有効期限が切れました
";
@readfile($this->filename);  
$this->contents = ob_get_contents();
ob_end_clean();
}else{
$this->log .= "キャッシュの有効期限が切れていない
";       
@readfile($this->url);  
$this->contents = ob_get_contents();
ob_end_clean();
$this->saveToCache();
}
return true;
}
関数 saveToCache(){
$this->log .= "saveToCache() が呼び出されました
";
// ファイル ポインタを作成します
if (!$fp=@fopen($this->filename,"w")) {
$this->log .= "「.$this->filename」を開けませんでした。
";
return false;
}
$this->contents = $this->formaturl($this->contents, $this->host);
$this->contents = preg_replace("']*?>.*?'si","",$this- >contents);
// ファイルに書き込みます
if (!@fwrite($fp,$this->contents)) {
$this->log .= "「.$this->」に書き込めませんでした;filename."
";
fclose($fp);
return false;
}
//ファイルポインタを閉じる
fclose($fp);
return true;
}
関数 getFile_ts(){
$this->log .= "getFile_ts() が呼び出されました
";
if (!file_exists($this->filename)) {
$this->data_ts = 0;
$this- >log .= $this->filename." は存在しません
";
return false;
}
$this->data_ts = filemtime($this->filename);
return true ;
}
関数 formaturl($l1,$l2){
if (preg_match_all("/(]+src="([^"]+)"[^>]*> )|(]+href="([^"]+)"[^>]*>)|(]+href="([^" ]+)"[^>]*>)|(Webページスナップショット関数_PHPチュートリアル]+src='([^']+)'[^>]*>)|( foreach($regs[0] as $num => ; $url){
$l1 = str_replace($url,$this->lIIIIl($url,$l2),$l1);
}
    }
return $l1;
}

関数lIIIIl($l1,$l2){
if(preg_match("/(.*)(href|src)=(.+?)( |/>|> ).*/i",$l1,$regs)){$I2 = $regs[3];}
if(strlen($I2)>0){
$I1 = str_replace(chr(34)," ",$I2);
$I1 = str_replace(chr(39),"",$I1);
}else{return $l1;}
$url_parsed = parse_url($l2);
$scheme = $url_parsed[ "スキーム"];if($scheme!=""){$scheme = $scheme."://";}
$host = $url_parsed["host"];  
$l3 = $scheme.$host;
if(strlen($l3)==0){return $l1;}
$path = dirname($url_parsed["path"]);if($path[0] ==""){$path="";}
$pos = strpos($I1,"#");
if($pos>0) $I1 = substr($I1,0,$pos);
// 判断类型
if(preg_match("/^(http|https|ftp):(//|)(([w/+-~`@:%])+.)+([w/.=? +-~`@':!%#]|(&)|&)+/i",$I1)){return $l1; }//http开头のurl类型要跳过
elseif($I1[0]=="/"){$I1 = $l3.$I1;}//绝对路径
elseif(substr($I1,0, 3)=="../"){//相对路径
while(substr($I1,0,3)=="../"){
$I1 = substr($I1,strlen($I1) -(strlen($I1)-3),strlen($I1)-3);
if(strlen($path)>0){
$path = dirname($path);
}
}
$I1 = $l3.$path."/".$I1;
}
elseif(substr($I1,0,2)=="./"){
$I1 = $l3.$path.substr($I1 ,strlen($I1)-(strlen($I1)-1),strlen($I1)-1);
}
elseif(strto lower(substr($I1,0,7))=="mailto:"| |strto lower(substr($I1,0,11))=="java script:"){
return $l1;
}else{
$I1 = $l3.$path."/".$I1;
}
return str_replace($I2,""$I1"",$l1);
}
}
?>

用法test.php:

require_once(dirname(__FILE__).'/ snap.class.php');
$h = new snap();
$h->fetch($_GET['url']);
//echo $h->log;
echo $h- >コンテンツ;
?>


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/445124.html技術記事 ?PHP //============================================= ====== // ファイル名: snap.class.php // 概要: 网页快照类 // 著者: millken(迷路林了解) // LastModifed:2007-06-29 // co...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。