最近在测试建行的一个接口,在本地(PHPStudy2016+PHP5.4)测试好后,传到线上服务器,发现一片空白。
后来,一路排查,找到问题所在:
function des_encrypt($data,$deskey){
$blocksize = mcrypt_get_block_size(MCRYPT_DES,MCRYPT_MODE_ECB);
$pad = $blocksize - (strlen($data) % $blocksize);
$data1 = $data. str_repeat(chr($pad),$pad);
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_DES,MCRYPT_MODE_ECB),MCRYPT_RAND); //初始化向量
@$data_encrypt = mcrypt_encrypt(MCRYPT_DES,$deskey,$data1,MCRYPT_MODE_ECB);//加密函数
$datastr = bin2hex($data_encrypt);
return $datastr;
}
到这一步,发现了一堆的常量,其中出现了MCRYPT,这不就是php的一个扩展嘛?于是赶紧phpinfo,对比本地和线上,发现本地是有mcrypt扩展的,线上的没有,于是赶紧给线上的安装了mcrypt扩展( 我记得之前是装有的啊,之前用nginx,最近改用了apache,看见程序跑起来了也没细看,也不太确定是不是换apache后一直没有开mcrypt扩展...)
#yum install libmcrypt libmcrypt-devel mcrypt mhash php-mcrypt
然后再看,mcrypt出来了。程序恢复正常了。
从这里可以知道一件事,不懂测试的运维不是好的PHP程序猿