Submitted by gouki on 2010, March 29, 7:15 AM
读书的时候,偶尔也和同学们玩过xxx号是星期几的游戏。但那也是十几年前的事情了。
如今在程序时代,什么都用程序来解决。那当然是很方便的。因此,你问我2003年10月1日是星期几,我很可能就会直接用程序来告诉你。
PHP代码
- <?php
- echo date('w',strtotime('2003-10-1'));
但事实上,我们也都知道,PHP的date函数是有时间范围区间的,即只能从1970~2038年,因此在这个区间范围之外的算法都是不准的。那倒底怎么算呢?其实是有一个公式的:
蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
公 式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的 13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。(C是世纪数减一,y是年份后两位,M是月份,d是日数。1月和2月要按上一年的13月和 14月来算,这时C和y均按上一年取值。)
算出来的W除以7,余数是几就是星期几。如果余数是0,则为星期日。
以2049年10月1日(100周年国庆)为例,用蔡勒(Zeller)公式进行计算,过程如下:
蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
=49+[49/4]+[20/4]-2×20+[26× (10+1)/10]+1-1
=49+[12.25]+5-40+[28.6]
=49+12+5-40+28
=54 (除以7余5)
即2049年10月1日(100周年国庆)是星期5。
你的生日(出生时、今年、明年)是星期几?不妨试一试。
--EOF--
上面的公式和部分内容来自于http://www.cnblogs.com/chingho/archive/2010/03/26/1697282.html,只要有公式,什么都可以解决。
PHP | 评论:2
| 阅读:20646
Submitted by gouki on 2010, March 11, 8:59 AM
ThinkSNS是基于ThinkPHP框架开发的一款SNS程序,原本以为还是相对不错的程序,一些小的BUG也还能够接受,但听到这个消息(不再继续开发)后,心里哇凉哇凉的。
本来我也不知道的,但是在偶尔看discuz的uchome时,发现了这个投票,投票地址为:http://u.discuz.net/home/space-1293758-do-poll-pid-2017.html,内容大致如下:
XML/HTML代码
- RT,大家都知道,SNS即将过去.曾经我们离开过,去年我们团队又回来了,但是我们发现现在的网络形式已经不同了。因此我们不得不再次将 THINKSNS项目再次停止开发,将精力转向微博,细心的朋友会发现我们已经在开发微博了,大家可以看77661.CN。目前进行到V0.2版本,并且此版将在下周一前提供下载。新版演示可以参考Couxing.com
看到这个投票,心里能不哇凉哇凉吗?看来以后更加不敢用这些个人作品了。除非是以公司运作的、或者开源但功能完整,BUG不多的。
因为相对于thinksns来说,我投入的精力和修改BUG也花了不少精力,当初thinksns说改用thinkphp2.0开发的时候,本来还想着激动一下,结果,干脆说不开发了。唉。。现在的百思家网站的用户中心就是采用了这个thinkSNS,改动了很多功能,不再一一列出,主要还是由于是商业网站不太适合改动,我仅说一点小小的吧,那就是博客的分类与相册的分类整合(而且还是用的另外的表,并非他原先的表结构)。
想来想去,最多到6月份左右,我想我还是会回到UCH上面吧?基于几个原因:
- 官方不再开发,而小BUG太多
- 冗余代码太多,无法细细清除
- theme更换的时候,必须要cleancache,否则无效(因此,在任何情况下,也只能拥有一套皮肤)
- 原始模版写的有点糟糕,可能是赶时间写的。。。改一个小地方,都要同时改4、5个模版
Tags: thinksns, thinkphp
PHP | 评论:4
| 阅读:33454
Submitted by gouki on 2010, March 10, 11:21 AM
浪驰短信是一家短信应用的提供商,提供了一些WEB调用的接口,为了让短信能够加到队列里,我用PHP重新实现了一遍(其实是因为他们没有提供WEB查看的页面,否则还真不需要实现)
注意事项:浪驰的接口必须要在同一个进程里发送和接收短信。否则会失败的。为此我写了三次接口类
第一次采用了snoopy,因为他们建议使用POST发送数据,所以我偷懒就用了snoopy,但只能获取得activeId,却无法进行下一步操作
第二次我直接采用file_get_contents,我没有用Stream流来POST数据,而是用了GET方式(GET方式也支持的),但于第一次一样,只能获取activeId,无法进行下一步操作。
然后我用浏览器打开相应的地址一步步的查看,发现他有一个cookie是每次种入的,于是怀疑他的ActiveID还需要配合cookie才行。于是尝试直接Setcookie,然后再发送。但发现手工种的cookie好象不行。于是
第三次,我用curl,并指定cookie文件,最后终于成功了。感谢curl,可以支持带COOKIE的数据发送。
代码不贴了,涉及公司的代码。再者,纯粹的代码也不能用。。因为我还用mysql实现了一个简单的队列,以及成功记录,错误记录。。。
好象听说目前不能接受回复了。真郁闷。。。
PHP | 评论:1
| 阅读:15920
Submitted by gouki on 2010, March 3, 9:19 AM
这是昨天看到的一篇文章,看完后,我针对服务器等做了一下测试,确实有影响。毕竟open_basedir在每一次require,include以及判断文件等的时候,都要先判断是否在可执行目录内。所以。。。性能就会下降(如果是用框架的,可能性能会更差一点),如果是自己的机器,一般也可以通过设定文件目录权限,来防止这种情况发生【linux可以指定用户、用户组。windows可以设定目录的所有者(当时在win下我就最烦这个,因为需要为每个虚拟主机添加一个用户,再指定权限,然后再到目录上设定用户)】
下面就是我看到的文章的内容:
今天在做项目的时候发现 没几行语句 竟然耗费了0.04秒
十分让我吃惊.随后进行跟踪 得知就在I/O读写的时候最费时间 一个is_file竟然费了0.003秒
后来让我百思不得其解 Google也没有任何答案.
然后我又把项目放到另外一个电脑上 发现速度直线上升 从以前的0.04秒变成了0.007秒左右.
我很纳闷 难道我的本本就这么差劲不应该啊
经过我的比较 我发现了 在我机器上的这个项目的虚拟主机中 设置了open_basedir.
大家都知道 这个对于虚拟主机来说是必不可少的..
但是后来我又进行测试一遍 难道真的是这样吗
我的测试代码非常简单:
PHP代码
- $time = microtime(true);
- is_file('1.html');
- echo microtime(true) - $time;
我的弄了一个空的1.html文件 这个文件是在当前目录绝对存在的.
我新建了一个虚拟主机 然后设置了一下open_basedir.
得到的结果是0.0018570423126221左右
然后我进apache的配置文件 把open_basedir删除以后
得到的结果是5.0067901611328E-5 这个结果小到PHP中的小数点都不能表示了
(注:以上结果都是多次运行缓存后的结果 因为is_file的结果会被缓存的)
现在我终于明白了 为啥虚拟主机那些探针中 I/O的性能都那么小的原因了..
杯具啊..
--EOF--
原文来自http://www.skiyo.cn/article/Skiyo-243-1263890301.html,各位也可以测试一下。。
Tags: open_basedir
PHP | 评论:0
| 阅读:16440
Submitted by gouki on 2010, March 3, 9:11 AM
关于xss的攻击与防范,我在08年09年写过一些文章,有自己记录的,也有摘抄的。昨天我又看到一篇讲攻击的文章,记录一下,也可以与以前进行一下对 比。
本文是写给那些不拿XSS当Web应用严重漏洞的人看的。 实际上,人们可以利用XSS漏洞大捞一笔。本文是在热爱黑客技术 但从不攻击他人的网站上发表的,所以我不会对这里介绍的知识的使用方式负任何责任。
» 阅读全文
Tags: xss
PHP | 评论:0
| 阅读:17651