2011-03-16 5 views
0

file_get_contents을 사용하여 링크에서 제목을 가져 오지만 실행하는 데 약 20 - 30 초가 걸립니다. 가져올 쉽고 빠른 방법이 있습니까?file_get_contents 실행 시간을 줄이는 방법

업데이트 : 나는 HTML을 포함한 모든 것을 제공이 코드를 시도

$page = fread(fopen($url, "r"), 1000); // first 2KB 
$titleStart = strpos($page,'<title>')+7; 
$titleLength = strpos($page,'</title>')-$titleStart; 
$meta['title'] = substr($page,$titleStart,$titleLength); 

답변

3

원격 페이지를 검색 할 때 시간은 대부분 연결 속도, 대기 시간 및 원격 서버에 따라 다릅니다. 이러한 것들에 관해 할 수있는 일은별로 없으며 대안적인 HTTP 검색 방법을 사용하는 것은 매우 유용합니다.

그러나 원격 페이지가 상당히 큰 경우 부분적으로 만 가져 오는 것이 좋습니다. 대신 전체 페이지를 다운로드하는 file_get_contents의 시도 :

$page = fread(fopen($url, "r"), 2048); // first 2KB 

추출의 사용을 위해서가 아니라 당신의 SUBSTR 방법 :

preg_match('#<title>(.*?)</title>#', $page, $match); 
$meta["title"] = $match[1]; 
+0

'$ page = fread (fopen ($ url, "r"), 1000); // 첫 번째 2KB $ titleStart = strpos ($ page, '') +7; $ titleLength = strpos ($ 페이지, '') - $ titleStart; $ meta [ '제목'] = substr ($ 페이지, $ 제목 시작, $ 제목 길이); ' 이 코드는 빠르지 만 내용은 제목이 아닙니다. –

+0

그런 다음 4KB 또는 8KB로 만듭니다. 사용법에 대해 자세히 알지 못합니다. – mario

+0

그냥 링크의 META 제목을 인쇄하고 싶지만 전체 HTML 코드를 가지고 있습니다. –

3

당신은 컬 (http://php.net/manual/en/book.curl.php)을 시도해 볼 수도, 또는 응답을 캐시 정기적으로 바뀌지 않는 경우.

문제는 네트워크 대기 시간으로 인한 것일 수 있으며, 그 중 대부분은 데이터를 가져 오는 사이트에서 제어합니다. 지리적으로 호스트에 더 가까운 서버가 도움이 될 수 있습니다.

+0

은 stream_set_timeout있다. cURL은 이러한 상황에서'file_get_contents' 또는'fopen'보다 훨씬 빠릅니다. – Artefact2

1

을 자주 요청하는 것입니다 수있는 파일에 대한 최선의 방법입니다 그것을 캐시해라.

서버에 cache 폴더를 보관하고 요청한 파일이 자주 변경되지 않는 한 파일의 캐시 된 버전의 마지막 수정 시간을 filemtime()으로 확인하고 시간이 24 시간 이상이면 확인할 수 있습니다 컬에 CURLOPT_CONNECTTIMEOUT 및 CURLOPT_TIMEOUT이 있기 때문에 옛날, 당신은 원격 파일을

0

컬 기능의 해결책이를 요청할 수 있지만, 합의 file_get_contents에서 (연결 시간 제한)는 fopen 등

관련 문제