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

List of Supported Protocols/Wrappers

以下部分内容来自手册,比如这个列表:

对于这个列表,熟悉的人可能很熟悉,不熟悉的人,应该不太会关注,以前我也一样。
直到,我看到zend framework,发现在zend_view里,他就模拟了一个协议:zend.view://,为的就是将那些模版中采用短标签(<? =$a ?>)的代码改为长标签(<?php echo $a ; ?>)。

其实我再次看它,也只是一个顺便。yhustc想尝试把以下内容输出:

PHP代码
  1. <?php  
  2. $str = '今天是:<?php echo date("Y-m-d"); ?>';    
  3. file_put_contents('test.php'$str );  
  4. include'test.php' );   

输出结果是类似:今天是2009-01-01这样的结果,但事实上的输出却还是

XML/HTML代码
  1. 今天是:<?php echo date("Y-m-d"); ?>  

yhustc进行了尝试,如果这个内容写入文件,然后通过include,就可以显示正确的结果:

PHP代码
  1. <?php    
  2. $str = '今天是:<?php echo date("Y-m-d"); ?>';      
  3. file_put_contents('test.php'$str );    
  4. include'test.php' );  

但是yhustc不想要这个多出来的IO,因为写入文件后,你总还得删除吧?如果类似的东西太多,IO就太恐怖了。

于是我根据zend.view://这个协议,想起了PHP自带的。并使用Data的协议或者称Wrappers来解决了这个问题:

PHP代码
  1. $str = "函数使用 今天的日期: <?php echo date('Y-m-d');?>";  
  2. $strBase64 = base64_encode$str );  
  3. include("data://text/plain;base64,{$strBase64}") ;  

关于这个data的wrappers请查看上面的列表,我也就不详细说了,它是符合RRC2397的标准的。
事实上这个Data也是从5.2.0才开始支持的,而且更重要的是上面的第三行代码:

PHP代码
  1. include("data://text/plain;base64,{$strBase64}") ;   

这句话还需要另外一样东西支持:allow_url_include,而这个又需要allow_url_open的支持。(需要改php.ini)
有了这个支持,你以后看到这样的代码:

PHP代码
  1. <?php  
  2. include("http://localhost/needrequire.php");  
  3. echo 'test';  

就不需要更感到惊讶和愤怒了。毕竟,它事实上是支持的,只要这个needrequire.php是返回正确的PHP代码,比如test.php的内容为:

PHP代码
  1. <?php  
  2. echo'<?php class a{ function a(){echo "test";}}?>' );      
  3. ?>  

然后:

PHP代码
  1. <?php  
  2. include'http://localhost/test_echo.php' );  
  3. $a = new a();  

还是会正常的输出test的。

出院男孩自曝网瘾历程:从很快乐到很暴躁

对于这篇文章,目前看来还是相对比较正面的,特别是最后一句话:孩子有病家长吃药。仔细想想确实是这样的,中国自古以来就是棍棒下出孝子,然而随着现在的网络发达,各种新事物的不断出现,接受的知识也更多的情况下,很多人在棍棒下都选择了逆反。

如今我也是一个小孩的父亲了,对于这类事物我也就相对关心了一点,杨教授的电击疗法让人心寒。突然想起自己在小时候,迷上电子游戏的时候,父母的无奈,然而在几年后,虽然仍然喜欢这类的东西,却已经没有那样的迷恋了,对于玩游戏也有了自己的标准。不过也总是经历了那些年代,大概有6、7年时间吧。虽然说人生有多少个6、7年?偶尔在和姑姑吃饭的时候,她就说了,其实是因为在她们那个年代没有这种网络、游戏等,如果有的话,谁能保证不能上瘾?其实我更多的时候是认为,游戏、网络纯粹是一个逃避现实的方法。当在现实生活中处处被人比(学习、生活等),压力陡增的情况下,游戏中的胜利何尝不是缓解压力的方法呢?为什么会迷恋?那多数是你受到的压力太大了,却无法逃避,只有选择这种办法(当然是随便说说,不过也有我自己的想法。虽然小孩刚刚出生没多久,但我想不要给他太大的压力,总还是一个好事。我们这个年龄都是看成长的烦恼长大的,小时候最羡慕的就是西弗一家了。小孩没压力。即使mike门门是C,开萝门门是A,可他们也没有对MIKE强制要求什么)

以下是新闻内容,我是从cnbeta上复制而来

新闻来源:中新网
由中国青少年网络协会和北京军区总医院举办的中国《家庭预防网瘾指南》研讨会在京举办。会上,戒掉网瘾的小宁、小康(化名)第一次勇敢面对专家和公众,说 出自己网瘾背后的酸甜苦辣……“看来我的担心是多余的。儿子,你真的变了。”对比了儿子进入基地训练前后的照片,网瘾少年小宁(化名)的母亲感叹道。 据了解,这名叫小宁的男孩日前在北京军区总医院青少年心理成长基地接受了为期40天的网瘾治疗。与其他网瘾治疗机构不同的是,基地有近2/3的课程内容需要家长参与,用“孩子有病,家长吃药”的家庭疗法治网瘾,至今已将数千名网瘾患者从虚拟世界里拉了出来。

