2

スクリプトが追加された現在のページのメタ タイトルを取得する小さなスクリプトがあります。問題は、いくつかのテスト ページでは正常に動作するが、私の CMS では動作しないことです。そこで死ぬまでループし、Apacheを完全に再起動してスクリプトを削除するまで、サーバー上のどのページにもアクセスできません。

誰か見てくれませんか?私は何時間もGoogleを使用していたので、これは本当に素晴らしいことです。確かに、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;?>
4

2 に答える 2

3

次の$_SERVER["REQUEST_URI"]ような GET パラメータを含めることもできます。

mysite.com?param1=1&param2=2

次に、文字列を追加しようとする?ignore=thisので、

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

これはPHPによって次のような変数に変換されます

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

?$url 変数のシンボルを確認する必要があります

于 2013-05-30T15:18:59.963 に答える
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 は適切に URL 書き換えを使用するため、変数が失われる可能$_GET['ignore']性があります。たとえば、すでに他の GET 変数がある場合。
ファイルを調べる.htaccessか、CMS のドキュメントを読んで、何が URL を変更できるかを確認する必要があります。

とにかく、不安定なコードを作成しているようですが、これはページのタイトルを取得するためだけです。CMS で簡単に取得する別の方法があると確信しています。

于 2013-05-30T15:19:26.830 に答える