2014-04-10 3 views
1

DOMDocument()를 사용하여 HTML 페이지의 텍스트를로드합니다.DOMDocument()가 페이지를로드하는 데 너무 많은 시간이 걸립니다.

페이지를로드하는 데 많은 시간이 걸립니다. 이미지를 다운로드한다는 의미입니까?

URL에서 HTML 페이지를 더 빨리로드 할 수있는 대안이나 해결책이 있습니까?

기본적으로 내가 작업 코드

솔루션은 높게 평가 될 것이다 등 메타 설명, 제목 텍스트, 본문 텍스트를 추출 할 수있는 DOMDocument()를 사용하고 있습니다.

<?php 
set_time_limit(0); 
include "connection.php"; 

error_reporting(E_ERROR | E_PARSE); 
// Create a document instance 
    $doc = new DOMDocument(); 
    if(!isset($_GET['url'])){ 
    $_GET['url']=$urlfromdaemon; 
    $silentcrawl="set"; 
    } 



$doc->loadHTMLFile($_GET['url']); 
    $base_url=$_GET['url']; 
    $base_url = parse_url($base_url); 
    $base_url = 'http://'.$base_url['host'].'/'; 

    //Searches for all elements with the "a" tag name 
    $tit = $doc->getElementsByTagName("a"); 
    $urlarray=array(); 
    $t=0; 
    foreach($tit AS $x){ 
    $urlarray[$t]=$x->getAttribute('href'); 
    $urlanchor[$t]=$x->nodeValue; 
    $t++; 
} 
//This makes the URL with spaces work correctly 
for($i=0;$i<count($urlarray);$i++){ 
$urlarray[$i]= str_ireplace(" ","%20",$urlarray[$i]); 
} 
// 

for($i=0;$i<count($urlarray);$i++){ 
$result=stristr(substr($urlarray[$i], 0, 7),"http://"); 
if($result==''){ 

if(stristr(substr($urlarray[$i], 0, 8),"https://")!=''){ 

} 

else if(stristr(substr($urlarray[$i], 0, 2),"//")!=''){ 
$urlarray[$i]= 'http:'.$urlarray[$i]; 
} 

else if(stristr(substr($urlarray[$i], 0, 4),"www.")==''){ 
//critical code section 

$urlcheck='http://'.$urlarray[$i]; 
$headers = @get_headers($urlcheck, 1); 
if ($headers === FALSE) { //Test for differentiate example.com with example . 

if(substr($_GET['url'],-1)=='/'){ 
$urlarray[$i]= $_GET['url'].$urlarray[$i]; 
} 
else{ 
if(parse_url($_GET['url'], PHP_URL_PATH)=='/'){ 
$trim=basename(parse_url($_GET['url'], PHP_URL_PATH)); 
$urlarray[$i]= str_ireplace($trim,"",$_GET['url']).$urlarray[$i]; 

} 
else if(substr(str_ireplace(basename($_GET['url']),"",$_GET['url']),-1)=='/'){ 

if(substr(str_ireplace(basename($_GET['url']),"",$_GET['url']),-7)=='http://'){ 
$trim=basename(parse_url($_GET['url'], PHP_URL_PATH)); 
$urlarray[$i]= str_ireplace($trim,"",$_GET['url']).'/'.$urlarray[$i]; 
} 
else{ 
$trim=basename(parse_url($_GET['url'], PHP_URL_PATH)); 
$urlarray[$i]= str_ireplace($trim,"",$_GET['url']).$urlarray[$i]; 
} 

} 

else{ 
$trim=basename(parse_url($_GET['url'], PHP_URL_PATH)); 
$urlarray[$i]= str_ireplace($trim,"",$_GET['url']).'/'.$urlarray[$i]; 
} 
} 

} 
else { 

$urlarray[$i]= 'http://'.$urlarray[$i]; 

} 



// 
} 



else{ 
$urlarray[$i]='http://'.$urlarray[$i]; 

} 

} 

} 

