PHP//如果标准包含服务器关闭,则包含来自另一个服务器的文件
我有很多网站,在那里我使用了很多的包含。我包含的那些文件位于外部包含服务器上。我的问题是:我想使这些文件成为冗余文件,因此如果include服务器宕机,它们将从我的第二个include服务器获取。 在每个网站上手动执行此操作将花费太长的时间,因此我想知道是否有一种方法可以在服务器端执行此操作(因此,如果服务器停机,则将其转发到其他服务器) 以下是我通常如何包含文件的示例:PHP//如果标准包含服务器关闭,则包含来自另一个服务器的文件,php,function,server,include,forward,Php,Function,Server,Include,Forward,我有很多网站,在那里我使用了很多的包含。我包含的那些文件位于外部包含服务器上。我的问题是:我想使这些文件成为冗余文件,因此如果include服务器宕机,它们将从我的第二个include服务器获取。 在每个网站上手动执行此操作将花费太长的时间,因此我想知道是否有一种方法可以在服务器端执行此操作(因此,如果服务器停机,则将其转发到其他服务器) 以下是我通常如何包含文件的示例: <?php $url = 'http://myincludeserver.com/folder/fileiw
<?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');
};
?>
谢谢你的阅读 简短回答: 您很可能想要重构代码 更长的回答: 如果您真的想在服务器级别实现这一点,那么您正在考虑实现“故障切换”。您可以阅读本文或本文以获得更深入的解释。简单地说,您基本上需要3台web服务器:
get_data
函数的脚本替换bullet three:
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定期执行它
我希望这会有所帮助。只需检查包含是否成功,如果不包含另一个。使用Jquery ajax并使用
$.ajax({/..success:function(data,textStatus,xhr){console.log(xhr.status);},complete:function(xhr,textStatus){console.log(xhr.status);});代码>这样您就知道服务器是否出现故障了。谢谢您的回答,但这是最简单的部分!如果我这样做,我必须在我使用的每一个include上都这样做(比如1000+)。我正在寻找一种方法来做到这一点,这样我就不必编辑每一个文件上的每一个website@jogoe你是说get_data
函数已经被复制了1000多次吗?你不是真的要通过不安全的http连接传输要包含/执行的代码,是吗?老实说,这是一种从不同地点使用代码的可怕方式,通过网络加载文件的开销非常高,而且也很危险。使用NFS托管公共文件,看在上帝的份上,不要为此使用internet!谢谢你调查我的问题,并提出了这些好主意!我要调查一下,试试看!