从昨日新浪SAE取消应用“日租”扯起

2013-05-29

昨天收到了新浪SAE发来的邮件,内容大概是自5月28日起,用户通过实名认证即免收应用租金并一次性赠送2000云豆(价值20元人民币)。对广大喜欢折腾的网友来说,这应该算是好事一桩了,毕竟又多了一个选择的机会。

邮件详情如下:

新浪SAE取消应用“日租”

新浪SAE取消应用“日租”

从技术成熟度上来说,SAE无疑是所有XAE中最成熟的一个。首先,SAE是所有XAE中发展最早的,运营时间和技术成熟程度都占用优势;其次,SAE也是所有XAE中服务最全的一个,支持PHP、Java、Python等语言环境,还支持MemCache、Storage、KVDB等服务,这远不是一般的虚拟主机所能比拟的;SAE推出的“云商店”,是一种在PAAS下新的盈利方式,不论成功与否,这种思路十分值得赞扬。 阅读全文 »

新浪“云商店”初探

2012-07-18

新浪云商店是由新浪SAE推出的一款云计算产品。云商店可以看做是新浪SAE“应用仓库”的升级版,消费者不需要具有任何技术基础,只需要鼠标点几下,就可以成功安装一个应用程序。而对于开发者,则可以通过为云商店开发应用来获取利润。
目前云商店尚处于内测阶段,所以上架的应用比较少,目前上架的应用仅有开源博客软件Wordpress。至于价格方面,则只是每月象征性的收取一元钱。

当“云商店”的应用安装成功后,系统会为应用分配一个*.1kapp.com的域名(如mawenjian.1kkapp.com)。通过nslookup我们不难发现,“云商店”应用使用的IP地址和SAE是完全相同的。 阅读全文 »

放出我写的SAE CDN+软防火墙代码

2012-05-26

虽然我的这个SAE CDN+软防火墙小程序只是写着玩的,而且存在很多不完善的地方,但是得到各位网友的抬爱,尤其是ivmm同学的强烈要求,所以我就将我的SAE CDN+软防火墙的代码放出,供大家下载。因为代码本身就是自娱自乐的,再加上本人水平有限,所以请高人大哥不要见笑。如果有哪位高人想改进一下的,我将非常高兴。

源码的下载地址:http://pan.baidu.com/share/link?shareid=287677&uk=4228204247

【特别提示:这是作者做着玩儿的,存在一些不足(如不支持Cookies、需要使用正则配置缓存规则),请不要用于生产环境,也不提供技术指导,敬请原谅】

下面简单说下安装的过程吧,以mawenjian.net为例。 阅读全文 »

写了一个基于新浪SAE的CDN反向代理+软防火墙小程序

2012-05-24

众所周知,新浪SAE(Sina App Engine)的线路情况绝对是国内最厉害的,无论是中国电信、中国联通,还是移动或者教育网,其速度甚至不是国内的一些低级的CDN所能比拟的;即使是新浪SAE自己的CDN系统(通过lib.sinaapp.com可以发现),线路也不及SAE。

新浪SAE的硬伤就是PHP程序需要进行移植才能使用,所以一定程度上也限制了其的发展。虽然随着新浪SAE的不断发展这种状况有所缓解,但是还是不能从根本上有所改变。

看到新浪SAE如此优越的线路,我昨天心血来潮,写了一个基于新浪SAE的CDN反向代理程序。程序的原理很简单,当客户访问SAE资源的时候,根据客户请求资源的URL和相应的缓存规则进行匹配;然后根据匹配的规则,如果SAE上有缓存并且尚未过期,则直接发出缓存内容进行相应;否则SAE从源服务器抓取数据并缓存。

我的缓存是用MC来完成的。按理来说,KVDB作为持久化存储,而且存储容量较MC大很多,选择它是自然而然的事情了。但是因为我的WWW站点存储的是一些HTML文件,占不了多大的空间,所以用内存级的MC问题也不大。再说了,从速度来说,MC较KVDB要快。

如果你对我的这个小程序有兴趣的话,你可以修改本地的HOSTS文件,将mawenjian.net的IP地址指向SAE的任意一个IP地址,比如115.182.15.250,你是不是发现速度有所提升了呢?

内存级的缓存,再加上国内顶尖的线路,绝对是极客杀人放火、居家旅行的必备杀器!嘎嘎! 阅读全文 »

新浪SAE(Sina App Engine)支持域名绑定啦!

2012-03-24

