套用一句多年前博客中的一句话:以前,我说过有关于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
浏览: 1845 次
点击打开新窗口浏览全图](https://neatstudio.com/attachments/date_201202/thumb_343c4a3653e8ab09614874b858cf744a.png)
试试看,是不是很HIGH?
一个小小的脚本,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;
偷懒了一下,备个份,没有过多的处理,比如自动指定目录啥的。想想也没那么麻烦,就这样解决吧。
号码小助手,会自动将号码分析成: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写的,我只是稍稍的封装处理了一下
纯笔记,在使用ActiveRecord的时候一点注意事项。
本来在处理缓存的时候想对一些数据做强制缓存的,但结果预想的目标和我不一样。
我的$cachekey = md5(serialize($model).$parameter);
然后在调用的时候发现$model对象中的一些信息都消失了。起初以为参数没有传递,但测试了一下之后发现全部正常,那问题出在哪里呢?
再一步步的调试,发现出在serialize后对象就变了。于是看了一下CActiveRecord的源码,果然发现了源码中有定义__sleep(),纠结啊。
看来以后要注意一下,不能随便把model给序列化了。
在项目中,难免会在项目中调用一个不存在的类(偶尔,偶尔,当这个类的类名是程序生成的时候,偶尔会出现这种情况啦),在new 这个类时,都会直接报fatal错误,然后程序就终止了,怎么办?怎么避免这种情况发生?
注:下面的例子其实是指有autoload的情况下所触发的。如果没有autoload,也就相当于不会触发一个include文件的操作。直接就报FATAL错误了。而如果有autoload,则是报include文件的错误,这个时候才能被捕获,多谢神仙的指正
于是看手册set_error_handler,调用一个callback,处理完后,在这个方法里重新生成一个空类就OK了。看了一下手册上的例子
PHP代码
- <?php
-
- function myErrorHandler($errno, $errstr, $errfile, $errline)
- {
- if (!(error_reporting() & $errno)) {
-
- return;
- }
-
- switch ($errno) {
- case E_USER_ERROR:
- echo "<b>My ERROR</b> [$errno] $errstr<br />\n";
- echo " Fatal error on line $errline in file $errfile";
- echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
- echo "Aborting...<br />\n";
- exit(1);
- break;
-
- case E_USER_WARNING:
- echo "<b>My WARNING</b> [$errno] $errstr<br />\n";
- break;
-
- case E_USER_NOTICE:
- echo "<b>My NOTICE</b> [$errno] $errstr<br />\n";
- break;
-
- default:
- echo "Unknown error type: [$errno] $errstr<br />\n";
- break;
- }
-
-
- return true;
- }
看了一下,结果,发现只有$errstr中才有类名出现,但还是文件名,难道我要用正则?又仔细看了一下手册,发现callback还有一个第五个参数
XML/HTML代码
- errcontext
- The fifth parameter is optional, errcontext, which is an array that points to the active symbol table at the point the error occurred. In other words, errcontext will contain an array of every variable that existed in the scope the error was triggered in. User error handler must not modify error context.
输入第五个参数,原来,这是一个数组,如果我是类的话,里面就有className这个下标数组,直接就是类名了
同时还有一个很重要的问题,如果callback return false的话,会自动调用原来的出错处理。这 其实是影响我们的操作的。
最终代码如下:
PHP代码
- set_error_handler(function($errno,$errstr,$errfile,$errline,$clsname){
- if(isset($clsname['className'])&&$errno == 2&&!class_exists($clsname['className'])){
- $clsname = $clsname['className'];
- eval("class ".$clsname ." { static public function model(){return null;} }");
- }
- return true;
- },7);
- $result = mmmm::model();
- restore_error_handler();
-
在最后一行恢复了原来的出错处理,不影响原先程序结构。
终于可以直接用了。