WordPress 版本更新非常頻繁。這個月 WordPress 3.2 的 Beta 1 版本已經發布,如果不出意外,下個月我們會迎來 3.2 正式版。如果你可以從後臺管理面板升級,更新到 WordPress 新版本不是難事:你只需要登入、點選若干個按鈕、等上幾分鐘然後就升級成功了。不過 WordPress 自動升級帶來的不只是方便,你也有可能遇到升級失敗的問題。如果自動升級沒有成功,你沒法像在 WORD 裡一樣撤銷之前的操作,下面我們就來說說怎麼在自動升級失敗後恢復網站並確保成功升級。
如果自動升級失敗
在後臺點選自動升級 (假設從 WordPress 3.1.0 升級到 3.1.1) 後,升級介面會出現如下資訊:
從 http://WordPress.org/WordPress-3.1.1.zip…下載更新
解壓更新
驗證解壓檔案
安裝最新版本
一直到這裡都很正常,但是之後有可能會出現兩種情況,一種是升級成功,另一種就是今天要討論到的升級失敗:

「Installation Failed(安裝失敗)」 前的狀態資訊解釋了 WordPress 認為的升級失敗原因所在,有時候系統可能不顯示任何狀態資訊。無論在哪種情況下,這時使用者已經失去對網站的控制權了。自動升級失敗後,載入任何網站頁面——後臺、首頁、登入頁等——都只能看到類似這樣的 WordPress 維護頁面:

在無法登入網站管理介面的情況下,要解決問題真是件讓人沮喪的麻煩事。幸好這時候不登入後臺也可以把網站找回來。登入 FTP,進入根目錄,刪除.maintenance 檔案。檔名的開始部分是一個點,如果你沒有用 FTP 找到這個檔案,可以試試登入伺服器的控制板,然後透過檔案管理器找到這個檔案並刪除。下面是.maintenance 檔案在根安裝目錄下的顯示截圖:

.maintenance 檔案包含一個 wp_maintenance 函式使用的變數,類似於:
<?php $upgrading = 1302115706; ?>
如果你被自己的網站拒之門外了,刪除.maintenance 檔案可以讓你回到管理後臺以及網站的其他頁面。當你回到後臺後,WordPress 會提醒你最近更新失敗並顯示如下資訊:

這時候你有 (至少) 兩個選擇:繼續嘗試自動升級,或者下載最新版本並手動上傳。即使你這一次選擇了手動升級,最好也瞭解一下怎麼解決自動升級失敗問題。
檢查檔案許可權
正確的檔案許可權是成功完成任何自動程式的關鍵所在。 WordPress 手冊在介紹後臺升級子選單時,在其中的疑難解決部分建議到:確保你的 WordPress 目錄由 Apache 伺服器的使用者名稱所有。
除此之外,你可能還需要更改/upgrade/目錄許可權。從下面的截圖中可以看到,WordPress 用/upgrade/目錄儲存升級過程中的臨時檔案。

對需要新建的臨時 WordPress 檔案來說,/upgrade/目錄應是伺服器可寫入的。為確定這是否問題所在,可以試著把目錄許可權改為 777(或 CHMOD 等值),然後重試自動升級。如果升級成功,問題就解決了,但從此你需要一直使用可能的最高許可權。這需要你去研究、嘗試或者諮詢主機提供商,但瞭解最高許可權之後,你就可以安心地自動升級了。
關閉安全模式
停用安全模式有可能讓你的自動升級重新奏效。根據 PHP 手冊,PHP 5.3.0 開始不再採用安全模式。
我們可以透過多種方式關閉安全模式。如果你不能透過伺服器的控制檯關閉安全模式,可以在 php.ini 檔案里加上下面的程式碼實現安全模式停用:
或者你也可以在 Apache 配置檔案里加上下面的程式碼:
| <Directory /var/www/public> php_admin_flag safe_mode off </Directory> |
只要在 httpd.conf 檔案新增上面的內容然後重啟 Apache 即可。
在 wp-config.php 檔案內定義 FTP 變數
在你的 wp-config.php 檔案裡定義必需變數,是讓自動升級重新工作的又一個方法。這種方法有很多不同形式,所以你需要根據以往的經驗根據自己的具體情況進行定義。下面是一個示例,僅供參考:
| define('FS_CHMOD_FILE', 0755); define('FS_CHMOD_DIR', 0755); define('FS_METHOD', 'ftpext'); define('FTP_BASE', '/httpdocs/'); define('FTP_CONTENT_DIR', '/httpdocs/wp-content/'); define('FTP_PLUGIN_DIR ', '/httpdocs/wp-content/plugins/'); define('FTP_USER', 'username'); define('FTP_PASS', 'password'); define('FTP_HOST', '123.456.789'); define('FTP_SSL', false); |
把上面的程式碼貼入 wp-config.php 檔案中」That』s all, stop editing! Happy blogging.」 的上方。別忘了把程式碼裡的使用者名稱、密碼等變數換成自己的資訊。
可能你覺得上面這些操作有些麻煩,不過 WordPress 自動升級為我們節省了如此多的時間,完全值得我們多花一點時間來解決自動升級遇到的問題,成功實現事半功倍的效果。