2010-09-03 101 views
4

現在不需要這樣做,但考慮未來...執行網站離線嗎?

什麼是你的方法通過自定義編碼的cms使網站「脫機」一點點?含義賦予管理員登錄到管理面板的能力,在框中鍵入消息並提交表單。然後,該消息將顯示而不是任何其他頁面給任何用戶,除非用戶是管理員。

我之前完成了這個工作,如果存在xml文件,則使用xml文件,然後從xml文件中加載內容,並使用只允許管理員登錄的登錄框放置構建背景。當管理員鍵入消息放入它將文本存儲到xml中的框中。當他們將網站「重新啓動」時,它會簡單地刪除xml文件。

唯一的問題是,一旦網站增長,它會花費更多的點擊和檢查每個網頁加載速度變慢的文件存在。任何人都有更好的解決方案嗎?

謝謝。

回答

6

假設這是在Apache上。

如果可能的話,我建議使用.htaccess文件,將所有請求重新路由到「站點已關閉」消息。

喜歡的東西:

RewriteRule (.*) /downmessage.php [L] 

(注意:任何圖像資源將被重定向,太)

相較於PHP端標誌檢查和離線消息,這是速度更快,再加上它有巨大的優勢,像上傳的圖像和樣式表的資源不再可及 - 通過緩存的文件,URL,谷歌圖像點擊... ...

在基於PHP的「離線」機制,其中這些資源不被阻止,th事實上,如果有人知道網址很難向用戶解釋(「但我們把網站關閉了,是不是我們?」),並且由於法律問題導致網站被拒絕,某些資源仍可到達一個已發佈的圖像(可能發生在每個人身上!),圖像仍然可以在沒有網站所有者知道的情況下到達。

這樣做的缺點是它需要服務器上的mod_rewrite模塊,並且PHP需要對.htaccess文件具有寫訪問權限:兩者並非總是如此。

但是,雖然此方法有其優點,但在實施任何更改之前,您的問題的基本前提值得一看。你說對移除XML文件的檢查花費了太多時間。我不認爲是這樣。file_exists()檢查內部緩存,並且應該而不是即使對於很多請求也會導致任何明顯的減速。平均Drupal或WordPress頁面會在每個請求中加載數十個包含文件。單個文件顯示相比較。

+0

但是如果我想讓管理員登錄呢?這實際上是我第一個想法,但我希望管理員或「員工」有能力看到該網站。 – 2010-09-03 13:43:26

+0

此外:可能您不想擁有純文本維護頁面,但保留頁面設計。所以你應該允許訪問圖像。 – NikiC 2010-09-03 13:45:05

+0

@Capt對於基於'.htaccess'的解決方案來說很難做到,除非您可以爲管理員應用IP過濾器或讓他們設置特定的用戶代理字符串(警告,這將是不安全的!) – 2010-09-03 13:47:45

1

只是一個想法:

你可以在你的數據庫處理程序設置標誌(例如maintenance = TRUE),那麼你可以控制哪些數據庫查詢允許或不允許。大多數情況下,您只希望在維護站點時讀取數據庫。

注意:只有當您的所有數據庫請求都受到控制時,這纔會起作用。

+0

我不想停止查詢的,雖然...這主要是爲了更新設計,只需要很小的變化,或其他各種原因。 – 2010-09-03 13:45:04

+0

對不起,我想你會想要在更新期間運行網站,並且只想要'鎖定'db。 – fabrik 2010-09-03 13:48:09

0

也許你可能會設置一個APC值。由於這些內容存儲在內存中,它會閃電般快速。但不要忘記,APC值不會在服務器重啓時持續存在。因此,如果您在很長一段時間內需要「維護模式」,則應該將值存儲在數據庫中。

1

最簡單的方法是檢查(本地)文件的存在(可選地輸出其內容,如/ etc/nologin)。如果Ops想要關閉該站點,他們可以在每個Web服務器上獨立創建它。

在嘗試訪問數據庫之前,在每個頁面上執行的一些通用代碼中執行此操作。

這樣做的原因是Ops可能希望在維護期間使數據庫脫機,因此無法將其存儲在數據庫中。

檢查本地文件的存在是一個非常低的開銷操作,它不會非常影響正常情況下的性能。