本文更新于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)。
一、设定SAE的初始化环境需求
注:此步为非必须的,这里是为了以后打包方便建立的,使得你的SAE博客更加规范化。如不需要,可以直接跳到第二步开始。
在根目录下(和index.php同目录)新建sae_app_wizard.xml文件,内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<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,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?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,修改数据库连接信息为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// ** 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’ );前面加上一句:
1 |
include( ABSPATH . '/sae.php' ); //调用SAE的Storage文件域名设置 //for SAE |
2.修改function wp_mkdir_p( $target ) {处:
把
1 2 3 4 5 6 7 8 9 10 11 |
$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; } |
直接替换为
1 2 3 4 5 6 7 |
//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;上方添加下面两行:
1 2 3 4 |
// for SAE begin $dir = SAE_DIR; $url = SAE_URL; //for SAE end |
4.在
1 2 |
/** * Send a HTTP header to limit rendering of pages to same origin iframes. |
注释段之前添加:
1 2 3 4 5 6 7 8 |
// 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并修改
将
1 2 3 4 |
// Set correct file permissions $stat = stat( dirname( $new_file )); $perms = $stat['mode'] & 0000666; @ chmod( $new_file, $perms ); |
修改为(即注释掉)
1 2 3 4 5 6 |
//for SAE begin // Set correct file permissions //$stat = stat( dirname( $new_file )); //$perms = $stat['mode'] & 0000666; //@ chmod( $new_file, $perms ); //for SAE end |
再将
1 2 3 4 |
// Set correct file permissions $stat = stat( dirname( $new_file )); $perms = $stat['mode'] & 0000666; @ chmod( $new_file, $perms ); |
修改为(也即注释掉)
1 2 3 4 5 6 |
//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文件,用记事本等编辑器打开,添加以下内容:
1 2 |
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,找到下面这句:
1 |
$result = call_user_func_array( $function, $arguments ); |
将其选中后替换为:
1 2 3 4 5 6 7 8 9 |
//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,找到这一段:
1 2 3 4 |
// 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 ); |
将其替换为(即注释掉)
1 2 3 4 5 6 |
//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
修改成功,请问插件需要建目录的怎么办呢、
在本地建好后用SVN传上去。如果插件要写入文件,那就不行了。只有修改插件了。比如我用的Latex插件,自己动手修改上传路径到Storag后才可以用。请看:http://blog.tahoroom.com/archives/2456.html
在本地建好后用SVN传上去。如果插件要写入文件,那就不行了。只有修改插件了。比如我用的Latex插件,自己动手修改上传路径到Storag后才可以用。请看:http://blog.tahoroom.com/archives/2456.html
3.5.1也行,我从官网下的一个3.5.1,更新后不能上传文件,然后就直接把从你这下的安装包的里面的几个文件(sae_app_wizard.xml这几个)替换,替换完进去就行了。
能帮到你我也很高兴!一起加油!
上回直接升级,把除了wp-config.php外的文件都直接覆盖掉了,到现在不能传文件到storage了,对我这样的菜鸟无疑是一大打击,马上按楼主的方法试试,万分感谢啊!!!
没有使用sae的memecache啊,可以修改下吗
我也试着想改,但是终究还是没弄成,不会,期待高人咯。
我不是搞php的,你可以参考下这个http://wp4sae.org/2011/08/wordpress-3-2-1-for-sae-beta/
你好,我现在使用的是wp4sae 3.4.1,能不能直接升级至3,5呢
可以,直接下载我做好的文件,SVN上传到服务器覆盖文件就好了。http://pan.baidu.com/share/link?shareid=152740&uk=3171134180 建议选择3.5版本的,最稳定。3.5.1我还在测试中。
sae能实现在线安装插件和在线安装主题的功能吗
不能再线安装,必须使用SVN进行提交。你可以看看SAE的开发文档,里面有说明。 🙂
请教一个问题,能不能以插件的形式制作出来,这么改来改去的很是麻烦的?
呃,我不会制作插件,也不知道能不能可以用插件实现。只会改咯。不过如果需要的话,你可以直接下载我打包好的文件包直接使用,或者把那几个文件复制出来覆盖到你的博客里就行啦。
下载地址:http://pan.baidu.com/share/link?shareid=204302&uk=3171134180
请问你上面的代码是通过怎么样的编辑方式发布出来的???
简单,使用插件完成。这篇文章使用的插件是codecolorer,我也推荐这个。
还有一个插件也不错,但是调用比较慢,名字是syntaxhighlighter,不是很推荐,不过功能比前一个多一点点。你可以做个选择,祝顺利!
你好!我安装了wordpress最新的3.5.1的版本,但是按照3.5.0的配置安装不好。能不能给个指点啊???我的QQ:489691911 希望能够加你为好友
可以啊,就一步一步来就好了。我已经配置好了,这是测试网址:http://wordpress351.sinaapp.com/
要不给你我做好的打包文件,你可以用它试试。如果不行,欢迎交流!
http://pan.baidu.com/share/link?shareid=201493&uk=3171134180
严格按照以上步骤来,但是不行啊。。打开完全空白。
wp-config文件能不能发一份给我?简单改一下那几个参数好像不行。
tanteng@qq.com
急求,谢谢!!
好了,应该加上一句!!
进行升级操作,要首先把主题设为默认主题,我博客的主题是自己传上去的,所以升级之后,一片空白。
多谢!这个我真没试过。应该说这个文章适合全新安装wordpress吧。不过我的是直接升级过来的,用的这个主题没有换过,没发现问题,说明依然升级成功了。具体到底是不是默认主题的原因就真不清楚了,现在也没功夫再试了,你有兴趣的话要不然给咱在测试测试吧。
看到你最新的留言了,看起来是成功了,所以就不发了,祝好!
一、二是必要步骤吗?如果采用SVN手动上传代码包的话~
如果自己采用SVN上传,第一步不是必要的,第二步是必要的。因为要创建SAE的上传路径变量。如果不做第二步,那么在后台新建文章上传媒体的时候将失败。因为SAE不允许把附件上传到网站目录下,必须上传到Storage里才行。你可以试一试看看。
已完成升级,万分感谢!
不用客气!欢迎交流!
您是数学老师?哈哈我读过一个《数据结构》的书,那个作者之前也是数学老师。唉我好羡慕计算机干得好,数学又好的人,更何况还是老师呢~ 😉
不是,学物理的,以前做过民办院校老师,现在在读物理博士,要用到数学。
在3.4.2那篇中有 define(‘WP_USE_MULTIPLE_DB’, true); 3.5版不用吗?
我没有修改,不过现在已经可以使用了,不是必须修改的。这个是使用多数据库的时候才需要设置这一项。当然,加上这一项wordpress也能正常工作,而且对多数据库来说会更适用。祝好!