最近写的程序要用到base64_encode,网上一搜“C语言 base64”出来一堆代码,但是我向来是不惮以最坏的恶意来推测这些代码的。于是看了一下PHP源码,base64_encode函数定义在ext\standard\base64.c文件中。我把它改写了一下,需要注意内存是动态分配的,使用完之后记得free掉,否则会造成内存泄露。
(更多…)文章关键字 ‘PHP’
用C语言实现PHP的base64_encode函数
2010年12月19日,星期日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:
然后从PHP官网下载PHP压缩包,解压到C:\PHP文件夹,将php.ini-recommended重命名为php.ini,用编辑器打开php.ini,做如下修改:
- fastcgi.impersonate = 1
- cgi.fix_pathinfo=1
- cgi.force_redirect = 0