0

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

页面标题():

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,它会毫无问题地显示页面的页面标题,但我需要它来获取当前页面/url 的页面标题。

我还测试了它的输出,curPageURL();它确实获取了当前网页的完整 URL。

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

4

1 回答 1

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在需要时在其他任何地方使用。

于 2013-04-26T16:59:48.487 回答