7月8日,由中国青少年网络协会和北京军区总医院举办的中国《家庭预防网瘾指南》研讨会在京举办。会上,戒掉网瘾的小宁、小康(化名)第一次勇敢面对专家和公众,说出自己网瘾背后的酸甜苦辣。

初中时的小宁,“成绩很好,也很快乐”。在他看来,像家里买车买电器的大事,父母都要征求自己的看法。“我有一种被这个家需要的感觉,学习上也有了动力”。

高中以来,小宁与父母的沟通明显减少。随着课业压力的增大,在学习和成长上的烦恼和困惑层出不穷,他的性格愈发暴躁,与父母的摩擦也日益增多。对家庭失望的小宁从此对“电子鸦片”上瘾,在网络中寻找快乐,无法自拔。

“虽然网络成瘾的形成因素包括家庭、学校、社会和个体因素,但最关键的因素还是家庭是否和谐。”北京军区总医院成瘾医学科主任、中国青少年心理 成长基地主任陶然指出了网瘾预防与家庭的关系,“通过对4000多个家庭的4000多例网瘾患者及北京16所高校、全国31个省市的调查,我们发现网络成 瘾主要缘自家庭原因,家庭因素占60%~80%的比例。”

小康坦言自己逃入网络世界是迫于父亲“棍棒底下出孝子”的高压政策。父亲对事事要求完美,希望小康能考上名牌大学,将来找一份薪水丰厚的工作。父亲过于沉重的要求让小康感到自己永远满足不了父亲的期望,“我找到网络的虚拟世界,开始在另一个世界寻求成功的满足感”。

像小康这样因此陷入网瘾并不鲜见。中国人才研究会超常人才专业委员会理事长、家庭周末报高级顾问贺淑曼介绍,家庭教育的弊端对子女网瘾的形成亦 产生不容忽视的影响。青少年在面对学校和社会的压力时迷茫、无所适从,从而给网络的入侵以可乘之机;家长对完美主义的推崇,也常常导致孩子没有自信心,感 觉生活和学习都不快乐。相反,在网上玩游戏特别快乐、特别美好,子女能得到满足感。

据了解,目前,中国青少年心理成长基地在校救治的网络成瘾青少年近50名,这一数字在寒暑假期间会成倍增长。这些青少年的家庭或多或少存在不和谐因素。

中国青少年心理成长基地的一项调查表明,这些孩子76.3%的家庭生活不和谐或父母感情不融洽;61.1%的父母教养方式明显不一致,父亲以专 制或忽视型教养较多,母亲以溺爱教养较多;52.3%的孩子评价父母缺乏温暖和理解;49.8%的父母以拒绝、否认的教养方式为主;40.6%的父母对孩 子过度干涉或保护。

在研讨会上,美国斯坦福大学电子工程博士伍晓东同时指出,进行网络教育,家长自身对网络的认知是关键。

据了解,54%左右的家长对网络一无所知,对一些家长可以用“谈网色变”来形容。陶然建议开办“家长课堂”,培训“称职父母”。他认为,很多青少年上网,是由不良的家庭环境和教育造成的。要改变孩子,就要先改变他们的家长。

伍晓东建议,家长甚至可以尝试跟孩子一起玩网络游戏,并且分享彼此的体验和感受。如果家长一看到孩子上网就制止,反而容易激起孩子的好奇心和逆反心理,更易沉迷网络中无法自拔。

“孩子有病家长吃药”,要让孩子克服网瘾,家长必须要改变。中国青少年网络协会秘书长郝向宏认为,基地从中国家庭实际出发,对症下药、有的放矢的教育治疗模式成效显著。

Tags: 网瘾

php 使用glob遍历时的注意事项[原创]

PHP中使用glob递归是一个很方便的事情,如下:

PHP代码
  1. function read ( $dirname )  
  2. {  
  3.     static $dInfo;  
  4.     $dirname .= subStr$dirname, -1 ) == "/"  ? "" : "/";  
  5.     $dirInfo = glob$dirname . "*" );  
  6.     foreach ( $dirInfo as $info ){  
  7.         $dInfo[] = $info;  
  8.         if ( is_dir$info ) ){  
  9.             if ( !is_readable$info ) ){  
  10.                 chmod$info, 0777 );  
  11.             }  
  12.             read( $info );  
  13.         }  
  14.     }  
  15.     return $dInfo;  
  16. }  
当然用dir函数也可以:

PHP代码
  1. function read ( $dirname )  
  2. {  
  3.     static $dInfo;  
  4.     $d = dir( $dirname );  
  5.     if ( $d ){  
  6.         while ( false !== ($entry = $d->read() ) ){  
  7.             if$entry != '.' && $entry != '..' ){  
  8.                 $entry = $dirname . '/' . $entry ;  
  9.                 $dInfo[] = $entry ;  
  10.                 ifis_dir$entry )){  
  11.                     if ( !is_readable$entry ) ){  
  12.                         chmod$entry, 0777 );  
  13.                     }  
  14.                     //$timeInfo[] = filemtime( $entry );  
  15.                     read( $entry );  
  16.                 }  
  17.             }  
  18.         }  
  19.     }  
  20.     return $dInfo;  
  21. }  
