本文更新于2013.07.10

v1.0 更新小记:官方于2012.12.12 日发布了 WordPress 3.5 发布,笔者当天便发布了最新版WordPress for SAE (2012.12.12 by taho)。

v1.1 更新小记:上次文章有一些小纰漏,这次补充完整了。在config.php 中添加了“设置启用多数据库”。而且更新到 WordPress 3.5.1 版,经测试,本文也适用于WordPress 3.5.1 版本。(2013.01.29 by taho)

v1.2 更新小记:完善丰富了sae_app_wizard.xml文件内容,支持开通Memcache (2013.3.18 by taho)。

v1.3 更新小记:本次更新完善了 rewrite 功能(2013.5.23 by taho)。

v1.4 更新小记:本次更新解决了在主题中修改顶部图片时不能裁剪的问题。特别要感谢朽木的分享。(2013.7.10 by taho)。

下载本文PDF文档 v1.4
直接下载修改好的安装包

一、设定SAE的初始化环境需求

注:此步为非必须的,这里是为了以后打包方便建立的,使得你的SAE博客更加规范化。如不需要,可以直接跳到第二步开始。

在根目录下(和index.php同目录)新建sae_app_wizard.xml文件,内容如下

<appwizard>
<introduction>
<name>WordPress 3.5/3.5.1 zh-CN for SAE</name>
<author>TAHO</author>
<homepage>http://www.tahoroom.com</homepage>
<description>
<![CDATA[
<p>WordPress 3.5/3.5.1 简体中文版本,修改自官方3.5.X 版本,多次测试,已完整适用于SAE。支持SVN安装主题、插件,在线编辑主题、插件功能等。</p>
        ]]>
</description>
</introduction>
<platform> 
<services> 
<!-- 初始化应用中启用的服务,根据需要启用 -->
<service name="wordpress"  params="public">Storage</service>
<!-- 例:初始化一个域名为:wordpress的Storage,域属性为“public”,更多参数配置请参考Storage的API文档 --> 
<service>Mysql</service> 
<!-- 例:初始化Mysql -->
</services>
</platform>
<code> 
<!-- 初始化页面地址:即应用安装成功后跳转的地址,可以将应用初始化脚本或数据库导入脚本写在该文件中 -->
<initScript>wp-admin/install.php</initScript>
</code>
</appwizard>

二、创建SAE的上传路径变量

在根目录下新建文件sae.php,内容如下:

<?php
/**********************************************************
**   由TAHO创建,访问http://www.tahoroom.com
**   created by TAHO.  Visit  http://www.tahoroom.com
**   Version 1.1
**   tahoroom@163.com                           2013.01.29
***********************************************************/


/**设置SAE应用里的Storage的Domain名(域名)**/
/**Set the domain name of storage belongs to your app.  **/
define('SAE_STORAGE',wordpress); //请把这里的wordpress修改为你的Storage域名
                                      //Please change "wordpress" to your own domain.



/**这里是设置文件上传的路径和文件路径的URL,不要更改**/
/**Here are the dir path & url path of the uploaded files,leave this, DO NOT Change.**/
define('SAE_DIR','saestor://'.SAE_STORAGE.'/uploads');
define('SAE_URL', 'http://' . $_SERVER['HTTP_APPNAME'] . '-'.SAE_STORAGE.'.stor.sinaapp.com/uploads');

三、配置WordPress的安装数据库连接参数

打开wp-config.php,修改数据库连接信息为:

// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress 数据库的名称 */
define('DB_NAME', SAE_MYSQL_DB);

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

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

/** MySQL 主机 */
define('DB_HOST', SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT);

/** 创建数据表时默认的文字编码 */
define('DB_CHARSET', 'utf8');

/** 数据库整理类型。如不确定请勿更改 */
define('DB_COLLATE', '');

/** 设置启用多数据库。这一项并非必须,共需要此功能的人使用,但是加了也无妨。**/
define('WP_USE_MULTIPLE_DB', true);

四、修改上传文件的函数为Storage目录

打开wp-includes/functions.php,逐步修改如下:

1.在require( ABSPATH . WPINC . ‘/option.php’ );前面加上一句:

include( ABSPATH . '/sae.php' );  //调用SAE的Storage文件域名设置  //for SAE

