29.03.2017, 14:32
|
Профессор
|
|
Регистрация: 07.07.2016
Сообщений: 281
|
|
Проверка url не только на правильность, но и на работоспособность (и существование)
Здравствуйте форумчане! Подскажите, пожалуйста, как сделать проверку корректности введения URL в поле input, а также проверить его реальность (существование).
|
|
29.03.2017, 14:46
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Проверять статус ответа по ссылке.
|
|
29.03.2017, 15:19
|
Профессор
|
|
Регистрация: 07.07.2016
Сообщений: 281
|
|
$url = 'ссылка';
// Инициализируем curl
$ch = curl_init();
// Задаем URL
curl_setopt($ch, CURLOPT_URL, $url);
// Формируем заголовок
curl_setopt($ch, CURLOPT_HEADER, 1);
// Говорим, что возвращать сам контент нам не нужно
curl_setopt($ch, CURLOPT_NOBODY, 1);
// Вернуть данные передачи
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Записать данные в переменную
$res = curl_exec($ch);
curl_close($ch);
echo '<pre>'; print_r($res); echo '</pre>';
if (strstr($res, 'HTTP/1.1 200 OK')) echo 'Рабочая';
else echo 'Не рабочая';
Так?
|
|
29.03.2017, 15:37
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Ну в общем-то это можно и без cURL узнать:
echo get_headers('http://javascript.ru/')[0];
Но статус не обязательно будет равен 200, это может быть и иной, но Ок.
|
|
29.03.2017, 15:53
|
Профессор
|
|
Регистрация: 07.07.2016
Сообщений: 281
|
|
А можно сделать так, если страница "редиректит", т.е. переадресует, то признавать её не валидной, т.е. не рабочей? И еще как сделать, чтобы там где ссылка, она вставлялась через input, и, таким образом, проверялась на работоспособность.
|
|
29.03.2017, 15:59
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
В сети ищите значение всех статусов, если это неизвестно. А далее уж принимайте решение сами, какое вам нужно. Можно все что угодно.
preg_match('/\b\d{3}/', get_headers('http://javascript.ru/')[0], $match);
if($match[0] != 200) {
//необходимые действия
}
|
|
29.03.2017, 16:32
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Sonya,
если много условий по статусам, то можно ведь не проверять каждый, а описать действия по статусам:
$conditions = [
302 => function() {
//
},
404 => function() {
//
},
....
];
if(array_key_exists($match[0], $conditions)) $conditions($match[0]);
else ///
Либо тот же switch.
|
|
29.03.2017, 16:50
|
Профессор
|
|
Регистрация: 07.07.2016
Сообщений: 281
|
|
А полностью код, можно показать, а то запуталась?
|
|
|
|