在配置文件我已經存儲地址到服務器我的網站依靠。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