for($i=0;$i<count($urlarray);$i++){ 

     $file = $urlarray[$i]; 
$file_headers = @get_headers($file); 

if($file_headers[0] =='HTTP/1.1 404 Not Found') { 
     if(!isset($silentcrawl)){ 
     //print_r($file_headers); 
    echo '<img style="width:20px;height:20px;float:left;" src="cross.png" > '.$urlarray[$i].'<br><Br>'; 
    } 
} 
else { 
if(!isset($silentcrawl)){ 
    echo '<img style="width:20px;height:20px;float:left;" src="tick.png" > '.$urlarray[$i].'<br><br>'; 
    } 
    //Insert Active Links into the database 
    $res=mysqli_query($con,"SELECT * from links where url='$urlarray[$i]' "); 
$count=mysqli_num_rows($res); 
if($count==0){ 
$sql="INSERT INTO links (url,referer,anchor_pool) 
VALUES ('$urlarray[$i]','$_GET[url]','$urlanchor[$i]')"; 
mysqli_query($con,$sql); 
} 
else{ 
$res=mysqli_query($con,"SELECT * from links where url='$urlarray[$i]' "); 
while($row=mysqli_fetch_array($res)){ 
$referers=explode(" ",$row['referer']); 
$refcount=0; 
for($j=0;$j<count($referers);$j++){ 
if($_GET['url']==$referers[$j]){ 
$refcount++; 
//echo "same referer"; 
} 
if($_GET['url']==$urlarray[$i]){ 
$refcount++; 
//echo "same referer"; 
} 
} 
if($refcount<1){ 
$newreferer=$row['referer']." ".$_GET['url']; 
$sql="update links set referer='$newreferer' where url='$urlarray[$i]' "; 
mysqli_query($con,$sql); 

$anchor=$row['anchor_pool'].' '.$urlanchor[$i]; 
$anchors=explode(" ",$anchor); 
$anchors=array_unique($anchors); 
$anchors=array_values($anchors); 
$final_anchor=implode(' ',$anchors); 

$sql="update links set anchor_pool='$final_anchor' where url='$urlarray[$i]' "; 
mysqli_query($con,$sql); 
} 


} 


} 


} 
} 

$errors = array_filter($urlarray); 

if (!empty($errors)) { 

} 
else{ 
echo "Either the URL is down or page contains no Links !, Try entering URL along with protocol used."; 
} 


$prime=$_GET['url']; 
$res=mysqli_query($con,"SELECT * from links where url='$prime' "); 
$count=mysqli_num_rows($res); 
if($count==0){ 
$sql="INSERT INTO links (url,referer,anchor_pool,backlinks,status) 
VALUES ('$_GET[url]','','','0','1')"; 
mysqli_query($con,$sql); 
} 
else{ 
$file_headers = @get_headers($prime); 
if($file_headers[0] == 'HTTP/1.1 200 OK') { 
$sql="update links set status='1' where url='$prime' "; 
mysqli_query($con,$sql); 
} 
} 


$res=mysqli_query($con,"SELECT * from links "); 
while($row=mysqli_fetch_array($res)){ 

$bkarray=array_filter(explode(" ",$row['referer'])); 
for($i=0;$i<count($bkarray);$i++){ 
$base_url=parse_url($bkarray[$i]); 
$bkarray[$i]=$base_url['host']; 
} 

$bkarray=array_unique($bkarray); 
$bkarray=array_values($bkarray); 
$bkarray=array_filter($bkarray); 

$bk=count($bkarray); 
$sql="update links set backlinks='$bk' where url='$row[url]' "; 
mysqli_query($con,$sql); 

} 

?> 
+0

실무 코드? 너는 비 작동 한 것을 보여 주지도 않았다. –

+0

DomDocument는 페이지의 마크 업만로드합니다. 페이지로드가 느린 경우에는 여러 가지 이유가있을 수 있습니다. 잘못된 연결, 느린 서버 등 DomDocument 내 눈에 꽤 빨리 작동합니다. – Marcel

+0

코드를 추가했습니다 – user3475546

답변

0

DOMDocument 클래스는 HTML/XML 구문 분석기입니다. 기간.

공유하지 않은 코드는 PHP 스트림 래퍼를 사용하여 로컬 파일로드와 동일한 구문을 사용하여 HTTP를 통해 원격 리소스를 투명하게 다운로드합니다. 그것은 완전히 다른 작업입니다. 필자가 아는 한, PHP는 기본 라이브러리의 일부로 완전한 기능을 갖춘 웹 크롤러를 번들하지 않습니다. 다운로드 문제의 원인이 아닌이 줄 끝에서

$doc->loadHTMLFile($_GET['url']); 

모든 :

편집 : 전체 다운로드가 발생하는 경우 여기입니다.

관련 문제