在本地测试环境调试 WordPress 不但速度快,也不用担心装了不安全的插件或者主题黑了自己的服务器。唯一的问题就是整个网站做好了,内容也加了,如何能移植到在线服务器,并且保证功能不出错,图片等地址正确呢?今天就来解决将 WordPress 从本地测试环境向服务器移植的问题。

Note:本教程仅适用于 Linux 主机 (在线服务器的操作系统)

准备工作

你应该了解以下工具:

  • FTP 或 Cpanel File Manager 工具,用来上传文件,会用 SFTP 或者 SSH 更好;
  • 知道如何创建数据库,如何用 phpmyadmin 或者你的服务器提供的数据库操作界面上传数据库;
  • 会用代码编辑器进行查找/替换操作,推荐 Notepad++,这个轻量级的编辑器能快速打开体积大的文本,用记事本很可能让电脑罢工。

开始移植

1. 将你的网站文件上传到在线服务器,我们假设域名是 www.yourdomain.com 。更改 wp-config.php,将数据库信息更新

/** WordPress 数据库的名称 */
define('DB_NAME', 'sola_wordpress');

/** MySQL 数据库用户名 */
define('DB_USER', 'username');

/** MySQL 数据库密码 */
define('DB_PASSWORD', 'password');

/** MySQL 主机 */
define('DB_HOST', 'localhost');

2. 访问管理员界面,导出数据库之前需要检查一些内容,后面会解释原因。

小工具:查看小工具的设置选项中是否有涉及到域名的设置,如果有,将域名更新为你的在线地址

主题选项:检查主题选项是否有涉及到域名的设置,如果有,将域名更新为你的在线地址

插件选项:同上

3. 导出数据库, 如果你本地测试环境是 wampserver,访问 http://localhost/phpmyadmin, 找到要导出的数据库,选择保存为文件导出。

导出数据库图解

4. 用 Notepad++打开刚刚保存的 sql 文件,查找你的本地测试地址例如 localhost/wordpress,全部替换成在线地址 www.yourdomain.com

用Notepad++替换地址

5. 将改好的 sql 文件上传到服务器,这时候你就需要访问 phpmyadmin 了,进去以后找到 import(导入) 选项,直接选择文件上传导入即可。

import-database

导入失败可能的原因:

1) 数据库文件超出服务器允许的最大体积,上图红色方框中显示的数值就是允许上传的最大文件尺寸,614kKiB=614MB,这是 Sola 本地的配置,服务器一般都比较低,有的可能只有 2M,如果是这样,需要修改 post_max_size 和 upload_max_filesize 的值,通常可以通过 php.ini 来修改,如果你找不到这个文件,最好的方法就是联系服务器提供商,每个服务器的配置都不同,修改方法也不同。

2) 数据库存在错误字段,如果 mysql 文件本身有错误 (向 mysql 数据库直接存储 html 代码常常引起数据库字段出错),会导致上传被中止,这时候应该先在本地修复数据库,再重复步骤 3 和 4 。

修复数据库

6. 现在文件和数据库都放好了,直接访问首页应该可以显示网站,如果你开启过固定链接,那么访问其它页面会出现 404 错误,因为.htaccess 还保持着测试地址,访问后台-> 设置-> 固定链接,什么都不用改直接点击保存更改,wordpress 就会自动更新.htaccess,这时候就没有 404 错误了。

7. 如果你没认真做好步骤 2,可能出现的情况是你的 widget 小工具都消失了,谁叫你偷懒了。去外观-> 小工具,往下看找到未使用的小工具,就能找到你丢失的小工具了。把他们重新摆回去,更新地址,移植结束。

小工具消失的原因

某些小工具带有配置选项,这些选项存储在 wp_options 表中,WordPress 用一种序列化的方式存储字符串,不但记录字符串,还要记录字符串的长度,当字符串的实际长度与记录的长度不相等时,WordPress 就会读取失败,所以你的小工具 WordPress 不认识了。

序列化字符串长什么样?

s:5:"title";

这就是一个序列化的字符串,s 表示类型是 string(字符串),5 表示字符串的长度是 5 个字符,title 就是这个字符串的内容了,确实是 5 个字母。

那么存储域名会发生什么情况?

s:26:"http://localhost/wordpress"

全文替换域名以后,就变成了

s:26:"http://www.yourdomain.com"

实际长度是 25,但数据库里还写着 26,错误就发生了。

同样的概念可以应用到所有用 wp_options 存储数据的模块,例如主题选项,例如插件选项。

聪明的你一定想到了避免的方法了:保证测试地址和在线地址长度一样就没问题了。例如 Sola 的域名和测试地址分别是

www.solagirl.net
localhost/solabk

长度相同,这样我可以随意移动,只需要全文替换地址,什么都不会丢,是不是很方便。

移植后可能出现的问题

1. 小工具消失是最常见的问题,上面已经解释了

2. 无法上传图片

检查 uploads 文件夹权限,如果你的服务器没安装 suPHP,那你可能要把文件夹权限改成 777 了。 777 通常是不安全的,解决的方法就是用脚本重新创建 uploads 文件夹,然后把文件都移动过去。这个问题的根源就是文件夹的拥有者是用户,而程序的拥有者是 apache,直接导致 apache 无法写入,用程序创建的文件夹拥有者是 apache,不存在这个问题。

3. 出现 404 错误

一种可能是.htaccess 没更新,还有一种可能是主题硬编码了一些东西,测试的时候最好关闭 wampserver 或者其它测试环境,看看是不是还有的脚本正在努力的访问 localhost 。