存档

‘PHP’ 分类的存档

收集:php-mcrypt加密模块的用法

2010年12月7日 无风的飘逸 1 条评论

PHP程序员们在编写代码程序时,除了要保证代码的高性能之外,还有一点是非常重要的,那就是程序的安全性保障。PHP除了自带的几种加密函数外,还有功能更全面的PHP加密扩展库McryptMhash

其中,Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以密文还原。PHP加密扩展库Mcrypt的算法和加密模式

Mcrypt库支持20多种加密算法和8种加密模式,具体可以通过函数mcrypt_list_algorithms()和mcrypt_list_modes()来显示,结果如下:

Mcrypt 支持的算法有:cast-128 gost rijndael-128 twofish arcfour cast-256 loki97 rijndael-192 saferplus wake blowfish-compat des rijndael-256 serpent xtea blowfish enigma rc2 tripledes

Mcrypt支持的加密模式有:cbc cfb ctr ecb ncfb nofb ofb stream

这些算法和模式在应用中要以常量来表示,写的时候加上前缀MCRYPT_和MCRYPT_来表示,如下面Mcrypt应用的例子:

DES算法表示为MCRYPT_DES;
ECB模式表示为MCRYPT_MODE_ECB;

PHP加密扩展库Mcrypt应用

先看一个例子,了解Mcrypt的工作流程,再来看看部分流程使用的函数:

  1. <?php
  2. $str = "我的名字是?一般人我不告诉他!";
  3. //加密内容
  4. $key = "key:111";
  5. //密钥
  6. $cipher = MCRYPT_DES;
  7. //密码类型
  8. $modes = MCRYPT_MODE_ECB;
  9. //密码模式
  10. $iv = mcrypt_create_iv(mcrypt_get_iv_size ($cipher,$modes),MCRYPT_RAND);//初始化向量
  11. echo "加密明文:".$str."<p>";
  12. $str_encrypt = mcrypt_encrypt($cipher, $key,$str,$modes,$iv);
  13. //加密函数
  14. echo "加密密文:".$str_encrypt." <p>";
  15. $str_decrypt = mcrypt_decrypt($cipher, $key,$str_encrypt,$modes,$iv);
  16. //解密函数
  17. echo "还原:".$str_decrypt;
  18. ?>

运行结果:

加密明文:我的名字是?一般人我不告诉他!
加密密文: 锍盌?]鸴?q攦軄L 笑 郺葄"簻 黙
还原:我的名字是?一般人我不告诉他!

<1> 由例子中可看到,使用PHP加密扩展库Mcrypt对数据加密和解密之前,首先创建了一个初始化向量,简称为iv。由 $iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$modes),MCRYPT_RAND);可见创建初始化 向 量需要两个参数:size指定了iv的大小;source为iv的源,其中值MCRYPT_RAND为系统随机数。

<2>函数mcrypt_get_iv_size($cipher,$modes)返回初始化向量大小,参数cipher和mode分别指算法和加 密模式。

<3> 加密函数$str_encrypt = mcrypt_encrypt($cipher,$key,$str,$modes,$iv); 该函数的5个参数分 别如下:cipher——加密算法、key——密钥、data(str)——需要加密的数据、mode——算法模式、 iv——初始化向量

<4>解密函数 mcrypt_decrypt($cipher,$key,$str_encrypt,$modes,$iv); 该函数和加密函数的参数几乎 一样,唯一不同的是data,也就是说data为需要解密的数据$str_encrypt,而不是原始数据$str。

注:加密和解密函数中的参数cipher、key和mode必须一一对应,否则数据不能被还原。

安装
此安装主要针对Linux系统

首先要下载三个软件,分别是

libmcrypt-2.5.8.tar.gz

下载地址:http://sourceforge.net/project/showfiles.php?group_id=87941&package_id=91774&release_id=487459

mhash-0.9.9.tar.gz

下载地址:http://sourceforge.net/project/showfiles.php?group_id=4286&package_id=4300&release_id=645636

mcrypt-2.6.8.tar.gz

下载地址:http://sourceforge.net/project/showfiles.php?group_id=87941&package_id=91948&release_id=642101

【几篇文章和在一起的,下面特别重视libmcrypt,但是我发现安装mcrypt时候需要解决对libmcrypt还有mhash的依赖,这些好解决,不行yum一下就可以了】

# tar -xvf libmcrypt-X.X.X.tar
# cd libmcrypt-X.X.X
# ./configure

现在你应该已经把libmcrypt作为一个共享组件了(但不是一个PHP的共享组件)。运行命令:

# ldconfig

它将使得共享对象可以在C/C++开发中被使用。下面把mcrypt动态组件编译到PHP中。首先,你需要PHP-devel 包中包含的 'phpize‘ 命令。

当你当前运行的PHP中已经有了 PHP-devel 后,输入:

