Я учу себя некоторому основному анализу, и я обнаружил, что иногда URL-адреса, которые я передаю в мой код, возвращают 404, что объединяет весь остальной код.
Поэтому мне нужен тест в верхней части кода, чтобы проверить, возвращает ли URL 404 или нет.
Это может показаться довольно простой задачей, но Google не дает мне никаких ответов. Я волнуюсь, я ищу не те вещи.
Один блог рекомендовал мне использовать это:
$valid = @fsockopen($url, 80, $errno, $errstr, 30);
а затем проверьте, является ли $ valid пустым или нет.
Но я думаю, что URL, который вызывает у меня проблемы, имеет перенаправление, поэтому $ valid будет пустым для всех значений. Или, возможно, я делаю что-то еще не так.
Я также изучил «главный запрос», но мне еще не удалось найти какие-либо реальные примеры кода, с которыми можно поиграть или попробовать.
Предложения? И что это за скручиваемость?
источник
curl_setopt($handle, CURLOPT_NOBODY, true);
перед запускомcurl_exec
Если у вас работает php5, вы можете использовать:
В качестве альтернативы с php4 пользователь добавил следующее:
Оба будут иметь результат, похожий на:
Поэтому вы можете просто проверить, что ответ заголовка в порядке, например:
W3C коды и определения
источник
get_headers($https_url,1,443);
я уверен, что он будет работать, хотя он не входит в стандартнуюget_headers()
функцию. Не стесняйтесь тестировать его и отвечать на него статусом.С помощью кода Страгера вы также можете проверить CURLINFO_HTTP_CODE на наличие других кодов. Некоторые веб-сайты не сообщают 404, скорее они просто перенаправляют на пользовательскую страницу 404 и возвращают 302 (перенаправление) или что-то подобное. Я использовал это, чтобы проверить, существует ли на сервере настоящий файл (например, robots.txt) или нет. Очевидно, что этот тип файла не вызовет перенаправления, если он существует, но если этого не произойдет, он перенаправит на страницу 404, которая, как я уже говорил, может не иметь кода 404.
источник
408 Request Timeout
не404
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, FALSE);
Как предлагает Страгер, рассмотрите использование cURL. Вы также можете быть заинтересованы в установке CURLOPT_NOBODY с помощью curl_setopt, чтобы пропустить загрузку всей страницы (вам просто нужны заголовки).
источник
Если вы ищете самое простое решение, которое вы можете попробовать за один раз, зайдите на php5.
источник
Я нашел этот ответ здесь :
По сути, вы используете метод «file get content» для получения URL, который автоматически заполняет переменную заголовка ответа http кодом состояния.
источник
Это даст вам истину, если URL не возвращает 200 OK
источник
addendum, протестировал эти 3 метода с учетом производительности.
Результат, по крайней мере, в моей тестовой среде:
Керл побеждает
Этот тест выполняется с учетом того, что нужны только заголовки (noBody). Проверь себя:
источник
В качестве дополнительной подсказки к большому принятому ответу:
При использовании варианта предложенного решения я получал ошибки из-за настройки php 'max_execution_time'. Так что я сделал следующее:
Сначала я установил ограничение по времени на большее количество секунд, в конце я установил его обратно на значение, определенное в настройках php.
источник
источник
Вот краткое решение.
В вашем случае вы можете изменить
application/rdf+xml
то, что вы используете.источник
Эта функция возвращает код состояния URL в PHP 7:
Пример:
источник
Вы также можете использовать этот код, чтобы увидеть статус любой ссылки:
источник
это всего лишь кусок кода, надежда работает на вас
источник
Вот способ!
Этот простой скрипт просто делает запрос к URL-адресу его исходного кода. Если запрос выполнен успешно, он выдаст «URL Exists!». Если нет, он выведет «URL не существует!».
источник