在配置文件我已经存储地址到服务器我的网站依靠。Zend框架2 - 写入配置文件
如果此服务器发生故障,我想使用备份服务器。 (永久性的,不仅仅是这个请求)。所以如果server1失败,我想使用server2。
我发现在我的配置文件中更改地址的最佳方法。但正如我所知Zend Framework 2不能写入配置文件。
任何想法?
在配置文件我已经存储地址到服务器我的网站依靠。Zend框架2 - 写入配置文件
如果此服务器发生故障,我想使用备份服务器。 (永久性的,不仅仅是这个请求)。所以如果server1失败,我想使用server2。
我发现在我的配置文件中更改地址的最佳方法。但正如我所知Zend Framework 2不能写入配置文件。
任何想法?
但据我所知Zend Framework 2无法写入配置文件。
是的,它可以。它有整个Zend\Config\Writer
组件。如果使用的是默认的PHP阵列的配置文件,您可以更改配置文件是这样的:
$path = 'config/autoload/local.php';
$config = include $path;
$config['key'] = 'new value';
$writer = new \Zend\Config\Writer\PhpArray();
$writer->toFile($path, $config);
不要忘记删除配置的缓存,如果你正在使用一个。
但我认为有更好的方法来做到这一点 - 而不是改变配置文件,你可以为每个服务器准备配置模板,并轻松地交换它们。因此,在config/autoload
目录中,您将拥有包含您需要的每个服务器的地址配置的文件adresses.local.server1.php.dist
和adresses.local.php.dist
。然后,如果你需要使用配置server1的,只是把它复制:
$ cp adresses.local.server1.php.dist adresses.local.php
配置文件应该只用于静态变量。
要实现这一点,最好将服务器返回给服务器。例如一个ServerAddressProvider
。
$service = $serviceManager->get('Application\Service\ServerAddressProvider');
$address = $service->getServerAddress();
在您的服务中,您可以添加自定义逻辑,以返回正确的服务器地址。
在服务器内部,您可以在返回地址之前ping服务器,以检查它是否在线,并在服务器暂时不可用时返回替代(备份)服务器。
感谢您的解决方案。你的意思是在每次请求之前ping服务器吗?那会给我额外的延迟。如果服务器出现故障,我将不得不等待ping超时......不是吗? –
你还知道服务器是否在线/离线?你目前的解决方案如何做到这一点。关于额外的延迟,这就是为什么我建议在[我的评论]中实现排队服务的原因(http://stackoverflow.com/questions/34617436/zend-framework-2-write-to-config-file/34651912#comment57049040_34617436) 。您的客户不应该等待您的服务器处理存储您的多媒体内容。 – Wilt
“服务器故障”是什么意思。如果失败,您是否仍然能够读取服务器上配置的变量?将重定向逻辑存储在“失败”时需要重定向的服务器的应用程序配置中似乎是不合逻辑的...... – Wilt
这2个服务器来自外部提供商。我用它们来存储多媒体内容。有时候,其中一台服务器出现故障,或者请求开始超时。这些服务器的管理员需要一段时间才能修复它....我不希望我的用户等待(每次请求)server1超时,然后使用server2 ...我想存储到一些永久存储,该服务器1失败,所以我的网站在修复之前使用服务器2。 –
在这种情况下,您应该也可以考虑使用排队服务,以便用户不必等待。当使用排队服务时,服务器将在向客户端返回响应之后处理作业。 – Wilt