# cd ext/mcrypt
# phpize
# aclocal
# ./configure
# make clean
# make
# make install

现在php的安装目录下面应该有了mcrypt.so 的文件,在 /etc/php.ini 添加:

extension=mcrypt.so

然后重启一下apache,这样我们就已经将mcrypt功能安装成功了。

特别注意:

1、phpize需在解压后的源码包下执行,执行后生成configure脚本

2、运行./configure时,如果提示

configure: error: Cannot find php-config. Please use --with-php-config=PATH
请使用:

./configure --with-php-config=/php-install-path/bin/php-config #而不是使用php.ini

Share
分类: PHP 标签: ,

解决phpmyadmin报错误Wrong permissions on configuration file

2010年12月6日 无风的飘逸 没有评论

phpmyadmin报告错误:

Wrong permissions on configuration file, should not be world writable!

这个是因为phpmyadmin基于安全性考虑,不允许配置文件为任意可写状态(777)。

在shell下执行

$chmod 755 -R phpmyadmin

其中phpmyadmin为phpmyadmin所在文件夹

Share
分类: PHP 标签:

Email Error: SMTP Error: Could not connect to SMTP host.

2010年11月24日 无风的飘逸 没有评论

zen cart常见错误之 email error:

错误提示:Email Error: SMTP Error: Could not connect to SMTP host.

一般在客户注册的时候,或者客户使用contact us联系我们的时候,此错误影响下单。

错误等级:五星

如果不及时修改,就算网站排名再好,也是没有单来的。

解决办法:

1、检查后台configuration-> e-mail, 看邮箱的配置是否正确。主要就是密码,邮件服务器,及发送的方式。常见的邮件发送发式有php, smtp, smtpauth;

2、 为了防止下次邮箱不能用的时候不报这个错误导致客户不能继续下单,我们应该开启邮件的友好提示。

即如果是英文版的后台为"email friendly error"如果是中文版则是“电子邮件出错信息", 把它设置为true;
正常情况下(我用的是1.3.8a)它在后台邮件设置的第六项;

Share

zen cart的PP跳转终于测试成功!

2010年11月17日 无风的飘逸 3 条评论

正在用某个版本的PayPal跳转,发现后台一直没有生成订单。

经过两天的苦战(我有点菜,一开始就压根没有想到用最快的办法测试),终于把错误逮出来了!

原来zen cart的ipn有对网站后台设置的pp邮箱地址和实际收款人的地址进行核对,如果正确无误,后台就会生成订单

Share
分类: zen-cart 标签:

LINUX环境下PHP后期安装DOM模块

2010年11月5日 无风的飘逸 1 条评论

最近在安装某zen cart插件的时候,提示需要DOM模块的支持。

本来DOM模块在编译PHP的时候,默认被加上的,但是我用的是webmin整合的php居然给我禁用掉了。得补上。

于是网上找了教材,解决了。

解决方法很简单,只有一行命令:

yum -y install php-dom

关联的问题:

1. webmin如何为PHP增加DOM模块;

2. virtualmin 如何为PHP增加DOM模块;

3. PHP后期安装DOM模块;

4. zen cart网站添加DOM模块支持

Share
分类: Linux 技术, PHP, zen-cart 标签:

如果可以用代码示爱……

2010年8月4日 无风的飘逸 8 条评论

如果可以用代码求爱:
1、
do{
echo "i love you!";
}while( $my_live_end !== true);

2、
love_you:
$life = true;
if ($life == true){
echo "i love you!";
}else{
echo "i love you!";
}
goto love_you;

3、
for(;;){
echo "i love you!";
}

4、
while( $my_live_end !== true){
echo "i love you!";
}

5、
switch($me){
case 1;
case 2;
case 3;
case 4;
case 5;
case 6;
case 7;
case 8;
case 9;
case 10;
default: echo "i love you!";break;
}

(PHP常见的几种死循环)

Share
分类: PHP, 情感社区 标签:

[zen cart] 用户无法登录提示There was a security error when trying to login

2010年6月12日 无风的飘逸 4 条评论

这几天修改zen cart测试了很多东西,结果发现我的网站坏了,具体情况是这样的:

当我想注册一个新用户的时候,发现表单提交之后重新回到注册页面,而当我想登录的时候,表单提交之后则提示There was a security error when trying to login.

网上查了,这个主要原因是一个叫做securekey 的较验码较验失败,但是我装的都是最新版的zen cart。不可能做有这个问题(经过测试,确实不是这个原因)。

后来发现是我设置的重写出了问题,

我写的重写是这样的:

RewriteRule ^index.php$ / [R=301, L]

去掉就可以了

Share
分类: zen-cart 标签:

php_admin_value 与 php_value 的区别

2010年4月30日 无风的飘逸 3 条评论

问:php_admin_value(php_admin_flag)和php_value(php_flag)有何区别?

