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 自動升級為我們節省了如此多的時間,完全值得我們多花一點時間來解決自動升級遇到的問題,成功實現事半功倍的效果。