手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:PHP

yii 镜像

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

转老王:PHPCheckstyle代码审计与Subversion钩子脚本

之所以要转这一篇文章,是在于有人在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

google QRCode

套用一句多年前博客中的一句话:以前,我说过有关于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的页面中就多了这么一块:
大小: 4.92 K
尺寸: 257 x 376
浏览: 1847 次
点击打开新窗口浏览全图
试试看,是不是很HIGH?

Tags: qrcode, 二维码

花10分钟写了个脚本,完成文件合并

一个小小的脚本,10分钟写完,没用IDE,没有语法纠错,第一次的时候就在字符串COPY过来的时候因为双引号的问题导致了一点错误。偷笑一下。
该脚本仅为自用,为防止丢失,还是做个备份吧:

PHP代码
  1. <?php  
  2. set_time_limit(0);  
  3. error_reporting(E_ALL);  
  4. header("Content-type:text/html;charset=utf-8");  
  5. $templateDirname = dirname(__FILE__);  
  6. //@chmod($templateDirname,0777);  
  7. $cssfilename = $templateDirname . "/css/style.css"//设置CSS文件路径  
  8. $templateFilename = sprintf("template_%d.html",time());  
  9. //---读取所有的模版  
  10. $templates = array();  
  11. foreach(glob($templateDirname."/*"as $value){  
  12.     if(is_file($value) && in_array(strtolower(pathinfo($value,PATHINFO_EXTENSION)), array('html','htm')) && substr(basename($value),0,9) != "template_"){  
  13.         $filedata = file_get_contents($value);  
  14.         $startPos = strpos($filedata"<body>") + 6;  
  15.         if($startPos == 6){  
  16.             continue;  
  17.         }  
  18.         $endPos = strpos($filedata"</body>");  
  19.         $templates[]= substr($filedata$startPos , ($endPos-$startPos));  
  20.         unset($filedata);  
  21.     }  
  22. }  
  23. //读取CSS  
  24. $cssdata = file_get_contents($cssfilename);  
  25.   
  26. //写入新文件  
  27. $templateData = " 
  28. <div id=\"templates\"> 
  29.     <style type=\"text/css\"> 
  30.     %s 
  31.     </style> 
  32.     %s 
  33. </div> 
  34. ";  
  35. $templateInfo = sprintf($templateData,$cssdata,join("\n",$templates));  
  36. $ret = file_put_contents($templateFilename,$templateInfo);  
  37. if($ret != false){  
  38.     echo "整合完成,文件名为:",$templateFilename ,"<br />";  
  39. }  
  40. exit;  

偷懒了一下,备个份,没有过多的处理,比如自动指定目录啥的。想想也没那么麻烦,就这样解决吧。

号码小助手

号码小助手,会自动将号码分析成: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的有一点点不太一样】
  1. <?xml version='1.0' encoding='UTF-8'?>  
  2. <root>  
  3.     <result>  
  4.         <phones>  
  5.             <phone number="13912341234">  
  6.                 <ABCD>ABCD</ABCD>  
  7.                 <ABCDABCD>ABCDABCD</ABCDABCD>  
  8.             </phone>  
  9.             <phone number="13912123344">  
  10.                 <ABCD>ABCD</ABCD>  
  11.                 <AABB>AABB</AABB>  
  12.                 <ABAB>ABAB</ABAB>  
  13.             </phone>  
  14.             <phone number="13912345678">  
  15.                 <ABCD>ABCD</ABCD>  
  16.             </phone>  
  17.         </phones>  
  18.         <copyright><![CDATA[Written by walkerlee, api support by gouki]]></copyright>  
  19.     </result>  
  20. </root>  

 

----------
目前支持的类型有:
XML/HTML代码
  1. Array  
  2. (  
  3.     [0] => AABB  
  4.     [1] => ABCD  
  5.     [2] => AAAB  
  6.     [3] => ABAB  
  7.     [4] => ABCABC  
  8.     [5] => ABCDABCD  
  9.     [6] => ABBB  
  10.     [7] => ABCCBA  
  11.     [8] => ABBA  
  12.     [9] => AAAA  
  13.     [10] => AAAAA  
  14.     [11] => AAAAAA  
  15.     [12] => AAAAAAA  
  16.     [13] => AAAAAAAA  
  17.     [14] => ABCDCBA  
  18.     [15] => ABCDDCBA  
  19.     [16] => ABCBA  

---------
以上类型可以根据需要随便加,如果你觉得有哪些规则不错,你可以告诉我(这个正则是自动生成的,因此只要告诉规则就OK了)
嗯,这个程序的核心函数是walkerlee写的,我只是稍稍的封装处理了一下

Tags: sae, php, yii4sae