2013-04-26 2 views
0

현재 페이지 제목을 PHP 변수에 저장하려고하는데 페이지 제목을 가져 오려고하면 서버가 멈 춥니 다."page_title();"을 실행하려고하면 서버가 멈 춥니 다.

PAGE_TITLE() :

function page_title($url) { 
    $fp = file_get_contents($url); 

    if (!$fp) 
     return null; 

    $res = preg_match("/<title>(.*)<\/title>/siU", $fp, $title_matches); 

    if (!$res) 
     return null; 

    $title = preg_replace('/\bReactionDB\b/i',' ', $title_matches[1]); 
    $title = preg_replace('/\|/', '', $title);    
    $title = trim($title); 

    return $title; 
} 

curPageURL은() : 포기하기 전에 10~20초에 대한 page_title();을 실행하려고 할 때

function curPageURL() {  
    $pageURL = 'http'; 

    if ($_SERVER["HTTPS"] == "on") { 
     $pageURL .= "s"; 
    } 

    $pageURL .= "://"; 

    if ($_SERVER["SERVER_PORT"] != "80") { 
     $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; 
    } else { 
     $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; 
    } 

    return $pageURL; 
} 

서버가 중단됩니다.

$domene = curPageURL(); 
$pagetitle = page_title($domene); 

나는 완전히 작동하는지 확인하기 위해 page_title();을 테스트했습니다. 외부 URL을 입력하면 아무 문제없이 페이지 제목이 표시되지만 현재 페이지/URL의 페이지 제목을 가져와야합니다.

나는 또한 curPageURL();의 출력을 테스트했으며 현재 웹 페이지의 전체 URL을 가져옵니다.

해결 방법이 있다면 가져온 페이지 제목을 PHP 변수 ($pagetitle)에 저장할 수있는 기능이 있어야합니다. 같은 일이 발생하는 경우

+2

현재 URL의 page_title()을 (를) 얻으려고하십니까? 그로 인해 함수가 재귀 적으로 (외부 HTTP 요청으로) 자체 호출을하지는 않습니까? – mario

+0

@mario 맞습니다. 현재 URL의 page_title을 가져 오려고합니다. 음, 무한 루프에 빠지다는 뜻인가요? (영어는 저의 제 2 언어입니다. 그러나 따라 가기 위해 최선을 다하고 있습니다) –

+0

@MikeB 나는 그것에 대해 당신과 논쟁하지 않을 것입니다. 흠. 현재 페이지의 페이지 제목 + URL을 검색하는 다른 방법이 있습니까? 또한 이러한 값을 PHP 변수에 저장할 수 있습니까? 다시 작성할 코드가있는 것 같습니다. –

답변

0

대신 file_get_contentscurl으로 시도하고 참조 :

function url_get_contents($url) { 
    if (!function_exists('curl_init')) 
     return null; 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $output = curl_exec($ch); 
    curl_close($ch); 

    $res = preg_match("/<title>(.*)<\/title>/siU", $output, $title_matches); 

    if (!$res) 
     return null; 

    $title = preg_replace('/\bReactionDB\b/i',' ', $title_matches[1]); 
    $title = preg_replace('/\|/', '', $title);    
    $title = trim($title); 

    return $output; 
} 

$domene = curPageURL(); 
$pagetitle = url_get_contents($domene); 


업데이트

예제 스크립트 :

<?php 
$script  = explode('/', $_SERVER['PHP_SELF']); 
$scriptname = $script[count($script) - 1]; 

switch($scriptname) { 
    case 'index.php': 
     $title = 'Welcome'; 
    break; 

    case 'about.php': 
     $title = 'About Us'; 
    break; 

    default: 
     $title = ''; 
} 
?> 
<title><?php if ($title != '') { echo $title . ' | '; } ?>ReactionDB</title> 

이제 $title을 사용할 수 있습니다 언제 어디서나 필요할 때 그것.

+0

두 번째 및 세 번째'preg_replace '는'$ title = str_replace ("Reaction |", "$ title_matches [1]);" – stealthyninja

+0

답장! 나는 코드를 시도하고 같은 일이 일어난다. 동시에 서버를 모니터링하고 메모리 사용량이 지붕을 통해 쏘아 져 서버가 정지되었습니다. 나는 내가 성취하려는 일이 완전히 다른 방식으로 이루어져야한다고 믿기 시작했다. –

+0

Chrome/Firefox/다른 브라우저를 사용하여 페이지 크기를 표시 할 수 있고 100KB가 넘는 브라우저 인 경우이 아이디어는 실현 가능하지 않을 수 있으며 헤더 또는 기능에 다른 기능을 쓰는 것이 좋습니다. 페이지 제목을 저장하기위한 헤더를 출력합니다. – stealthyninja

관련 문제