昨天登录新浪SAE,我发现SAE已经支持绑定独立域名了。绑定方式很简单:

  1. 打开你要绑定域名的应用,转到“应用设置;
  2. 在独立域名设置中选择“新增”;
  3. 输入你要绑定的域名,绑定;
  4. 将要绑定的域名CNAME到 SAE给出的CNAME地址;
  5. 添加一条SAE给出的随机域名的A记录,以验证归属;
  6. 至此,over。

虽然SAE支持域名绑定是一个很大的进步,但是不得不说,这个域名绑定功能很鸡肋。 阅读全文 »

一个基于新浪SAE的网站短信、邮件报警系统

2012-02-12

我寒假期间写了一个基于新浪SAE的网站短信报警应用,今天和大家分享一下。

这个应用的原理很简单,就是每间隔一段时间,抓取监控网站上的内容并进行分析,一旦抓取出现错误,则判定为网站出现错误。如果错误次数超过设定值,该应用就调用短信和邮件发送API,向指定的手机和电子邮箱发送报警信息。待网站恢复正常后,系统依旧会向用户发送信息,告诉用户“你的网站已经恢复正常了”。 阅读全文 »

从新浪SAE(Sina App Engine)搬家了

2011-12-28

今天我把博客从SAE搬出来了,搬到了BlogHost的BGP博客主机。尽管传说是六线BGP线路,但因为是第一次使用BlogHost的服务,所以我对博客的速度还不是很了解。希望各位网友能够给我下反馈,我也好做相应调整。
根据我所在的教育网来看,该线路和我原先使用的SAE无论ping值还是速度都有一定差距。为了优化教育网线路,我对教育网用户采用了CDN加速,页面默认缓存半小时。从加速后的效果来看,速度还不错。
下一步是公网了,如果反馈的效果不怎么样的话,我就豁出去了,全用CDN加速。
本来SAE那儿还有2W+云豆,速度也不错,但间歇性的数据库查询失败实在让人蛋疼。甚至就是因为使用SAE被百度拔毛,我也忍了,毕竟Google收录一直正常,我对百度也没抱多大希望。本来打算就这么凑活着用呢,但就在前两天,我发现仅剩的两个百度快照其中之一便是Database Error!由此可见,SAE不知道出过多少次错误呢。这回实在不能忍了,搬!
虽然自己写博客并不打算成为名博,也不打算赚钱,但最起码的正常访问要能保证吧?如果这都保证不了,没办法,只能搬走了。无论心中有无不舍,搬了,走了。。。 阅读全文 »

SAE环境下开启WordPress评论自动邮件回复功能

2011-11-28

鉴于SAE环境的特殊性,WordPress在常规PHP环境下的评论邮件自动回复功能不能正常使用,需要做一些改动才可以。

首先我要说明的是,我要实现的是让访客决定是否需要在有人回复他的时候接收邮件。

使用SAE Editor,进入所用主题的编辑界面,在functions.php文件中的<?php和?>之间添加以下函数:

/* 所有回复都发邮件 马文建的博客 https://mawenjian.net/ */
function comment_mail_notify($comment_id) {
  $admin_notify = '1'; // admin 要不要收回复通知 ( '1'=要 ; '0'=不要 )
  $admin_email = get_bloginfo ('admin_email'); // $admin_email 可改为你指定的 e-mail.
  $comment = get_comment($comment_id);
  $comment_author_email = trim($comment->comment_author_email);
  $parent_id = $comment->comment_parent ? $comment->comment_parent : '';
  global $wpdb;
  if ($wpdb->query("Describe {$wpdb->comments} comment_mail_notify") == '')
    $wpdb->query("ALTER TABLE {$wpdb->comments} ADD COLUMN comment_mail_notify TINYINT NOT NULL DEFAULT 0;");
  if (($comment_author_email != $admin_email && isset($_POST['comment_mail_notify'])) || ($comment_author_email == $admin_email && $admin_notify == '1'))
    $wpdb->query("UPDATE {$wpdb->comments} SET comment_mail_notify='1' WHERE comment_ID='$comment_id'");
  $notify = $parent_id ? get_comment($parent_id)->comment_mail_notify : '0';
  $spam_confirmed = $comment->comment_approved;
  if ($parent_id != '' && $spam_confirmed != 'spam' && $notify == '1') {
    $wp_email = 'no-reply@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])); // e-mail 发出点, no-reply 可改为可用的 e-mail.
    $to = trim(get_comment($parent_id)->comment_author_email);
    $subject = '您在 [' . get_option("blogname") . '] 的留言有了回复';
    $message = '
    <div style="background-color:#eef2fa; border:1px solid #d8e3e8; color:#111; padding:0 15px; -moz-border-radius:5px; -webkit-border-radius:5px; -khtml-border-radius:5px;">
      <p>' . trim(get_comment($parent_id)->comment_author) . ', 您好!</p>
      <p>您曾在《' . get_the_title($comment->comment_post_ID) . '》的留言:<br />'
       . trim(get_comment($parent_id)->comment_content) . '</p>
      <p>' . trim($comment->comment_author) . ' 给您的回复:<br />'
       . trim($comment->comment_content) . '<br /></p>
      <p>您可以点击<a href="' . htmlspecialchars(get_comment_link($parent_id)) . '">查看回复的完整內容</a></p>
      <p>还要再度光临 <a href="' . get_option('home') . '">' . get_option('blogname') . '</a></p>
      <p>(此邮件由系统自动发送,请勿回复.)</p>
    </div>';
    $from = "From: \"" . get_option('blogname') . "\" <$wp_email>";
    $headers = "$from\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n";
    wp_mail( $to, $subject, $message, $headers );
    //echo 'mail to ', $to, '<br/> ' , $subject, $message; // for testing
  }
}
add_action('comment_post', 'comment_mail_notify');

/* 自动加勾选栏 */
function add_checkbox() {
  echo '<input type="checkbox" name="comment_mail_notify" id="comment_mail_notify" value="comment_mail_notify" checked="checked" style="margin-left:20px;" /><label for="comment_mail_notify">有人回复时邮件通知我</label>';
}
add_action('comment_form', 'add_checkbox');
// -- END ----------------------------------------

如果是普通PHP环境的话,完成此步就可以实现回复的功能了。 阅读全文 »

SAE环境下WordPress插件移植注意事项

2011-11-22

要想把wp插件成功移植到sae上,首先应该搞清sae支持的受限PHP语言和完整版本的PHP语言有何区别。我认为SAE和完整版PHP有如下区别:

最显著的不同莫过于文件操作和文件存储了。首先说文件操作,SAE出于安全性考虑,禁用了很多本地文件操作函数,并且没有提供替换的函数,我认为将来开放的可能性也不是很大,因为这关系到整个云平台的安全性。然后是文件存储,SAE采用和Amazon S3类似的存储技术,将静态文件存放到单独的服务器上,尽管这样有利于文件的集中管理,也有利于使用CDN技术将静态文件分发到网络边缘,但同时带来了一个问题——即不能使用PHP原生函数进行静态文件的存取操作,所以这部分函数需要替换掉。

其次,不同于Apache的.htaccess文件,SAE使用AppConfig文件来对web服务进行配置。如果wp需要使用urlrewrite等功能的,注意对此进行相应更改。

原先SAE不支持的cUrl函数、GD库等函数,现在已经通过函数重载实现,所以这部分可以不必考虑。

别的嘛,暂时没想出来,以后接着补充。

SAE环境下为WordPress增加Google XML Sitemaps

2011-09-09

由于新浪SAE(Sina App Engine)禁用了一些本地文件的操作函数,导致SAE环境下并不能直接使用WordPress的站点地图功能。为解决此问题,有热心的网友将Google XML Sitemaps插件移植到了SAE,也就是Google XML Sitemaps For SAE插件。该插件成功地解决了SAE环境下无法使用站点地图的问题。

Google XML Sitemaps For SAE插件通过将生成的SiteMap XML存放到Storage中,成功地绕开了SAE环境的限制。但是,其同时也带来了另外一个问题:由于SiteMap存储在Storage中,所以SiteMap的URL是类似于http://mawenjian-wordpress.stor.sinaapp.com/sitemap.xml这样的格式,SiteMap URL中的域名和你博客的域名显然不一致。大家都知道,在Google Webmaster中提交SiteMap的时候,需要保证你的SiteMap在你的站点的域名之下。所以,生成的这个站点地图就悲催了。。。

好在SAE提供了强大的FetchUrl功能,我写了一个简答的抓取页面Sitemap.php,当搜索引擎访问这个页面时,由SAE去Fetch前面生成的Sitemap文件,这样,路径问题就可以成功解决了。比如:我的站点地图的URL是:https://mawenjian.net/sitemap.php,而它实际上则是Fetch的Storage中的文件,只不过路径改变了而已。 阅读全文 »