Как узнать, существует ли локальный URI / URL? - PullRequest
0 голосов
/ 09 марта 2012

Предположим, мой URL-адрес mysite.com / myuri . В мире существует множество способов узнать, существует ли на моем сайте локальный uri myuri mysite.com.

  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, этот метод очень неточен.

Следующие два метода точны (даже когда используется mod_rewrite), но медленны, поскольку они выполняют удаленные запросы GET на свой сайт. Они также неэффективны, потому что просто для того, чтобы узнать, существует ли URI, скрипты на mysite.com будут выполняться без необходимости. Более того, они будут вызывать ненужный трафик на сервер MySQL.

Возвращаясь к тому, что я пытаюсь спросить, я хочу, чтобы PHP-скрипты на mysite.com проверяли, существует ли URL mysite.com / myuri , используя метод, более эффективный и точный, чем выше трех методов.

Спасибо

Мир ...

Ответы [ 2 ]

1 голос
/ 09 марта 2012

Если вы используете PHP и Apache, в зависимости от SAPI вы можете использовать apache_lookup_uri ($ uri), который может быть немного более эффективным.

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

1 голос
/ 09 марта 2012

Вместо отправки запроса GET, в результате которого вам будет возвращено содержимое URI, вы можете использовать запрос HEAD, который, в зависимости от реализации веб-приложения, может просто дать вам некоторую информациюо URI вместо того, чтобы пытаться вернуть его.

Вы можете изменить свой третий пример, используя следующий код:

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'HEAD');
...