2010-09-08 62 views
0

我讀了幾個類似的帖子,但我沒有看到我的錯。網址和標題與PHP片段

的index.php樣子:

<head> 
<title>Demo Title</title> 
</head> 
<body> 
<?php 
    require_once "footer.php"; 
?> 
</body> 

footer.php的樣子:

<?php 
/* 
* _$ Rev. : 08 Sep 2010 14:52:26 $_ 
* footer.php 
*/ 

$host = $_SERVER['SERVER_NAME']; 
$param = $_SERVER ['REQUEST_URI']; 
$url = "http://".$host.$param; 
echo $url; 

$file = @ fopen($_SERVER[$url],"r") or die ("Can't open HTTP_REFERER."); 
$text = fread($file,16384); 
if (preg_match('/<title>(.*?)<\/title>/is',$text,$found)) { 
     $title = $found[1]; 
} else { 
     $title = " -- no title found -- "; 
} 
?> 

一種URL請求http://127.0.0.1/test/index.php結果:

http://127.0.0.1/test/index.phpCan't open HTTP_REFERER. 

http://127.0.0.1/test/

http://127.0.0.1/test/Can't open HTTP_REFERER. 

任何提示讚賞。

+0

這不會導致您的服務器請求永不結束的循環嗎?因爲,你試圖請求一個文件吐出來,所以每一個你對index.php做的打開你會導致它再次打開,等等!這是一個失敗。這可能會解釋你的評論下面的'服務器跑出線程服務請求' – RobertPitt 2010-09-08 13:16:23

回答

1

試試這個:

$file = @ fopen($url,"r") or die ("Can't open HTTP_REFERER.");

+0

$ _SERVER [$ url]是第一個錯誤。我用您的解決方案替換了該行,但瀏覽器不響應。直到現在,error.log才顯示出來。 – vbd 2010-09-08 13:08:41

+0

error.log顯示[Wed Sep 08 15:07:09 2010] [警告]服務器用盡線程服務請求。考慮提高ThreadsPerChild設置 – vbd 2010-09-08 13:10:16

+0

爲什麼你使用完整的URL來打開文件?如果它在同一臺服務器上不能使用本地鏈接(例如「index.php」而不是「http://127.0.0.1/index.php」) – yousefcisco 2010-09-08 13:26:49

2

$ _SERVER是一個包含了一些與該服務器配置字段的數組。它不包含名爲「http://」。$ host。$ param的元素,所以試圖打開它作爲文件名會導致fopen調用失敗,從而進入die()語句。

更可能的是你想要做的只是打開名爲「http://」。$ host。$ param的文件。如果這就是你想要的,那就放下$ _SERVER []位,它應該會更好。

請注意,因爲它是一個URL,所以您需要使用PHP配置來允許使用fopen()打開遠程文件。 PHP並不總是以這種方式默認配置,因爲它可能是安全風險。您的開發機器也可能與您最終將部署到的系統配置不同。如果您發現無法使用fopen()打開遠程URL,則可以使用CURL等替代方法,但它們不如簡單的fopen()調用那樣簡單。另外,如果你正在閱讀整個文件,你可能需要考慮file_get_contents()而不是fopen()和fread(),因爲它將整個事件替換爲單個函數調用。

0

嘗試

<?php 

$dom = new DOMDocument(); 

$host = $_SERVER['SERVER_NAME']; 
$param = $_SERVER ['REQUEST_URI']; 
$url = "http://".$host.$param; 

echo 'getting title for page: "' . $url . '"'; 

$dom->loadHTML($url); 

$dom->getElementsByTagName('title'); 

if ($dom->length) 
{ 
    $title = $dom->item(0); 
    echo $title; 
} 
else 
{ 
    echo 'title tag not found'; 
} 



?> 
+0

在頂部設置'$ title',否則可能導致E_NOTICE錯誤。 – RobertPitt 2010-09-08 13:21:41

+0

我用腳本替換了footer.php。瀏覽器顯示獲得頁面標題:「http://127.0.0.1/test/」,但沒有標題或標題標籤找不到消息 – vbd 2010-09-08 13:28:27

0

我可以看到你的努力跟蹤推介的標題

您需要使用$_SERVER['HTTP_REFERER'];來獲取

你想做的事是這樣的

$referrer = (!empty($_SERVER['HTTP_REFERER']) && !substr($_SERVER['SERVER_NAME']) ? $_SERVER['HTTP_REFERER'] : false); 

    if($referrer) 
    { 
     try 
     { 
      if(false !== ($resource = fopen($referrer,"r"))) 
      { 
       $contents = ''; 
       while($contents .= fread($resource,128)) 
       {} 

       if(preg_match('/<title>(.*?)<\/title>/is',$contents,$found)) 
       { 
        echo 'Referrer: ' $found[1]; 
       } 
      } 
     }catch(Exception $e){} 
    }