2013-05-30 40 views
2

我有一個小腳本,應該獲取腳本添加到當前頁的元標題。問題是,它在幾個測試頁面上工作正常,但沒有進入我的CMS。它會循環直到死亡,並且我無法訪問我的服務器上的任何頁面,直到完全重新啓動apache並關閉腳本。獲取當前頁面標題無循環

有人可以看看嗎?這真的很棒,因爲我使用谷歌數小時,當然,我發現X線程和頁面,但從來沒有解決這個特殊的循環效應。

<?php 
function curPageURL() { 
    $pageURL = 'http'; 
    $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; 
} 
?> 
<?php 
if (!isset($_GET['ignore'])) 
{ 
    $url = curPageURL(); 
    $data = implode("", file("$url?ignore=this")); 
    preg_match ("/<title>([^`]*?)<\/title>/", $data, $match); 
    $urltitle = $match[1]; 
} 
?> 
<?echo $urltitle;?> 
+0

「它循環直到死亡」是什麼意思?你將不得不調試正在發生的事情,我們不能猜測......完成了什麼請求=日誌說什麼? – arkascha

+0

修改你的代碼以包含引起你悲傷的循環,這聽起來像你有一個壞的條件導致無限循環。 – Sammitch

+0

此外,你永遠不會檢查你對'file()'的調用是否成功,並且使用基於文件的函數通過HTTP檢索數據總是一個糟糕的主意恕我直言。使用[cURL](http://ca2.php.net/manual/en/curl.examples-basic.php)。與文件操作相比,我知道這很尷尬,但它更容忍在HTTP會話期間發生的奇怪垃圾,並且可以正確報告特定的錯誤,而不僅僅是返回'false'。 – Sammitch

回答

3

$_SERVER["REQUEST_URI"]還可以包括GET PARAMS這樣的:

mysite.com?param1=1&param2=2 

然後嘗試追加一個字符串?ignore=this等你拿

mysite.com?param1=1&param2=2?ignore=this 

這是由PHP翻譯成變量一樣

param1 = '1' 
param2 = '2?ignore=this' 

必須在$ url變量檢查?符號

0

我使用這個函數來獲得當前頁面的URL:

function currentURL() { 
    $protocol = stripos($_SERVER['SERVER_PROTOCOL'], 'https') === FALSE ? 'http' : 'https'; 
    $host  = $_SERVER['SERVER_NAME']; 
    $port  = $_SERVER["SERVER_PORT"]; 
    $query = $_SERVER['REQUEST_URI']; 
    return $protocol.'://'.$host.($port != 80 ? ':'.$port : '').$query; 
} 

但你的問題來自這裏:

if (!isset($_GET['ignore'])) 
{ 
    $url = curPageURL(); 
    $data = implode("", file("$url?ignore=this")); 
    /* ... */ 
} 

這將「測試頁面」的工作,但你CMS propably使用URL重寫,這可以導致失去您的$_GET['ignore']變量:如果你已經等GET v可以舉例說。
你應該看看你的.htaccess文件,或者閱讀你的CMS文檔,以知道什麼可以改變你的網址。

無論如何,這似乎正在構建一些不穩定的代碼,而這只是爲了獲得頁面的標題。我很肯定你有另一種方法可以很容易地使用你的CMS。