функция — PHP // Включить файл с другого сервера, если сервер стандартного включения не работает

У меня есть много сайтов, где я использую много включений. Эти файлы, которые я включаю, находятся на внешнем include-сервере. Моя проблема: я хочу сделать эти файлы избыточными, поэтому, если сервер включения отключается, они берутся с моего второго сервера включения.
Выполнение этого вручную на каждом веб-сайте займет слишком много времени, поэтому мне интересно, есть ли способ сделать это, например, на стороне сервера (например, если сервер не работает, он перенаправляется на другой сервер).

Вот пример того, как я обычно включаю свои файлы:

<?php

$url = 'http://myincludeserver.com/folder/fileiwanttoinclude.php';

function get_data($url)
{
$ch = curl_init($url);
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $_REQUEST);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);

return $data;
}

$returned_content = get_data($url);

if(!empty($returned_content))
{
echo $returned_content;
}
else
{
include('includes/local_error_message.php');
};

?>

Спасибо за прочтение!

1

Решение

Короткий ответ:

Вы, скорее всего, захотите реорганизовать свой код.

Более длинный ответ:

Если вы действительно хотите сделать это на уровне сервера, тогда вы рассматриваете реализацию «отработки отказа». Вы можете прочитать википедия статья или это путеводитель для более глубокого объяснения. Чтобы объяснить это просто, вам понадобятся 3 веб-сервера:

  1. Ваш включаемый сервер
  2. Резервный сервер
  3. Мониторинг / основной сервер

Похоже, у вас уже есть все три, но в третьем пункте в идеале должен быть сервис, предоставляемый через стороннего производителя для дополнительной избыточности для обработки DNS (все еще могут быть простои во время распространения обновлений DNS). Конечно, это вводит несколько подводные камни это может привести к рефакторингу в любом случае. Например, вы можете столкнуться с балансировки нагрузки проблемы; Ваше приложение теперь должно учитывать общие ресурсы между серверами, такие как что-либо записанное на диск, сеансы или базы данных. Инструменты как HAProxy может помочь.

Более простой вариант, особенно если домены, связанные с включениями, скрыты от пользователя, заключается в рефакторинге и простой замене пули три сценарием, аналогичным вашему. get_data функция:

function ping($domain) {
$ch = curl_init($domain);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);
return $response ? true : false;
}

$server1 = 'http://example.com';
$server2 = 'http://google.com';

if (ping($server1)) {
return $server1;
} else {
return $server2;
}
exit;

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

Единственное предостережение здесь заключается в том, что он потенциально может удвоить число обращений к вашему серверу, поэтому, вероятно, было бы лучше использовать его таким образом, чтобы вы устанавливали среду или глобальную переменную, а затем периодически выполняли ее через cron.

Надеюсь, это поможет.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]