2012-03-09 12 views
0

私のURLはmysite.com/myuriとしましょう。世界が知っている方法はたくさんありますが、ローカルURLがmyuriの場合はmysite.comです。ローカルURI/URLが存在するかどうかを知る方法?

  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サーバへの不必要なトラフィックを引き起こします。私が尋ねるしようとしているものに来る

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

は、

平和...代わりにURIの内容はあなたに戻って、あなたがHEAD要求を使用することができたことになるGET要求を送信する

+0

Erが、私を修正しますが、URLを自分のサイトに存在する場合、あなたは知っているべきではないのですか? ;)ちょうど、ファイルシステムのどちらかにするか、使用して(あなたがしている場合)ではなくHTTP経由でそれを理解しようとしているフレームワークとイントロスペクションのいくつかの種類を行うことが容易であるかもしれません。 – enygma

+0

返信いただきありがとうございました....はい、私が質問で述べた最初の方法はまさにそれを行います。しかし、リライトされた(mod_rewrite)URLをチェックすることはめったにありません.... –

+1

ファイルシステムの場合は2つのチェックが必要なように聞こえますが、それが失敗した場合はHTTP経由でチェックしますそれが書き直されているかどうかを見てください)。私はまだあなたが自分のサイトにどんなURLがあるのか​​わからない理由について混乱しています。 – enygma

答えて

1

をありがとうWebアプリケーションの実装によっては、URIを返そうとするのではなく、URIに関する情報だけを伝えることができます。

次のコードを使用して、第3の例を修正することができます:

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'HEAD'); 
+0

返信ありがとう....しかし、それでも依然としてリモートリクエストを実行します。私が間違っている場合は、私に修正してください... –

1

あなたはSAPIによっては、PHPとApacheを使用している場合は、もう少しでよい($ URI)をapache_lookup_uri使用することができるかもしれません効率的。私が間違っている場合

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

+0

返信ありがとう...私はPHPとApacheを使用しています... apache_lookup_uri($ uri)は、存在しないURLの場合でもステータスコード200を返しましたmod_rewriteを使用するとき。 –

関連する問題