文章关键字 ‘PHP’

用C语言实现PHP的base64_encode函数

2010年12月19日,星期日

最近写的程序要用到base64_encode,网上一搜“C语言 base64”出来一堆代码,但是我向来是不惮以最坏的恶意来推测这些代码的。于是看了一下PHP源码,base64_encode函数定义在ext\standard\base64.c文件中。我把它改写了一下,需要注意内存是动态分配的,使用完之后记得free掉,否则会造成内存泄露。

(更多…)

PHP函数源码中的return_value变量

2010年12月17日,星期五

最近在看PHP的C源码,经常发现在函数定义中莫名其妙地出现一个没有任何声明的return_value变量,Google了一下才知道,这个变量是通过宏展开的。

(更多…)

注意PHP的下一个千年虫:Y2K38

2010年12月1日,星期三

我不想危言耸听,先在你的环境下试试如下代码的运行结果吧:

<?php
$date = '2040-02-01';
$format = 'l d F Y H:i';
$mydate1 = strtotime($date);
echo '<p>', date($format, $mydate1), '</p>';
?> 

如果一切正常的话,你会看到如下输出"Wednesday 1 February 2040 00:00″。如果你看到了一个60年代到70年代之间的日期,那说明你的PHP应用存在一个叫Y2K38的安全漏洞!

(更多…)

PHP调用COM组件

2010年11月25日,星期四

今天有人问PHP怎么丢出异步GET请求。我怎么感觉这个问题那么别扭,为什么要用PHP异步GET?直接用JavaScript不就行了。

我的第一个想到的是msxml2.xmlhttp,毕竟JavaScript用的就是这个。如果是Windows系统,直接调用这个COM就行了,于是查了一下PHP手册中有关COM组件的部分。

<?php
$http = new COM("msxml2.xmlhttp");
$http->open("GET","https://demon.tw",true);
$http->send();
?>

查手册的时候还无意中看到PHP可以调用.NET Framework中的类。

<?php
$stack = new DOTNET("mscorlib", "System.Collections.Stack");
$stack->Push(".Net");
$stack->Push("Hello ");
echo $stack->Pop() . $stack->Pop();
?> 

PHP果然犀利。

IIS7下以FastCGI模式运行PHP

2010年11月22日,星期一

没有在IIS下玩过PHP,传说IIS7+PHP+FastCGI很牛逼,不知道是不是真的。

我的是Windows 7系统,首先从控制面板要添加IIS:

iis

然后从PHP官网下载PHP压缩包,解压到C:\PHP文件夹,将php.ini-recommended重命名为php.ini,用编辑器打开php.ini,做如下修改:

  • fastcgi.impersonate = 1
  • cgi.fix_pathinfo=1
  • cgi.force_redirect = 0

(更多…)