分享几个PHP和Javascript计算农历的源码

有一段时间对输出农历时间很感兴趣,所以找了两个 PHP 的源码和 一个 Javascript 源码,这里记录一下使用方法。 下载地址: lunar-src.zip
PS: 农历的计算很复杂,LD算是头晕了,资料: 和荣笔记 - 中国农历二百年算法及年历

第一个文件: function-lunar.php
版权信息:

isaac 修改万年历而得 Aug 2nd 2005
作者联系方式不祥?

使用方法:

  1. <script src="function-lunar.js" type="text/javascript"></script>
  2. <script type="text/javascript">
  3. var Today = new Date();
  4. var tY = Today.getFullYear();
  5. var tM = Today.getMonth();
  6. var tD = Today.getDate();
  7. drawCld(tY,tM,tD); //可传入任意日期,如2007.6.24为 drawCld(2007,5,24);
  8. //输出: 戊子年 鼠 十月廿一
  9. </script>

阅读完整的文章… »

LD on 11月 19th, 2008 | File Under Study notes | 8 Comments -

关于PHP的short_tag_open

比较老的 PHP 程序,常常使用简短风格,为了使这种代码可以被解释,必须开启 short_open_tag选项; 如果不改则会出现如下错误:

Warning: Unexpected character in input: ‘\’ (ASCII=92) state=1 in /home/http/…/index.php on line 485
Warning: Unexpected character in input: ‘\’ (ASCII=92) state=1 in /home/http/…/index.php on line 485
Parse error: syntax error, unexpected T_STRING in /home/http/…/index.php on line 485

个人不喜欢把 short_open_tag 改成 On ,分析一下只要把代码中的 <? 改成 <?php <?= 改成 <?php echo 。 一行Shell把它替换一下就OK:

阅读完整的文章… »

LD on 10月 26th, 2008 | File Under PHP | 7 Comments -

php中的eval函数

  1. eval("?>".'< ?php  echo "<br />吃饱了撑的!<br />";   ?>'."< ?php");
  2. /*Output:
  3. <br />吃饱了撑的!<br />
  4. */

上面这行代码确实是吃饱了撑的,把原来echo输出的信息交给eval处理再输出。 但仔细一看就会发现其中的蹊跷: 我们交给eval函数的是整句php代码(包括 <?php ?>)。

eval就如其名,让人望而生畏,同时他的强大又不可否认。 使用好eval可以使原本复杂的问题简单化,反之难上加难! 不多唠叨,看代码:

第一个测试

  1. $str = "< ?php echo '我是\$str'; ?>\t加点调料?!@~<br />";
  2. echo $str;
  3. /*Output:
  4. < ?php echo '我是$str'; ?>    加点调料?!@~<br />
  5.   把php代码原原本本的输出了
  6. */
  7. eval(" ?>".$str."< ?php ");
  8. /*Output:
  9. 我是$str    加点调料?!@~<br />
  10. */

其中有两处输出,echo部分直接解析 $str 字符串, 而eval则再次解析echo输出的内容中的php代码。 所以可以写一个网页加上 eval($_POST[cmd]); 那么你不就可以执行输入的php代码了吗?

下面来看看两个手册上的例子: 阅读完整的文章… »

LD on 10月 9th, 2008 | File Under PHP | No Comments -

使用可阅读的SVN日志

基于一些原因,我们需要查看apache中关于subversion的日志,但是apache的日志很混乱(基本的请求信息,不利于阅读)。“mod_dav_svn”模块的“operational logging”属性可以解决这一问题。

# 修改apache配置文件
user@~$ sudo vim /etc/httpd/conf/httpd.conf

# </Location> 在这段之后加上一行 CustomLog
<Location /svn/>
    DAV svn
    . . .
</Location>
CustomLog /var/log/httpd/svn_log “%t %u %{SVN-ACTION}e” env=SVN-ACTION
# 你也可以修改成自己的日志路径(%t - 时间, %u - 用户名, +svn动作)

# 重启 apache 即可
user@~$ sudo /etc/rc.d/httpd restart

修改后就能看到比较可读的日志了,如下:

阅读完整的文章… »

LD on 10月 6th, 2008 | File Under 版本控制 | 2 Comments -

Head First 设计模式: 第13课 与设计模式相处

“每一个模式描述了一个在我们周围不断重复发生的问题以及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。” ── 建筑家 Christopher Alexander

模式 是在某情境 (context) 下,针对某问题的某种解决方案。

  • 情境 就是应用某个模式的情况。这应该是会不断出现的情况。
    [ 我要如何准时上班? ]
  • 问题 就是你想在某情境下达到的目标,但也可以是某情境下的约束。
    [ 我将钥匙锁在车里了。]
  • 解决方案 就是你所追求的: 一个通用的设计,用来解决约束,达到目标。
    [ 打破窗户,进入车内,启动引擎,然后开车上班。]
  • 成本 解决方案所花费的才力 (财力)。
    [ 窗户的价值。]

模式是解决问题的方法,用于不用无所谓; 但当我们应用模式时,就应该考虑怎么才能更好的解决问题 (反之,去除模式)。

阅读完整的文章… »

LD on 09月 22nd, 2008 | File Under 设计模式 | 1 Comment -