PHP //如果标准包含服务器关闭,则包含来自其他服务器的文件

时间:2016-08-09 09:35:33

标签: php function server include forward

我有很多网站,我使用了大量的网站。我包含的那些文件位于外部包含服务器上。我的问题是:我想让这些文件变得多余,所以如果包含服务器出现故障,它们将从我的第二个包含服务器中获取。 在每个网站上手动执行此操作将花费太长时间,因此我想知道是否有办法在服务器端执行此操作(因此,如果服务器已关闭,则将其转发到其他服务器)。

以下是我通常包含文件的示例:

data

感谢阅读!

1 个答案:

答案 0 :(得分:1)

简答:

您很可能想要重构代码。

更长的回答:

如果您真的想在服务器级别执行此操作,那么您正在考虑实施"故障转移。"您可以阅读wikipedia文章或此howto guide以获得更深入的解释。简单地解释一下,你基本上需要3个Web服务器:

  1. 您的包含服务器
  2. 备份服务器
  3. 监控/主服务器
  4. 听起来你已经拥有了这三个,但是第三个子弹理想情况下是通过第三方提供的服务来提供额外的冗余来处理DNS(DNS传输正在传播时可能仍会出现停机) 。当然,这会引入几个可能让你最终重构的陷阱。例如,您可能遇到load balancing次挑战;您的应用程序现在需要考虑服务器之间的共享资源,例如写入磁盘,会话或数据库的任何内容。像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文件并通过regex或使用{{3}替换代码来自动执行该过程。 }。如何实现此选项完全取决于您的实际代码以及每个站点之间的任何差异。

    这里唯一需要注意的是它可能会使服务器的命中率翻倍,所以最好以这样一种方式使用它,以便你设置一个环境或全局变量,然后让它定期执行通过cron。

    我希望有所帮助。