嗯。看上去没有什么问题。但是有一个情况需要注意

在linux下面,目录名可以为".aa",最典型的例子就是svn目录,svn目录里大量的".svn"的目录,好象,在linux下面,这样以"."开头的目录,默认是隐藏目录,不显示的。

所以,在使用glob的时候,这样的目录是认不出来的。这点要千万注意

做个笔记。

Tags: glob

json2select的全国城市数据

怎么说呢,这个东西不太适合存储ID进数据库的用户,因为我在打开该文件后发现,里面的key全是t,s之类的,作者shawphy也建议换成j,s,q之类的key,但对于普通 用户来说太累了。

当然,这个数据应该是配合json2select插件而来的,所以我们不能奢求什么。
如果确实需要,到这里下载数据,然后自己通过程序生成json文件,修改一下json2select插件。当然更能做的就是问一下google,百度,谁有三级联动的代码。

原文如下:

去年写过一个小插件,json2select 一直想要转换出配套的数据,但总有这样那样的问题之后,终于拖到了现在。
好在一切悲剧的日子已经过去了,新时代已经来临。猛击这里
三级联动,直辖市精确到城镇街道,一般城市到达区。强烈推荐。

这一切都要感谢 Asfman ,辛勤的工作,当然也少不了感谢搜狐白社会,是他们提供了这么好的数据,也要感谢我们伟大祖国,我们中华民族地大物博,省市也很多……

这套数据有100K多一点,但可以想办法压缩
把其中重复字符串替换掉,把街道替换成j,市替换成s,区替换成q,都可以减少文件体积。要用的时候先用正则替换后,再eval执行字符串就能得到数据了,可以达到68K左右
另外,保存成gb2312的话也可以减小体积。目前我手头的是52K左右大小了。但可能导致乱码,慎用。

进一步,如果通过词频分析,找出重复最多的前20个,替换的话,相信可以把体积维持在30K以下了。但手头没工具,最近也很忙,所以大家自己发挥吧。
我粗略压缩后的东西我就不单独发布了。

javascript处理事件的一些兼容写法

 

司徒正美的一些关于javascript的处理的兼容写法。如果不想用这些,可以直接用jQuery中的功能。如bind,unbind,$('XX'),$(document).ready()等

绑定事件

JavaScript代码
  1. var addEvent = function( obj, type, fn ) {  
  2.     if (obj.addEventListener)  
  3.         obj.addEventListener( type, fn, false );  
  4.     else if (obj.attachEvent) {  
  5.         obj["e"+type+fn] = fn;  
  6.         obj.attachEvent( "on"+type, function() {  
  7.             obj["e"+type+fn]();  
  8.         } );  
  9.     }  
  10. };  

另一个实现

JavaScript代码
  1. var addEvent = (function () {   
  2.     if (document.addEventListener) {   
  3.         return function (el, type, fn) {   
  4.             el.addEventListener(type, fn, false);   
  5.         };   
  6.     } else {   
  7.         return function (el, type, fn) {   
  8.             el.attachEvent('on' + type, function () {   
  9.                 return fn.call(el, window.event);   
  10.             });   
  11.         }   
  12.     }   
  13. })();  

移除事件

JavaScript代码
  1. var removeEvent = function(obj, type, fn) {  
  2.     if (obj.removeEventListener)  
  3.         obj.removeEventListener( type, fn, false );  
  4.     else if (obj.detachEvent) {  
  5.         obj.detachEvent( "on"+type, obj["e"+type+fn] );  
  6.         obj["e"+type+fn] = null;  
  7.     }  
  8. }  

加载事件与脚本

JavaScript代码
  1. var loadEvent = function(func) {  
  2.     var oldonload = window.onload;  
  3.     if (typeof window.onload != 'function') {  
  4.         window.onload = func;  
  5.     }else {  
  6.         window.onload = function() {  
  7.             oldonload();  
  8.             func();  
  9.         }  
  10.     }  
  11. }  

阻止事件

JavaScript代码
  1. var cancelEvent = function(event) {  
  2.     event = event||window.event  
  3.     if (event.preventDefault) {  
  4.         event.preventDefault(  );  
  5.         event.stopPropagation(  );  
  6.     } else {  
  7.         event.returnValue = false;  
  8.         event.cancelBubble = true;  
  9.     }  
  10. }  

取得事件源对象

相当于Prototype.js框架的Event.element(e)

JavaScript代码
  1. var getTarget = function(event){  
  2.     event = event || window.event;  
  3.     var obj = event.srcElement ? event.srcElement : event.target;  
  4.     return obj  
  5. }  
Records:5312345678910»