it-blog.club
PHP получить код ответа удалённого сервера

PHP получить код ответа удалённого сервера

Буквально на днях, непонятно зачем, но клиент прислал нам доработку, добавить новый раздел на сайт, ну и, разумеется, новый пункт меню на этот раздел. Вот только ссылка должна меняться. Т.е. у клиента есть второй сайт на другом сервере. И если нужная страница с сайта 2 доступна, то пользователя нужно уводить туда, иначе, если удалённая страница НЕ отдаёт статус 200, переходит на новый раздел сайта 1.

Выходит у нас есть сайт 1, на котором нужно создать раздел, пункт меню и проверку, после которой будем менять ссылку в меню в зависимости от результата.

И есть некая страница на другом сайте 2.

Первая идея которая пришла в голову, сделать это через JS. Это плохая идея о которой стоит умолчать) Как минимум по той причине, что пришлось бы отправлять запрос на сайт 2, ждать ответ и зависимости от этого, либо подменять ссылку, либо использовать location.href , это точно не вариант, так как будет задержка по времени и не очень хорошо для поисковиков.

Я молчу про то, что JS может быть отключен в браузере или не отработать на мобильном устройстве.

Есть ещё пара причин по которым JS отпадает. Но давайте лучше поговорим о более правильном решении.

Я не буду спорить, что возможно такой вариант будет не идеален и не самый верный, но зато это сработало.

PHP get_headers

Для такой задачи у меня было 3 варианта решения на PHP. Я же выбрал самый просто, это использовать функцию get_headers().

Давайте сразу к примеру


$headers = get_headers('http://сайт-2/страница/');
$headers  = explode(' ',$headers [0]);
if ($headers [1] == 200) {
    $url = 'http://сайт-2/страница/';
} else {
    $url = '/новый-раздел/';
}

С помощью этой функции мы можем получить заголовки нужной нам страницы в сети и разобрать их. Функция возвращает массив, так что, если интересно можете дампнуть его и выбирать то, что нужно именно вам)

Отталкиваясь от примера выше, работаем с HTML.


<a href="<?=$url?>">Название ссылки</a>

Но так же мне нужно было решить задачу на CMS Bitrix, так что просто так проставить ссылку в меню я не мог. Так что тут есть 2 варианта:

1) Мы можем использовать данный php скрипт в шаблоне компонента с меню. А в файле .НАЗВАНИЕ_МЕНЮ.menu.php в массиве с данным пунктом можем задать опознавательный параметр. например 'TEST_LINK' => 'Y'

И в цикле вывода пунктов, в шаблоне компонента, проверять, если такой параметр есть, то href='<?=$url?>'


<a href="<?= $item['PARAMS']['TEST_LINK'] == 'Y' ? $url : $item['LINK']?>"></a>

Но я сделал вторым способом.

2) просто повесить проверку и редирект на индексной странице раздела.

/новый-раздел/index.php

В САМОМ ВЕРХУ! До вывода собственных заголовков страницы.


$headers = get_headers('http://сайт-2/страница/');
$headers  = explode(' ',$headers [0]);
if ($headers [1] != 200) {
    header('http://сайт-2/страница/');
}
//Далее код страницы

Кстати помимо get_headers вы так можете использовать и cURL и file_get_contents. Но на мой взгляд, чтобы получить ответ сервера без каких либо проблем и шаманств, достаточно get_headers.

Возможно данный пример не идеален, зато он явно показывает как в пару строк можно было решить задачу поставленную от клиента.

it-blog.club 1879
Автор: Ярослав Хмель


Если Вам понравилась статья, то можете поддержать блог переведя N сумму на кофе авторам или оплату хостинга!
В любом случае спасибо! А так же не забывайте про группу в ВК
ПОИСК ПО САЙТУ
Поддержать