2010-09-08 63 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){} 
    }