0

私の URL がmysite.com/myuriであるとしましょう。私のサイトmysite.com にローカル uri myuriが存在するかどうかを知るために、世界中で知られている多くの方法があります

  1. 最も簡単で最速の方法は次のとおり
    $uri_exists = file_exists($_SERVER['DOCUMENT_ROOT']."/myuri")です。
  2. 次の方法は次のとおりです。
    $headers = @get_headers("http://mysite.com/myuri");
    $uri_exists = ($headers[0] == "HTTP/1.1 404 Not Found");
  3. 別の(前のものより少し速い)方法は次のとおりです。
    $curl = curl_init('http://mysite.com/myuri');
    curl_setopt($curl, CURLOPT_NOBODY, true);
    curl_exec($curl);
    $info = curl_getinfo($curl);
    $uri_exists = ($info['http_code'] == 200);
    curl_close($curl);

これらは私が知っている方法でした。最初の方法は、URI が存在するかどうかではなく、ファイルが存在するかどうかを正確にチェックします。を使用すると、このmod_rewrite方法は非常に不正確になります。

次の 2 つの方法は ( を使用した場合でも) 正確mod_rewriteですが、独自のサイトに対してリモート GET 要求を実行するため速度が遅くなります。また、URI が存在するかどうかを知るためだけに、mysite.com のスクリプトが不必要に実行されるため、非効率的です。さらに、 mysql サーバーへの不要なトラフィックが発生します。

私が質問しようとしているのは、mysite.com の PHP スクリプトで上記の 3 つの方法よりも効率的で正確な方法を使用して、mysite.com/myuriという URL が存在するかどうかを確認することです。

ありがとうございました

平和...

4

2 に答える 2

1

リクエストを送信するGETと、URI のコンテンツが返されます。HEADリクエストを使用すると、Web アプリケーションの実装によっては、URI を返そうとするのではなく、URI に関する情報を伝えることができます。 .

次のコードを使用して、3 番目の例を変更できます。

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'HEAD');
于 2012-03-09T12:46:27.767 に答える
1

PHP と Apache を使用している場合、SAPI によっては apache_lookup_uri($uri) を使用できる場合があり、これはわずかに効率的です。

http://ca2.php.net/manual/en/function.apache-lookup-uri.php

于 2012-03-09T13:32:26.860 に答える