第一步:下载安装的文件
1. mysql:下载地址mysql-5.1.49-win32.msi;
2. apache: 下载地址httpd-2.2.16-win32-x86-openssl-0.9.8o.msi;
3. php5.3.3 下载地址php-5.3.3-win32-vc6-x86注意:一定要下载php-5.3.3-win32-vc6-x86版本
的,不要下载php-5.3.3-nts-win32-vc6-x86版本,更不要下载vc9版本的,因为他是iis服务器安装版本。
第二步:安装文件
1. 在要安装的磁盘建一个文件夹(笔者的做法是在d盘的根目录下创建一个php文件夹d:php)。
2. 安装apache服务器,安装完成后的目录结果是:d:phppache。
3. 把下载的php-5.3.3-win32-vc6-x86解压的d:php目录中,可以把文件夹的名字改短,结果d:phpphp5
4. 安装mysql数据库教程,它的安装和一般情况一样。笔者把他安装在(d:phpmysql)和php同目录。
第三步:配置php5.3.3
1. 配置php5.3.3,打开php安装目录(笔者是d:phpphp5)可以看到目录下有两个这样的文件php.ini- development和php.ini-production,第一个是开发使用的配置文件,第二个是标准的生产环境的配置。
2. 选择php.ini-development复制一份到同目录下,并改名为php.ini使用文本工具打开,查找extension_dir,可以
看到两个,选择on windows:下面的那个并去得前面的分号修改为extension_dir = "d:/php/php5/ext",读者根
据自己的目录结构配置,目的是找到和php.ini同目录下的ext文件夹中的扩展库。
3. 查找extension=php_,去掉extension=php_curl.dll、extension=php_gd2.dll、extension=php_mbstring.dll、
extension=php_mysql.dll、extension=php_mysqli.dll、extension=php_pdo_mysql.dll、extension=php_xmlrpc.dll前面
的分号。查找short_open_tag = off把它修改成short_open_tag = on,让其支持短标签。
4. 复制php5ts.dll文件到windows/system32目录下,只有php-5.3.3-win32-vc6-x86版本中才有php5ts.dll
php-5.3.3-nts-win32-vc6-x86版本是没有的。
第四步:配置apache
1. 打开apache目录下conf目录中的httpd.conf文件,查找#loadmodule,在其末尾处大概是128行的地方
添加:
loadmodule php5_module "d:/php/php5/php5apache2_2.dll"
phpinidir "d:/php/php5"
addtype application/x-httpd-php .php
addtype application/x-httpd-php .htm
addtype application/x-httpd-php .html
目录结构根据用户自己目录配置。
2. 查找directoryindex index.html 将其修改成directoryindex index.php default.php index.html index.htm default.html
default.htm
3. 查找documentroot将其修改为指向你需要放置web文件的文件夹上(笔者在d:/php目录中创建了一个
www文件夹)所以documentroot就是documentroot "d:/php/www",读者可以根据自己配置来修改。
4. 查找<directory将其修改为你自己配置的documentroot的路径(笔者是<directory "d:/php/www">)
第五步:测试php+apache+mysql是否配置成功
1. 打开mysql在mysql中创建一个新数据库和表。(笔者是userinfo数据库和users表就有id和name两个字段)
测试吗?简单就好,呵呵!!
2. 在上面创建的www文件夹中创建一个index.php文件使用editplus或者其他文本工具打开。
3. 写入:
复制代码 代码如下:
代码如下 | 复制代码 |
<? mysql_connect($db_host,$db_user,$db_pass); mysql_query("set names gb2312"); |
4.启动apache服务器,在浏览器输入http://www.111cn.net回车。
如果看到下图:表示我们大功告成了!祝贺祝贺!
我们先来分析下,有验证码发布的流程
1,显示表单
2,显示验证码(条用生成验证码的程序), 将验证码加密后放进 session 或者 cookie
3,用户提交表单
4,核对验证码无误,数据合法后 写入数据库教程完成
用户如果再发布一条,正常情况下,会再次访问表单页面,验证码图片被动 更新, session 和 cookie 也就跟着变了
但是灌水机操作 不一定非要使用表单页面,它可以直接 模拟post 向服务端程序 发送数据;这样验证码程序没有被调用,当然session和cookie存储的加密验证码就是上次的值,也就没有更新,这样以后无限次的通过post直接发送的数据 ,而不考虑验证码,验证码形同虚设!
所以,在核对验证码后 先将 session和cookie的值清空,然后做数据合法性判断,然偶入库!
这样 一个漏洞就被补上了!
代码如下 | 复制代码 |
<?php教程 if ( md5($_post['vcode']) == $_session['vcode'] ) { $_session['vcode']='';//这句非常重要 } else { exit '验证码不对!'; } //接下来的处理 ...... ?> |
生成验证码图片的程序
代码如下 | 复制代码 |
<?php session_start(); ...... $v = new authcode(); $vcode = $v->getauthcode(); $_session['vcode'] = md5($vcode ); ........ ?> |
表单页面
代码如下 | 复制代码 |
<form action="save.php" method="post"> ...... <input type="text" name="vcode" size="4" /> <img" width=100% src="vcode.php" alt="看不清请刷新页面" /> </form> |
验证码是怎样被绕过的
$days = date("y-m-d");
//方法一正则验证日期
代码如下 | 复制代码 |
$reg="/d{4}-d{2}-d{2}/"; |
//方法二用cehckdate验证
代码如下 | 复制代码 |
$k = explode('-',$days); if( checkdate($k[1],$k[2],$k[0]) ) { echo $days,'日期合法'; } else { echo '不是有效的日期'; } |
//方法三简单直观正则验证
代码如下 | 复制代码 |
if( ereg("(19|20)[0-9]{2}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$",$days)) { echo $days,'为有效日期'; } else { echo |
'无效日期';
}
/*
关于 checkdate函数
checkdate() 函数验证一个格里高里日期。
如果指定的值合法,则该函数返回 true,否则返回 false。
日期在下列情况下为合法:
month 介于且包括 1 - 12
day 的值在给定的 month 所应该具有的天数范围之内,闰年已经考虑进去了。
year 介于且包括 1 到 32767
验证格式为 月/日/年
本站原创教程,转载注明来源于www.111cn.net/phper/php.html
*/
/**
* 获取服务器当前日期时间
*/
代码如下 | 复制代码 |
function get_server_datetime() { date_default_timezone_set("asia/chongqing"); return date("y-m-d h:i:s"); } |
/**
* 获取服务器当前日期
*/
代码如下 | 复制代码 |
function get_server_date() { date_default_timezone_set("asia/chongqing"); return date("ymd"); } |
/**
* 获取服务器当前时间
*/
代码如下 | 复制代码 |
function get_time() { date_default_timezone_set("asia/chongqing"); $timeval["h"] = date("h"); //小时 $timeval["i"] = date("i"); //分钟 $timeval["s"] = date("s"); //秒 return $timeval; } |
◆ mysql数据库教程默认的编码是utf8,如果这种编码与你的php网页不一致,可能就会造成mysql乱码;
◆ mysql中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成mysql乱码;
◆ mysql创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成mysql乱码;
◆ 用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成php页面乱码;
◆ 如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造成php页面乱码;
◆ php页面字符集不正确;
◆ php连接mysql数据库语句指定的编码不正确。
注意:
很多人都怀疑mysql版本不一致会导致乱码,相信看了本说明你就不会这样认为了。
平时你在某些网站看到的文字可能有几种编码, 如你看到一个繁体字,它有可能是big5编码,也有 可能是utf-8编码的,更有可能是gb码的,没错,也就是说有简体编码的繁体字,也有繁体编码的简体字,一定要了解这一点。
如果你是做一个简体编码的网页,编码定为gb2312,如果有香港和台湾地区的访客提交繁体的信息,就可能会造成乱码,解决方法:
将网站编码设为 utf-8,这样可以兼容世界上所有字符。
如果网站已经运作了好久,已有很多旧数据,不能再更改简体中文的设定,那么建议将页面的编码设为 gbk, gbk与gb2312的区别就在于:gbk能比gb2312显示更多的字符,要显示简体码的繁体字,就只能用gbk。
使用mysql+php产生乱码的原因都了解得很清楚了,那么解决就不困难了。
mysql+php产生乱码的解决办法:
如果安装mysql的编码已不能更改,很多朋友是购买虚拟主机建立网站,无权更改mysql的安装编码,这一关我们可以跳过,因为只要后面的步聚正确,一样能解决乱码问题。
修改数据库编码,如果是数据库编码不正确,可以在phpmyadmin 执行如下命令:
sql代码
01.alter database 'test' default character set utf8 collate utf8_bin
以上命令就是将test数据库的编码设为utf8。
修改表的编码:
sql代码
01.alter table 'category' default character set utf8 collate utf8_bin
以上命令就是将一个表category的编码改为utf8。
修改字段的编码:
sql代码
01.alter table 'test' change 'dd' 'dd' varchar( 45 ) character
02.set utf8 collate utf8_bin not null
以上命令就是将test表中dd的字段编码改为utf8。
如果是这种情况容易解决,只需检查下页面,修改源文件的charset即可。
这种情况也是修改页面charset即可。
在连接数据库的语句中。
sql代码
01.mysql_connect('localhost','user','password');
02.mysql_select_db('my_db');
03.mysql_query("set names utf8;"); //select 数据库之后加多这一句
为了避免php页面乱码的发生,php页面开始第一句
php代码
01.header("content-type:text/html; charset=utf-8"); //
强行指定页面的编码,以避免乱码
注意:照以上方法修改以后只能保证你新插入的数据不会乱码,举个例:如果你用户已提交的数据是big5,你却想通过以上方法改为可以在gb2312的网页正确显示是不可能的, 这种文字内码的变换只能通过另写程序来解决。