2013-04-26 42 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():

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; 
} 

試圖放棄之前執行page_title(); 10-20秒時,服務器掛起。

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

我測試過page_title();以查看它是否可用。如果我放入一個外部URL,它顯示頁面的標題沒有問題,但我需要它來獲取當前頁面/網址的頁面標題。

我也測試了curPageURL();的輸出,它取得了當前網頁的完整URL。

如果有解決方案,它必須包含將獲取的頁面標題存儲到PHP變量($pagetitle)中的功能。

+2

你是否有機會嘗試獲取當前URL的page_title()?是不是因此遞歸地(與無關的HTTP請求)調用自己? – mario 2013-04-26 16:45:15

+0

@mario是的。我正在嘗試獲取當前網址的page_title。嗯,你是說它會陷入無限循環? (英語是我的第二語言,但我正在盡力遵循) – 2013-04-26 16:53:36

+0

@MikeB我不會在這方面與你爭論。嗯。是否有任何其他方式來檢索當前頁面的頁面標題+網址,也能夠將這些值存儲在PHP變量? 似乎我有一些代碼要重寫:) – 2013-04-26 17:12:34

回答

0

嘗試用curl代替file_get_contents,看看同樣的事情發生:

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 2013-04-26 17:05:38

+0

感謝回覆!我嘗試了代碼,發生了同樣的事情。 我同時監視服務器,並通過屋頂拍攝內存使用情況並暫停服務器。 我開始相信我要完成的事情必須以完全不同的方式完成。 – 2013-04-26 17:05:56

+0

如果您使用Chrome/Firefox /其他瀏覽器可以顯示頁面大小並且超過100 KB,則此想法可能不可行,因此您最好在頭文件或函數中編寫不同的函數輸出標題,用於存儲頁面標題。 – stealthyninja 2013-04-26 17:12:07