‘PHP’ 分类的存档
首先要明确3des加密的模式,是ecb还是cbc还是其他。 以下是php代码: <?php /** * @author Connor caokang@foxmail.com * @abstract 3des */ class DES { private $key = ‘DE2JCADLNF85E890H887Wa6′; //只有CBC模式下需要iv,其他模式下iv会被忽略 //private $iv = ‘B500290096000A007600E3005700C4003800A40018008500′; private $iv = ’12345678′; /** * 加密 */ public function encrypt($value) { //先确定加密模式,此处以ECB为例 $td = mcrypt_module_open ( MCRYPT_3DES,”, MCRYPT_MODE_ECB,”); //$iv = pack ( ‘H16′, $this->iv ); $value = $this->PaddingPKCS7 [...]
注:[5.4+不再支持vc6,只有vc9版本]见:http://news.php.net/php.internals.win/615 一、如何选择PHP的VC9版本和VC6版本 VC6版本是使用Visual Studio 6编译器编译的,如果你的PHP是用Apache来架设的,那你就选择VC6版本。 VC9版本是使用Visual Studio 2008编译器编译的,如果你的PHP是用IIS来架设的,那你就选择VC9版本。 二、如何选择PHP5.3的Thread Safe和Non Thread Safe版本 Windows版的PHP从版本5.2.1开始有Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分,这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍。 从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用多进 程的工作方式不同的是Windows系统是采用多线程的工作方式。如果在IIS下以CGI方式运行PHP会非常慢,这是由于CGI模式是建立在多进程的基 础之上的,而非多线程。一般我们会把PHP配置成以ISAPI的方式来运行,ISAPI是多线程的方式,这样就快多了。但存在一个问题,很多常用的PHP 扩展是以Linux/Unix的多进程思想来开发的,这些扩展在ISAPI的方式运行时就会出错搞垮IIS。因此在IIS下CGI模式才是 PHP运行的最安全方式,但CGI模式对于每个HTTP请求都需要重新加载和卸载整个PHP环境,其消耗是巨大的。 为了兼顾IIS下PHP的效率和安全,微软给出了FastCGI的解决方案。FastCGI可以让PHP的进程重复利用而不是每一个新的请求就重开一个 进程。同时FastCGI也可以允许几个进程同时执行。这样既解决了CGI进程模式消耗太大的问题,又利用上了CGI进程模式不存在线程安全问题的优 势。 先从字面意思上理解,Thread Safe是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。Non Thread Safe是非线程安全,在执行时不进行线程(Thread)安全检查。 因此,如果是使用ISAPI的方式来运行PHP就必须用Thread Safe(线程安全)的版本;而用FastCGI模式运行PHP的话就没有必要用线程安全检查了,用None Thread Safe(NTS,非线程安全)的版本能够更好的提高效率。 再来看PHP的两种执行方式:ISAPI和FastCGI。 ISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行PHP,建议选择Thread Safe版本; 而FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择Non Thread Safe版本。
配置php soap服务时,如果你确定引用的wsdl正确,但又提示错误,错误信息如下: 错误提示:SoapFault exception: [SOAP-ENV:Client] looks like we got no XML document 这很可能是在你的服务端有多余的空格输出,尝试删除多余的空格,或者去掉服务端代码中结尾处的 ‘?>’ ================================================ SoapFault exception: [SOAP-ENV:Client] looks like we got no XML document This error can have to reasons: 1: Your server script has some hidden output like spaces before or afher <?php … ?> or echoing some text 2: You have a [...]
在一个已经编译完成的php环境中添加memcac扩展,通常我们会用phpize命令,该命令在php编译后的环境中存在。 下载php的memcache对应的安装文件:http://pecl.php.net/package/memcache,解压后进入安装包。 依次执行: phpize ./configure make && make install 1.完成后会给出一个路径,像:/usr/local/lib/php/extensions/no-debug-non-zts-20060613/这样的,记下提示给你的这个地址。 2.修改php.ini文件,添加: extension=memcache.so ,并且修改extension_dir为刚才记下的地址。 3.重启apache,查看phpinfo,此时memcache扩展就已经成功添加。
类unix系统中编译php支持mcrypt扩展,常规的方法是下载安装包,先安装完libmcrypt,再编译php的时候加上–with- mcrypt=/path-to-libmcrypt/,但这种安装方式在solaris下会出现安装完phpinfo中有mcrypt选项,但是在 php中却无法使用的现象。 初步认为是在solaris中mcrypt扩展无法自动完全加载和配置。随意在编译libmcrypt包时需要额外指定一些配置: ./configure –enable-dynamic-loading –with-included-algos=”rijndael-128 arcfour stream cbc cfb” make make install php 编译参数加上 –with-mcrypt=/usr/local/lib –disable-posix-threads –with-included-algos是指定mcrypt要支持的什么模式,示例中的配置便可以支持php的des和3des加密。
<?php /** * @author Connor caokang@rocketmail.com * @abstract 3des */ class DES { private $key = ‘B5005F000800AB005500F700A1004A00ED0096004000E300′; private $iv = ‘B500290096000A007600E3005700C4003800A40018008500′; /** *加密 */ public function encrypt($value) { $td = mcrypt_module_open ( MCRYPT_3DES, ”, MCRYPT_MODE_CBC, ” ); $iv = pack ( ‘H16′, $this->iv ); $value = $this->PaddingPKCS7 ( $value ); //填充 $key = [...]
