WordPress on SAE

sae

网站搬到新浪 SAE 有两个星期了,速度有明显提升,稳定性也没让我失望,基本上,杠杠的。会搬过来,主要是现在各种空间不靠谱,小问题三天两头从不间断,极大打击更新热情,基本是万念俱灰的节奏。

一次机缘巧合之下,申请高级开发者居然通过了。每个月都有免费豆豆送,屌丝终有逆袭天,太正能量了,这么高大上的东东放着不用白不用,所以就想反正先尝试一把看质量如何。

过程肯定不是无缝的,还挺多缝缝沟沟的。不过好在基本都解决了,习惯性的要记录一下。数据库导出导入这个就略了吧,好像也没什么很特别的。

<?PHP=配置改造?>

在商店下载的  WordPress for SAE 不是最新版,建议到官网下载最新版,然后参考其配置文件的写法,拷吧。此外建议加上两个参数:一个开关,SAE 本身应该也有判断的开关,不过自己定义一个灵活一些;还有一个是文件存储目录。

~/wp-config.php

define('SAE', true);
define('SAE_STORAGE','wordpress');

<?PHP=文件上传?>

SAE 本身不支持在线写文件,附件推荐用 Storage 来存放。这个东西有点慢热,多用就好了。代码也要做相应修改。

~/wp-includes/functions.php

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

    if(defined('SAE_STORAGE')){
        $dir = 'saestor://'.SAE_STORAGE.'/uploads';
        $url = 'http://'.$_SERVER['HTTP_APPNAME'].'-'.SAE_STORAGE.'.stor.sinaapp.com/uploads';
    }
    $basedir = $dir;
    $baseurl = $url;

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

~/wp-admin/includes/file.php
~/wp-includes/class-wp-image-editor-gd.php

 // Set correct file permissions *3
 if(!defined('SAE')){
     $stat = stat( dirname( $new_file ));
     $perms = $stat['mode'] & 0000666;
     @ chmod( $new_file, $perms );
 }

<?PHP=邮件发送?>

SAE 屏蔽了一些可能比较危险的参数,导致无法调用自带函数发送邮件。这里不想用新浪自带的邮件服务是想尽量不动太多代码,所以找了下解决办法。

~/wp-includes/class-smtp.php

if( defined('SAE') ) {
    $this->smtp_conn = @fsockopen($host, $port, $errno, $errstr);
}else{
    $this->smtp_conn = @stream_socket_client(
        $host . ":" . $port,
        $errno,
        $errstr,
        $timeout,
        STREAM_CLIENT_CONNECT,
        $socket_context
    );
}

<?PHP=域名绑定?>

需要发送邮件确认,过程不算复杂。就算未备案也可以走海外路线,这个比较人性化。两倍流量的代价也还可以接受,完全可以且走且珍惜。

<?PHP=插件兼容?>

插件和主题的更新比较麻烦了一点,基本都要本地修改上传覆盖来完成更新。另外,涉及到文件操作和在线操作的插件,一般也都废了。如我之前的备份插件 BackUpWordPress、在线数据库插件 Adminer。便利性大打折扣就是了。

不过 SAE 倒是提供了替代方法,例如可以自己用定时任务跑备份;另外数据库也有专门的在线管理工具。就是复杂了一点点而已。习惯了也还好。

<?HELP=无法翻墙?>

此外,还有个比较令人累觉不爱的大问题:无法翻墙。如果想做采集或登陆接口等,谷歌脸书推特啥的一概没法用,不过这个是国内通病也不计较什么了,节制点是好事。但远程访问的函数居然还人为故意的屏蔽了代理功能,这个未免就太放肆了吧。完全无法愉快玩耍的节奏。

不过,后来后来,我还是想出了一个折衷的办法,具体方法另起一行。

2 thoughts on “WordPress on SAE