Задать вопрос
28m28misha10
@28m28misha10
Люблю кодить

Как сделать проверку ссылки на битость перед переходом?

Как сделать так чтобы при нажатии на ссылку передавался get запрос файлу 1.php там ссылка проверялось на битость если ссылка битая то на экран выводилась сообщение типа таково "3" а если всё в порядке то выполнялся редирект на url ссылки.
  • Вопрос задан
  • 290 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
zkrvndm
@zkrvndm
Архитектор решений
Не существует способов проверить работоспособность ссылки, без обращения к ней. Соответственно, чтобы убедится в том, что переданная ссылка не битая, нужно попытаться ее открыть, допустим, через тот же curl.

Для этого создайте в корне своего сайта файл 1.php и поместите в него код:
Нажмите здесь, чтобы развернуть код
<?php

header('Access-Control-Allow-Origin: *'); // Разрешаем запросы с любых доменов
header('Content-Type: text/html; charset=utf-8'); // Указываем тип документа и кодировку

// Включаем отображение ошибок:

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

// Если мы получили GET-запрос:

if ($_SERVER['REQUEST_METHOD'] == 'GET') {
	
	// Если переменная со ссылкой существует и не пуста:
	
	if (isset($_GET['url']) and !empty($_GET['url'])) {
		
		check(); // Запускаем функцию для проверки действительности ссылки
		
	}
	
	// Если переменная со ссылкой не существует:
	
	else {
		
		echo 'Отсутсвует переменная url со ссылкой для проверки!';
		
	}
	
}

// Если мы получили НЕ GET-запрос, а допустим POST-запрос или любой другой:

else {
	
	echo 'Метод не поддерживается!';
	
}

// Функция для проверки переданной ссылки:

function check() {

	// Определяем параметры запроса:
	
	$url = $_GET['url']; // Получаем адрес запроса
	
	// Создаём новый сеанс:
	$curl = curl_init();
	
	// Указываем адрес целевой страницы:
	curl_setopt($curl, CURLOPT_URL, $url);
	
	// Устанавливаем таймаут для запроса в 10 секунд:
	
	curl_setopt($curl, CURLOPT_TIMEOUT, 10);
	
	// Устанавливаем User-Agent чтобы имитировать браузер:
	$headers = [ 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36' ];
	curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
	
	// Разрешаем переадресацию:
	curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
	
	// Запрещаем прямой вывод результата запроса:
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	
	// Делаем сам запрос:
	$result = curl_exec($curl);
	
	// Завершаем сеанс:
	curl_close($curl);
	
	// Смотрим, есть ли ответ:
	
	if ($result == '') {
	    echo 'Передана не рабочая ссылка!'; // Выводим ошибку, если ответ пустой
	}
	
	else {
	    header('Location: ' . $url); // Переадресуем, если ответ не пустой
	}

}

Проверить работу скрипта можно сделав GET-запрос на файл 1.php:
https://site.ru/1.php?url=https://yandex.ru
Где https://site.ru ваш сайт, а вместо https://yandex.ru подставляйте ссылку, которую надо проверить.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы