尝试执行“page_title();”时服务器挂起

时间:2013-04-26 16:36:55

标签: php

我正在尝试将当前页面标题存储在PHP变量中,但是当我尝试获取页面标题时服务器挂起。

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();的输出,它确实获取了当前网页的完整网址。

如果有解决方案,它必须包括将获取的页面标题存储到PHP变量($pagetitle)中的能力。

1 个答案:

答案 0 :(得分: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