Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Проверка url не только на правильность, но и на работоспособность (и существование) (https://javascript.ru/forum/server/68160-proverka-url-ne-tolko-na-pravilnost-no-i-na-rabotosposobnost-i-sushhestvovanie.html)

Sonya 29.03.2017 14:32

Проверка url не только на правильность, но и на работоспособность (и существование)
 
Здравствуйте форумчане! Подскажите, пожалуйста, как сделать проверку корректности введения URL в поле input, а также проверить его реальность (существование).

laimas 29.03.2017 14:46

Проверять статус ответа по ссылке.

Sonya 29.03.2017 15:19

$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 'Не рабочая';

Так?

laimas 29.03.2017 15:37

Ну в общем-то это можно и без cURL узнать:

echo get_headers('http://javascript.ru/')[0];


Но статус не обязательно будет равен 200, это может быть и иной, но Ок.

Sonya 29.03.2017 15:53

А можно сделать так, если страница "редиректит", т.е. переадресует, то признавать её не валидной, т.е. не рабочей? И еще как сделать, чтобы там где ссылка, она вставлялась через input, и, таким образом, проверялась на работоспособность.

laimas 29.03.2017 15:59

В сети ищите значение всех статусов, если это неизвестно. А далее уж принимайте решение сами, какое вам нужно. Можно все что угодно.

preg_match('/\b\d{3}/', get_headers('http://javascript.ru/')[0], $match);
if($match[0] != 200) {
    //необходимые действия   
}

laimas 29.03.2017 16:32

Sonya,
если много условий по статусам, то можно ведь не проверять каждый, а описать действия по статусам:

$conditions = [
    302 => function() {
        //
    },
    404 => function() {
        //
    },
    ....
];

if(array_key_exists($match[0], $conditions)) $conditions($match[0]);
else ///


Либо тот же switch.

Sonya 29.03.2017 16:50

А полностью код, можно показать, а то запуталась?


Часовой пояс GMT +3, время: 23:37.