关于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 -

PHP5中的autoload方法

PHP5中有一方法: __autoload() , 简单的说就是类的自动加载;

当你尝试使用一个PHP没有组织到的类, 它会寻找一个__autoload的全局函数. 如果存在这个函数,PHP会用一个参数来调用它,参数即类的名称。

那么简单测试一下。

阅读完整的文章… »

LD on 08月 26th, 2008 | File Under PHP | No Comments -

记两条去除注释的正则表达式

花了一天时间学习正则表达式,虽然以前学过一点,但“书到用时方嫌少”,囊中羞涩也是无奈。

1.这条还是好理解的,自己写时忘了加’\'这个转义字符,于是发狠:以后但凡是字符都加个’\',就不信你丫的!

\/\*(\s|.)*?\*\/

2.网上抄来的,能力不足,看不懂。经测试两条都能删除多行’/* */’注释,用之前还是自己再测试一次的好。

/\/\/[^\n]*|\/\*([^\*^\/]*|[\*^\/*]*|[^\**\/]*)*\*\//

阅读完整的文章… »

LD on 08月 24th, 2008 | File Under PHP | 3 Comments -