2.修改function wp_mkdir_p( $target ) {处:

$wrapper = null;
// strip the protocol
if( wp_is_stream( $target ) ) {
list( $wrapper, $target ) = explode( '://', $target, 2 );
}
// from php.net/mkdir user contributed notes
$target = str_replace( '//', '/', $target );
// put the wrapper back on the target
if( $wrapper !== null ) {
$target = $wrapper . '://' . $target;
}

直接替换为

//for SAE begin
// from php.net/mkdir user contributed notes
if ( substr($target, 0, 10) == 'saestor://' ) {
return true;
}
$target = str_replace( '//', '/', $target );
//for SAE end

3.在$basedir = $dir;上方添加下面两行:

// for SAE begin
$dir = SAE_DIR;
$url = SAE_URL;
//for SAE end

4.在

/**
* Send a HTTP header to limit rendering of pages to same origin iframes.

注释段之前添加:

// for SAE begin
if ( !function_exists('utf8_encode') ) {
function utf8_encode($str) {
$encoding_in = mb_detect_encoding($str);
return mb_convert_encoding($str, 'UTF-8', $encoding_in);
}
}
//for SAE end

保存退出。

五、修改文件调用和查看权限

打开wp-admin/includes/file.php并修改

// Set correct file permissions
$stat = stat( dirname( $new_file ));
$perms = $stat['mode'] &amp; 0000666;
@ chmod( $new_file, $perms );

修改为(即注释掉)

//for SAE begin
// Set correct file permissions
//$stat = stat( dirname( $new_file ));
//$perms = $stat['mode'] &amp; 0000666;
//@ chmod( $new_file, $perms );
//for SAE end

再将

// Set correct file permissions
$stat = stat( dirname( $new_file ));
$perms = $stat['mode'] & 0000666;
@ chmod( $new_file, $perms );

修改为(也即注释掉)

//for SAE begin
// Set correct file permissions
//$stat = stat( dirname( $new_file ));
//$perms = $stat['mode'] & 0000666;
//@ chmod( $new_file, $perms );
//for SAE end

你会发现上面修改的两个是相同的,但是注意,这是不同的两段。都要修改。

六、完善“固定链接”功能

SAE 新浪SAE的前端采用的是nginx,nginx是不识别.htaccess的,是使用“AppConfig”来进行重定向的。接下来具体看看要怎么修改。

在根目录下新建config.yaml文件,用记事本等编辑器打开,添加以下内容:

handle:
  - rewrite: if (!is_file() && !is_dir() && path ~ "^/(.*)") goto "index.php/$1"

备注:网上说在 rewrite 前面的短横“-”前是有两个空格的。但是自己测试下来发现有没有这两个空格都可以。

七、解决主题中设置顶部图片不能裁剪的问题

题外话:
设置顶部图片的时候我们会发现如果不裁减的话就没有问题,但是裁剪后会发现图片不能显示,且 WordPress 并不会报错。经过实验发现程序并不会报错。而且观察Storage会发现,刚刚上传的图片一经裁剪就会贝删掉,却没有生成本应该存在的裁剪后的图像。经过在SAE论坛里和网友的帮助才知道问题出在了哪里。

SAE的Storage给我们专门安置了一个地方用来放缓存,即“SAE_TMP_PATH”。于是我们的思路应该是这一的:裁剪图片后把裁剪后但还未保存的图片暂放在SAE_TMP_PATH中,然后再从SAE_TMP_PATH中提取出来保存到Storage中。做法如下:

打开 wp-includes/class-wp-image-editor-gd.php,找到下面这句:

$result = call_user_func_array( $function, $arguments );

将其选中后替换为:

//for SAE begin
//$result = call_user_func_array( $function, $arguments );
$arguments_temp = $arguments;
$arguments_temp[1] = SAE_TMP_PATH.'image_temp.dat';
$result = call_user_func_array( $function, $arguments_temp );
if ($result) {
    file_put_contents($arguments[1],file_get_contents(SAE_TMP_PATH.'image_temp.dat'));
    }
//for SAE end

同样,这里也要处理权限问题,打开wp-includes/class-wp-image-editor-gd.php,找到这一段:

// Set correct file permissions
$stat = stat( dirname( $filename ) );
$perms = $stat['mode'] & 0000666; //same permissions as parent folder, strip off the executable bits
@ chmod( $filename, $perms );

将其替换为(即注释掉)

//for SAE begin
// Set correct file permissions
//$stat = stat( dirname( $filename ) );
//$perms = $stat['mode'] & 0000666; //same permissions as parent folder, strip off the executable bits
//@ chmod( $filename, $perms );
//for SAE end

此处感谢朽木的分享。

补充说明

对于修改调用显示缩略图功能,旧的版本(WordPress 3.4.2)要修改wp-include/media.php文件以便调用缩略图,新版本(WordPress3.5/3.5.1/3.5.2)不用再修改了。

附注

如果嫌修改麻烦,或者想自己通过SVN部署博客,可以在这里下载我已经制作好的打包文件(百度网盘,最近的几个版本都有),里面还有升级包,直接覆盖到你的博客中即可以使你的wordpress运行在SAE了。里面有安装说明readme.txt

下载地址:http://pan.baidu.com/share/link?shareid=152740&uk=3171134180

 

 

 

35 条评论

    1. 在本地建好后用SVN传上去。如果插件要写入文件,那就不行了。只有修改插件了。比如我用的Latex插件,自己动手修改上传路径到Storag后才可以用。请看:http://blog.tahoroom.com/archives/2456.html


  1. 3.5.1也行,我从官网下的一个3.5.1,更新后不能上传文件,然后就直接把从你这下的安装包的里面的几个文件(sae_app_wizard.xml这几个)替换,替换完进去就行了。

  2. 上回直接升级,把除了wp-config.php外的文件都直接覆盖掉了,到现在不能传文件到storage了,对我这样的菜鸟无疑是一大打击,马上按楼主的方法试试,万分感谢啊!!!

    1. 我也试着想改,但是终究还是没弄成,不会,期待高人咯。

      1. 我不是搞php的,你可以参考下这个http://wp4sae.org/2011/08/wordpress-3-2-1-for-sae-beta/

  3. 你好,我现在使用的是wp4sae 3.4.1,能不能直接升级至3,5呢

  4. sae能实现在线安装插件和在线安装主题的功能吗

    1. 不能再线安装,必须使用SVN进行提交。你可以看看SAE的开发文档,里面有说明。 🙂

  5. 请教一个问题,能不能以插件的形式制作出来,这么改来改去的很是麻烦的?

    1. 呃,我不会制作插件,也不知道能不能可以用插件实现。只会改咯。不过如果需要的话,你可以直接下载我打包好的文件包直接使用,或者把那几个文件复制出来覆盖到你的博客里就行啦。

  6. 请问你上面的代码是通过怎么样的编辑方式发布出来的???

    1. 简单,使用插件完成。这篇文章使用的插件是codecolorer,我也推荐这个。
      还有一个插件也不错,但是调用比较慢,名字是syntaxhighlighter,不是很推荐,不过功能比前一个多一点点。你可以做个选择,祝顺利!

      1. 你好!我安装了wordpress最新的3.5.1的版本,但是按照3.5.0的配置安装不好。能不能给个指点啊???我的QQ:489691911 希望能够加你为好友


  7. 严格按照以上步骤来,但是不行啊。。打开完全空白。

    wp-config文件能不能发一份给我?简单改一下那几个参数好像不行。

    tanteng@qq.com

    急求,谢谢!!

    1. 好了,应该加上一句!!

      进行升级操作,要首先把主题设为默认主题,我博客的主题是自己传上去的,所以升级之后,一片空白。 :mrgreen:

      1. 多谢!这个我真没试过。应该说这个文章适合全新安装wordpress吧。不过我的是直接升级过来的,用的这个主题没有换过,没发现问题,说明依然升级成功了。具体到底是不是默认主题的原因就真不清楚了,现在也没功夫再试了,你有兴趣的话要不然给咱在测试测试吧。

    2. 看到你最新的留言了,看起来是成功了,所以就不发了,祝好!

  8. 一、二是必要步骤吗?如果采用SVN手动上传代码包的话~

    1. 如果自己采用SVN上传,第一步不是必要的,第二步是必要的。因为要创建SAE的上传路径变量。如果不做第二步,那么在后台新建文章上传媒体的时候将失败。因为SAE不允许把附件上传到网站目录下,必须上传到Storage里才行。你可以试一试看看。

          1. 您是数学老师?哈哈我读过一个《数据结构》的书,那个作者之前也是数学老师。唉我好羡慕计算机干得好,数学又好的人,更何况还是老师呢~ 😉

          2. 不是,学物理的,以前做过民办院校老师,现在在读物理博士,要用到数学。

  9. 在3.4.2那篇中有 define(‘WP_USE_MULTIPLE_DB’, true); 3.5版不用吗?

    1. 我没有修改,不过现在已经可以使用了,不是必须修改的。这个是使用多数据库的时候才需要设置这一项。当然,加上这一项wordpress也能正常工作,而且对多数据库来说会更适用。祝好!

回复 小谈博客 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注