私のURLはmysite.com/myuriとしましょう。世界が知っている方法はたくさんありますが、ローカルURLがmyuriの場合はmysite.comです。ローカルURI/URLが存在するかどうかを知る方法?
- 最も簡単かつ最速の方法は次のとおりです。
$uri_exists = file_exists($_SERVER['DOCUMENT_ROOT']."/myuri")
。 - 次の方法がある:
$headers = @get_headers("http://mysite.com/myuri");
$uri_exists = ($headers[0] == "HTTP/1.1 404 Not Found");
- 方法別の(以前よりも少し速い)である:
$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
要求を送信する
Erが、私を修正しますが、URLを自分のサイトに存在する場合、あなたは知っているべきではないのですか? ;)ちょうど、ファイルシステムのどちらかにするか、使用して(あなたがしている場合)ではなくHTTP経由でそれを理解しようとしているフレームワークとイントロスペクションのいくつかの種類を行うことが容易であるかもしれません。 – enygma
返信いただきありがとうございました....はい、私が質問で述べた最初の方法はまさにそれを行います。しかし、リライトされた(mod_rewrite)URLをチェックすることはめったにありません.... –
ファイルシステムの場合は2つのチェックが必要なように聞こえますが、それが失敗した場合はHTTP経由でチェックしますそれが書き直されているかどうかを見てください)。私はまだあなたが自分のサイトにどんなURLがあるのかわからない理由について混乱しています。 – enygma