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 自动升级为我们节省了如此多的时间,完全值得我们多花一点时间来解决自动升级遇到的问题,成功实现事半功倍的效果。