在“技巧与提示”中有一条是关于“为不同的虚拟主机配置不同的php选项”的,那么php_admin_value和php_value究竟有哪些异同呢?

相同的地方是:这两个命令都是用来在Apache服务器中针对不同的虚拟主机、目录设置不同的php选项的。

不同的地方是:php_admin_value(php_admin_flag)命令只能用在apache的httpd.conf文件中,而php_value(php_flag)则是用在.htaccess文件中的。

Share
分类: PHP 标签:

详细解释PHP所有常用的环境变量

2010年4月30日 无风的飘逸 1 条评论

在PHP网站开发中,为了满足网站的需要,时常需要对PHP环境变量进行设置和应用,在虚拟主机环境下,有时我们更需要通过PHP环境变量操作函数来对PHP环境变量值进行设置。为此我们有必要对PHP环境变量先有所熟悉。今天和大家分享PHP环境变量$_SERVER和PHP系统常量的部分详细说明。

PHP环境变量主要有$GLOBALS[]、$_SERVER[]、$_GET[]、$_POST[]、$_COOKIE[]、$_FILES[]、$_ENV[]、$_REQUEST[]、$_SESSION[]。$_GET 和$_POST主要针对FORM表单提交的数据,$_COOKIE和$_SESSION主要针对客户端游览器和服务器端会话数据。$_FILES主要针对文件上传时提交的数据,$_REQUEST主要针对提交表单中所有请求数组,包括$_GET、$_POST、$_COOKIE中的所有内容,你可以通过print_r函数分别输出$_REQUEST或者$_COOKIE等进行比较。PHP环境如何搭建?

PHP环境变量$_SERVER

是一个包含服务器端相关信息的PHP全局环境变量,在PHP4.1.0之前的版本使用$HTTP_SERVER_VARS。更多信息可以参考这里。

$_SERVER['PHP_SELF'] 当前正在执行脚本的文件名,与 document root相关。在FORM表单中,如执行文件是本身,你可以在ACTION中使用$_SERVER['PHP_SELF'],好处是当执行文件名有变动时可以不去频繁替换ACTION中的文件名。

$_SERVER['SERVER_NAME'] 当前运行的PHP程序所在服务器主机的名称。

$_SERVER['REQUEST_METHOD'] 访问页面时的请求方法,即GET、HEAD、POST、PUT。

$_SERVER['DOCUMENT_ROOT'] 当前运行的PHP程序所在的文档根目录。也就是PHP.INI文件中的定义。

$_SERVER['HTTP_REFERER'] 链接到当前页面的前一页面的URL地址。在页面跳转功能中非常有用。

$_SERVER['REMOTE_ADDR'] 正在浏览当前页面访问者的IP地址。

$_SERVER['REMOTE_HOST'] 正在浏览当前页面用户的主机名。

$_SERVER['REMOTE_PORT'] 正在游览的用户连接到服务器时所使用的端口。

$_SERVER['SCRIPT_FILENAME'] 当前执行脚本的绝对路径名。

$_SERVER['SERVER_PORT'] 服务器所使用的端口

$_SERVER['SCRIPT_NAME'] 包含当前脚本的路径。这在页面需要指向自己时非常有用。

$_SERVER['REQUEST_URI'] 访问此页面所需的URI。如“/index.html”。

$_SERVER['PHP_AUTH_USER'] 应用在HTTP用户登录认证功能中,这个变量是用户输入的用户名。

$_SERVER['PHP_AUTH_PW'] 应用在HTTP用户登录认证功能中,这个变量便是用户输入的密码。

$_SERVER['AUTH_TYPE'] 应用在HTTP用户登录认证功能中,这个变量便是认证的类型。

注:上述提到的这些PHP全局环境变量,在php.ini中的 register_globals设置为on时,这些变量在所有PHP程序脚本中都可用,也就是$_SERVER数组被分离了。当然为了安全考虑,还是不要将register_globals打开为好。

PHP系统常量

__FILE__ 当前PHP程序脚本的绝对路径及文件名称

__LINE__ 存储该常量所在的行号

__FUNCTION__ 存储该常量所在的函数名称

__CLASS__ 存储该常量所在的类的名称

PHP_VERSION 存储当前PHP的版本号,也可以通过PHPVERSION()函数获取。

PHP_OS 存储当前服务器的操作系统

Share
分类: PHP 标签:

安装 news and archive manager可能导致首页无法显示

2010年4月29日 无风的飘逸 1 条评论

清水最新观察显示,安装 news and archive manager可能导致首页无法显示。

请广大zen cart使用者朋友们注意啦,安装news and archive manager这个插件时,一定要特别注意备份原网站。

如果你想减少麻烦,请备份includes\templates\template_default\templates\tpl_index_default.php 以待观察

Share
分类: zen-cart 标签: