Submitted by gouki on 2012, February 13, 1:42 PM
Yii Framework有的时候会很容易就被墙。所以,自己给他做了一个反向代理 .
每个月5G流量。访问地址为: http://yii.neatcn.com(跳转)
这样的功能,当然不是我做的。我没有那么多的精力来做这个,我是用了一个现成的网站(Speedy Mirror)处理的。
很方便,这里有一篇中文教程:http://www.ml934.com/archives/204.html
我们知道Speedy Mirror是 一家免费CDN加速服务网站,服务器节点分布在英美,感觉用它给国内的网站做加速意义不大。所以这里只谈用SpeedMirror为GAE做“反向代 理”,准确的说就是做了一个“镜像网站”。我们知道由于GAE被墙,appspot.com是不能在国内访问的,这就导致以GAE做为平台的各种应用无法 正常使用和访问,比如在GAE上搭建的博客,相册,网盘等等。这里我们就正好可以利用其CDN的特性,为你的GAE 站点做个镜像,当我们访问xxxx.appspot.com的时候,就会从Speedy Mirror的服务器上获取缓存内容。Speedy Mirror支持https访问,使用简单,注册后只需填写你要推送的网址,完成设置立刻生效。
先添加一个你喜欢的名称,再填写你要推送的网址,点击Detect and save确定就可以了。然后就会给你一个xxxx.speedymirror.com二级域名(下图,可点击放大查看)

Speedy Mirror默认的缓存更新是7天,你要是更新频繁,你就点击xxxx.speedymirror.com把缓存更新改为1即可。点击Add new mirror,再新添加一个镜像就可以了哦,怎么样?够简单吧,那就时间起来吧,呵呵。

PS:GAE虽然可以通过APPs企业套件绑定域名的方法实现墙内访问,但对于新手来说,步骤繁琐,且反向代理也不好找,远不如 Speedy Mirror简单。唯一的缺憾就是speedymirror.com这个域名太不好记了,简直有点坑爹。老外的东西,没办法了,就凑活着用 吧!
----------
原文中没有说明,其实现在可以cname指向到你申请的那个二级域名的页面的。所以我才变成了yii.neatcn.com
Tags: yii
PHP | 评论:0
| 阅读:15817
Submitted by gouki on 2012, February 10, 1:27 PM
之所以要转这一篇文章,是在于有人在THINKINLAMP的googlegroup里提问,说是怎么在svn提交的时候对phpdoc进行检查,需要让他们强制写注释,否则就不让他们提交,于是我说了是在老王的博客上。但后来我看了一下老王新的博客,huoding.com,这篇文章不在(没有迁移到新的博客中)。所以我重新在本地复制了一下他在百度博客里的文章。
原文来自:http://hi.baidu.com/thinkinginlamp/blog/item/17476d22661ee6a94623e8d7.html
PHP代码审计方面的软件越来越多了,PHPCheckstyle算是最近比较活跃的一个。通过SVN钩子脚本的方式来调用PHPCheckstyle,可以强制代码必须符合预先设定的编码标准(比如PEAR编码标准),有助于在多人合作项目中提高代码整体质量。
PHPCheckstyle的设置:
安装真的没什么可说的,属于接插即用型的,唯一需要设置的就是config目录下的配置文件:缺省使用的是default.cfg.xml,你可以编辑它,按照官方文档适当的增减规则。不过PHPCheckstyle项目诞生时间短,不够稳定,截至0.8版本为止还有不少问题,使用前最好逐条规则进行测试。
最简单的运行方法如下:
php run.php --src /path/to/file
这样的话会生成相关的html文档,如果你想直接输出的话,请使用:
php run.php --format console --src /path/to/file
更多选项可以自己看帮助(php run.php就可以查看相关帮助)
Subversion钩子脚本:
下面设置钩子脚本,具体点说是前置钩子,也就是:pre-commit,通过钩子检查后才被允许提交到版本库。只有添加或更新的文件是需要检查的,如果是 要删除的文件,则没有必要检查;还有一个问题,PHPCheckstyle只能检查具体文件的内容,而在提交之前,我们想要检查的文件还不存在,所以我们 得生成一个临时文件,检查完再删除,另外,在生成文件时要注意其唯一性,免得多用户一起提交时发生冲突,注意事项了解的差不多了,可以写钩子脚本了:
代码(at pastebin.com):
01 #!/bin/bash
02
03 REPOS="$1"
04 TXN="$2"
05
06 PHP="/usr/local/php/bin/php"
07 SVNLOOK="/usr/bin/svnlook"
08
09 RUNSCRIPT="/path/to/run/php/script"
10
11 CHANGED=`$SVNLOOK changed -t "$TXN" "$REPOS" | grep '^[U|A]' | awk '{print $2}'`
12
13 for FILE in $CHANGED; do
14 if [[ "$FILE" =~ \.php$ ]]; then
15 TEMPFILE=`mktemp`
16 $SVNLOOK cat -t "$TXN" "$REPOS" "$FILE" > $TEMPFILE
17 MESSAGE=`$PHP $RUNSCRIPT --format console --src $TEMPFILE | head -n -2`
18 if [ ! -z "$MESSAGE" ]; then
19 rm -rf $TEMPFILE
20 echo "$MESSAGE" | sed -e "s|$TEMPFILE|$FILE|" 1>&2
21 exit 1
22 fi
23 rm -rf $TEMPFILE
24 fi
25 done
关于Shell,如果有不清楚的可以自己搜索一下,网上有很多类似的文章。
钩子脚本还可以做很多事情,比如核对PHP脚本语法(php -l),而且通过管道符不用生成临时文件:
MESSAGE=`$SVNLOOK cat -t "$TXN" "$REPOS" "$FILE" | $PHP -l`
运行后,不用判断MESSAGE是否为空,而是根据退出状态来判断脚本是否有语法问题:
if [ $? -ne 0 ]
PHPCheckstyle配置和使用多少还是有点别扭,有机会试试PHP_CodeSniffer,配置钩子脚本更简单。
BTW:发现一个PHP Commit Hooks项目,有点意思,可以看看。
-------
---EOF---
最后,我也下载一份PHP COMMIT HOOKS项目 ,有点意思,可以少写很多了
Tags: svn, checkstyle, thinkinlamp
PHP | 评论:0
| 阅读:17896
Submitted by gouki on 2012, February 7, 4:16 PM
套用一句多年前博客中的一句话:以前,我说过有关于QR CODE的博客(QR CODE),也推荐了google的开源工具,事实上我的每篇博客右侧也都生成了二维码。
嗯,其实Google官方有QR Code generate的网站,不过它是appspot的,所以,基于众所周知的原因,它就打不开了。不过,还有一个办法利用google自带的QR Code生成器生成QR Code的。
打开igoogle,添加QR Code Generate的widget:http://www.google.com/ig/adde?moduleurl=www.mobile-barcodes.com/widget/google-gadget.xml
然后在igoogle的页面中就多了这么一块:

试试看,是不是很HIGH?
Tags: qrcode, 二维码
PHP | 评论:0
| 阅读:17958
Submitted by gouki on 2012, January 31, 10:04 AM
一个小小的脚本,10分钟写完,没用IDE,没有语法纠错,第一次的时候就在字符串COPY过来的时候因为双引号的问题导致了一点错误。偷笑一下。
该脚本仅为自用,为防止丢失,还是做个备份吧:
PHP代码
- <?php
- set_time_limit(0);
- error_reporting(E_ALL);
- header("Content-type:text/html;charset=utf-8");
- $templateDirname = dirname(__FILE__);
-
- $cssfilename = $templateDirname . "/css/style.css";
- $templateFilename = sprintf("template_%d.html",time());
-
- $templates = array();
- foreach(glob($templateDirname."/*") as $value){
- if(is_file($value) && in_array(strtolower(pathinfo($value,PATHINFO_EXTENSION)), array('html','htm')) && substr(basename($value),0,9) != "template_"){
- $filedata = file_get_contents($value);
- $startPos = strpos($filedata, "<body>") + 6;
- if($startPos == 6){
- continue;
- }
- $endPos = strpos($filedata, "</body>");
- $templates[]= substr($filedata, $startPos , ($endPos-$startPos));
- unset($filedata);
- }
- }
-
- $cssdata = file_get_contents($cssfilename);
-
-
- $templateData = "
- <div id=\"templates\">
- <style type=\"text/css\">
- %s
- </style>
- %s
- </div>
- ";
- $templateInfo = sprintf($templateData,$cssdata,join("\n",$templates));
- $ret = file_put_contents($templateFilename,$templateInfo);
- if($ret != false){
- echo "整合完成,文件名为:",$templateFilename ,"<br />";
- }
- exit;
偷懒了一下,备个份,没有过多的处理,比如自动指定目录啥的。想想也没那么麻烦,就这样解决吧。
PHP | 评论:0
| 阅读:16886
Submitted by gouki on 2012, January 17, 8:59 AM
号码小助手,会自动将号码分析成:AAAB,AABB,ABAB之类的方式。
调用方式:http://ixyz.sinaapp.com/api/phone?h=13912341234,13912123344,13912345678&type=json
默认返回值是json,可支持json,xml,text三种返回形式
号码最多一次传10个
PHPCODE:
esult = file_get_contents('http://ixyz.sinaapp.com/api/phone?h=13912341234,13912123344,13912345678&type=json');
返回值是:
json格式返回:
{"phones":{"13912341234":["ABCD","ABCDABCD"],"13912123344":["ABCD","ABCDABCD","AABB","ABCD","ABAB"],"13912345678":["ABCD","ABCDABCD","AABB","ABCD","ABAB","ABCD"]},"copyright":"Written by walkerlee, api support by gouki","error":"sorry,phone doesn't match"}
xml格式返回:
XML/HTML代码【xml返回的格式结果与json的有一点点不太一样】
- <?xml version='1.0' encoding='UTF-8'?>
- <root>
- <result>
- <phones>
- <phone number="13912341234">
- <ABCD>ABCD</ABCD>
- <ABCDABCD>ABCDABCD</ABCDABCD>
- </phone>
- <phone number="13912123344">
- <ABCD>ABCD</ABCD>
- <AABB>AABB</AABB>
- <ABAB>ABAB</ABAB>
- </phone>
- <phone number="13912345678">
- <ABCD>ABCD</ABCD>
- </phone>
- </phones>
- <copyright><![CDATA[Written by walkerlee, api support by gouki]]></copyright>
- </result>
- </root>
----------
目前支持的类型有:XML/HTML代码
- Array
- (
- [0] => AABB
- [1] => ABCD
- [2] => AAAB
- [3] => ABAB
- [4] => ABCABC
- [5] => ABCDABCD
- [6] => ABBB
- [7] => ABCCBA
- [8] => ABBA
- [9] => AAAA
- [10] => AAAAA
- [11] => AAAAAA
- [12] => AAAAAAA
- [13] => AAAAAAAA
- [14] => ABCDCBA
- [15] => ABCDDCBA
- [16] => ABCBA
- )
---------
以上类型可以根据需要随便加,如果你觉得有哪些规则不错,你可以告诉我(这个正则是自动生成的,因此只要告诉规则就OK了)
嗯,这个程序的核心函数是walkerlee写的,我只是稍稍的封装处理了一下
Tags: sae, php, yii4sae
PHP | 评论:0
| 阅读:15325