131个字符的php framework

friendfeed上看到这个链接 —— The 140 Characters Webapp Challenge!,这个比赛要求用140个字符的代码造就一个web应用。

里头有36个程序可供投票,基本上全是脚本语言大杂烩:php,perl,ruby,javascript。实现的应用也是五花八门,有相册,类twitter,小游戏,甚至还有php代码框架?摘录如下:

CODE:
  1. require __DIR__.'/c.php';
  2. if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; }))
  3.         throw new Exception('Error');
  4. $c();

这段代码利用了php5.3的一些新特性:

  • __DIR__
  • Anonymous functions
  • ?:运算符

代码只有131个字符,由于代码极为简陋,安全性也是没得保障的,只能算一个程序的统一入口罢了。

如果用php 5.2来写这段代码,大概就是:

CODE:
  1. require dirname(__FILE__).'/c.php';
  2. if (!is_callable($c = @$_GET['c'] ? $_GET['c'] : create_function('', "echo 'Woah!';")))
  3.         throw new Exception('Error');
  4. $c();

如果要让这段代码变得实用点,可以在$c前面加上一个前缀,这样安全性会有进一步提升,代码也会相应的增加若干字节。

作者: Volcano 发表于March 10, 2009 at 2:40 pm

版权信息: 可以任意转载, 转载时请务必以超链接形式标明文章原始出处作者信息及此声明

Tags: ,

5 条评论 »

  1. qinyf 于 2009-03-10 @ 15:23:03 留言

    * __DIR__
    * Anonymous functions
    * :?运算符

    —————-
    第三个的问号和冒号好像写反了?

  2. Volcano 于 2009-03-10 @ 15:39:14 留言

    笔误,已经更正

  3. 深空 于 2009-08-08 @ 02:01:11 留言

    我没看出哪里有安全性问题?

  4. Volcano 于 2009-08-08 @ 20:56:54 留言

    比如你有个不希望被人调用的方法method_danger,如果没做任何控制的话,那么就很容易调用

    ?c=method_danger

  5. 深空 于 2009-08-22 @ 15:19:20 留言

    原来如此,好久没用这种模式写代码了,都是过程化从头写到尾,赫赫,有时候基本都当脚本使了。
    有空的话能加下Q聊聊吗?1382922

RSS 为此帖反馈评论

留条评论