第一天: 下面简单介绍一下php的语法。 1、嵌入方法: 类asp的%,php可以是?php或者是?,结束符号是?,当然您也可以自己指定。 2、引用文件: 引用文件的方法有两种:require 及 include。 require 的使用方法如 require(myrequirefile.php); 。这个函数通常
第一天:
下面简单介绍一下php的语法。
1、嵌入方法:
类似asp的,当然您也可以自己指定。
2、引用文件:
引用文件的方法有两种:require 及 include。
require 的使用方法如 require(myrequirefile.php); 。这个函数通常放在 php 程序的最前面,php 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 php 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。
include 使用方法如 include(myincludefile.php); 。这个函数一般是放在流程控制的处理部分中。php 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。
3、注释方法:
4、变量类型:
$mystring = 我是字符串 ;
$newline = 换行了\n ;
$int1 = 38 ;
$float1 = 1.732 ;
$float2 = 1.4e+2 ;
$myarray1 = array( 子 , 丑 , 寅 , 卯 );
这里引出两个问题,首先php变量以$开头,第二php语句以;结尾,可能asp程序员会不适应。这两个遗漏也是程序上大多错误所在。
5、运算符号:
数学运算: 符号 意义
+ 加法运算
- 减法运算
* 乘法运算
/ 除法运算
% 取余数
++ 累加
-- 递减
字符串运算:
运算符号只有一个,就是英文的句号。它可以将字符串连接起来,变成合并的新字符串。类似asp中的&
$a = php 4 ;
$b = 功能强大 ;
echo $a.$b;
?>
这里也引出两个问题,首先php中输出语句是echo,第二类似asp中的,php中也可以=变量? >。
逻辑运算:
符号 意义
小于
> 大于
小于或等于
>= 大于或等于
== 等于
!= 不等于
&& 而且 (and)
and 而且 (and)
|| 或者 (or)
or 或者 (or)
xor 异或 (xor)
! 不 (not)
今天就说到这里,明天说一下流程控制。
第二天
学习目的:掌握php的流程控制
1、if..else 循环有三种结构
第一种是只有用到 if 条件,当作单纯的判断。解释成 若发生了某事则怎样处理。语法如下:
if (expr) { statement }
其中的 expr 为判断的条件,通常都是用逻辑运算符号当判断的条件。而 statement 为符合条件的执行部分程序,若程序只有一行,可以省略大括号 {}。
范例:本例省略大括号。
这里特别注意的是,判断是否相等是==而不是=,asp程序员可能常犯这个错误,= 是赋值。
范例:本例的执行部分有三行,不可省略大括号。
第两种是除了 if 之外,加上了 else 的条件,可解释成 若发生了某事则怎样处理,否则该如何解决。语法如下
if (expr) { statement1 } else { statement2 } 范例:上面的例子来修改成更完整的处理。其中的 else 由于只有一行执行的指令,因此不用加上大括号。
第三种就是递归的 if..else 循环,通常用在多种决策判断时。它将数个 if..else 拿来合并运用处理。
直接看下面的例子
$b ) {
echo a 比 b 大 ;
} elseif ( $a == $b ) {
echo a 等于 b ;
} else {
echo a 比 b 小 ;
}
?>
上例只用二层的 if..else 循环,用来比较 a 和 b 两个变量。实际要使用这种递归 if..else 循环时,请小心使用,因为太多层的循环容易使设计的逻辑出问题,或者少打了大括号等,都会造成程序出现莫名其妙的问题。
2、 for 循环就单纯只有一种,没有变化,它的语法如下
for (expr1; expr2; expr3) { statement }
其中的 expr1 为条件的初始值。expr2 为判断的条件,通常都是用逻辑运算符号 (logical operators) 当判断的条件。expr3 为执行 statement 后要执行的部份,用来改变条件,供下次的循环判断,如加一..等等。而 statement 为符合条件的执行部分程序,若程序只有一行,可以省略大括号 {}。
下例是用 for 循环写的的例子。
3、 switch 循环,通常处理复合式的条件判断,每个子条件,都是 case 指令部分。在实作上若使用许多类似的 if 指令,可以将它综合成 switch 循环。
语法如下
switch (expr) { case expr1: statement1; break; case expr2: statement2; break; default: statementn; break; }
其中的 expr 条件,通常为变量名称。而 case 后的 exprn,通常表示变量值。冒号后则为符合该条件要执行的部分。注意要用 break 跳离循环。
这里需要注意的是break;别遗漏了,default,省略是可以的。
很明显的,上述的例子用 if 循环就很麻烦了。当然在设计时,要将出现机率最大的条件放在最前面,最少出现的条件放在最后面,可以增加程序的执行效率。上例由于每天出现的机率相同,所以不用注意条件的顺序。
今天就说到这里,明天开始说数据库的使用。
第三天
php构建数据库
学习目的:学会构建数据库
在asp中,如果是access数据库你可以直接打开access来编辑mdb文件,如果是sql server你可以打开企业管理器来编辑sql server数据库,但是在php中,my sql的命令行编辑可能会令初学者感到很麻烦,不要紧,你下载一个phpmyadmin安装一下,以后建立编辑数据库可以靠它了。
下面说一下它的使用。
进入了phpmyadmin后,我们首先需要建立一个数据库,language (*) 这里选择中文简体,然后在左边的 创建一个新的数据库 这里填写数据库名字,点击创建即可。
然后在左边下拉菜单中选择那个已经创建的数据库。在下面的
在数据库 shop 中创建一个新表 :
名字 :
字段数 :
中填写表名字和大致你认为的字段数(不够或者多了都不要紧,以后可以再添加或者缺省),按执行。
然后就可以开始建立表了。
第一栏是字段的名字;第二栏选择字段类型:
我们常用的是以下几个:
1)varchar,文本类型
2)int,整数类型
3)float,浮点数类型
4)date,日期型
5)大家或许会问,自动添加的id在哪里?这个只要选择int类型,在后面的额外中选择 auto_increment 就可以了。
建立了表以后,可以在左边看到你建立的表,点击以后,你可以:
1)按右边的结构:查看修改表结构
2)按右边的浏览:查看表中的数据
3)按右边的sql:运行sql语句
4)按右边的插入:插入一行记录
5)按右边的清空:删除表中所有记录
6)按右边的删除:删除表
还有一个很重要的功能就是导入和导出,当我们本机做好了程序和数据库的时候,需要在服务器上也有一个本地镜像,如果是asp的access简单了,直接上传mdb文件即可,如果是sql server也可以连接远端服务器进行导入。那么my sql中你可以导出所有的sql语句,到了远端服务器的phpmyadmin上,创建数据库后按sql,粘帖你刚才复制下来的所有本级生成的sql语句即可。
今天就说到这里,明天继续说数据库操作。
第四天
php连接数据库
学习目的:学会php连接数据库
php简直就是一个函数库,丰富的函数使php的某些地方相当简单。建议大家down一本php的函数手册,总用的到。
我这里就简单说一下连接mysql数据库。
1、mysql_connect
打开 mysql 服务器连接。
语法: int mysql_connect(string [hostname] [:port], string [username], string [password]); 返回值: 整数
本函数建立与 mysql 服务器的连接。其中所有的参数都可省略。当使用本函数却不加任何参数时,参数 hostname 的默认值为 localhost、参数 username 的默认值为 php 执行行程的拥有者、参数 password 则为空字符串 (即没有密码)。而参数 hostname 后面可以加冒号与端口号,代表使用哪个端口与 mysql 连接。当然在使用数据库时,早点使用 mysql_close() 将连接关掉可以节省资源。
2、 mysql_select_db
选择一个数据库。
语法: int mysql_select_db(string database_name, int [link_identifier]); 返回值: 整数
本函数选择 mysql 服务器中的数据库以供之后的资料查询作业 (query) 处理。成功返回 true,失败则返回 false。
最简单的例子就是:
$conn=mysql_connect (127.0.0.1, , );
mysql_select_db(shop);
连接机my sql数据库,打开shop数据库。在实际应用中应当加强点错误判断。
今天就说到这里,明天再说一下数据库的读取。
第五天
php读取数据库
学习目的:学会php读取数据库
先看两个函数:
1、mysql_query
送出一个 query 字符串。 语法: int mysql_query(string query, int [link_identifier]); 返回值: 整数
本函数送出 query 字符串供 mysql 做相关的处理或者执行。若没有指定 link_identifier 参数,则程序会自动寻找最近打开的 id。当 query 查询字符串是 update、insert 及 delete 时,返回的可能是 true 或者 false;查询的字符串是 select 则返回新的 id 值,当返回 false 时,并不是执行成功但无返回值,而是查询的字符串有错误。
2、mysql_fetch_object 返回类资料。 语法: object mysql_fetch_object(int result, int [result_typ]); 返回值: 类
本函数用来将查询结果 result 拆到类变量中。若 result 没有资料,则返回 false 值。
看一个简单的例子:
$exec=select * from user;
$result=mysql_query($exec);
while($rs=mysql_fetch_object($result))
{
echo username:.$rs->username.
;
}
?>
当然,表user中有一个username的字段,这就类似asp中的
exec=select * from user
set rs=server.createobject(adodb.recordset)
rs.open exec,conn,1,1
do while not rs.eof
response.write username:&rs(username)&
rs.movenext
loop
%>
当然先要连接数据库,一般我们 require_once('conn.php');而conn.php里面就是上一次说的连接数据库的代码。
小小的两条命令可以完成读取数据的工作了,今天说到这里下一次说数据的添加删除修改。
第六天
php添加删除修改数据
学习目的:学会php添加删除修改数据
mysql_query($exec);
单这个语句就可以执行所有的操作了,不同的就是$exec这个sql语句
添加:$exec=insert into tablename (item1,item2) values ('.$_post['item1'].',.$_post['item1'].);
删除:$exec=delete from tablename where...;
修改:$exec=update tablename set item1='.$_post['item1'].' where ...;
说到这里就要说一下表单和php变量传递,如果表单中的一个
表单以post提交的,那么处理表单文件就可以用$_post['item1']得到变量值,同样以get提交的就是$_get['item1']
是不是很简单?但是通常$exec会有问题,因为可能您的sql语句会很长,您会遗漏.连接符,或者'来包围字符型字段。
我们可以注释mysql_query($exec);语句用echo $exec;代替来输出$exec以检查正确性。如果您还不能察觉$exec有什么错误的话,可以复制这个sql语句到phpmyadmin中执行,看看它的出错信息。还有需要注意的是,我们不要使用一些敏感的字符串作为字段名字,否则很可能会出现问题,比如说date什么的。变量的命名,字段的命名遵循一点规律有的时候对自己是一种好处,初学者并不可忽视其重要性。
今天就说到这里,大家可以down一个sql语句的参考手册,再研究研究。明天继续说session。
第七天
php中session的使用
学习目的:php中session的使用
session的作用很多,最多用的就是站点内页面间变量传递。在页面开始我们要session_start();开启session;
然后就可以使用session变量了,比如说要赋值就是:$_session['item']=item1;要得到值就是$item1=$_session['item'];,很简单吧。这里我们可能会使用到一些函数,比如说判断是不是某session变量为空,可以这么写:empty($_session['inum'])返回true or false。
下面综合一下前面所说的我们来看一个登陆程序,判断用户名密码是否正确。
登陆表单是这样:login.php
administrators login
username
password
处理文件是这样
require_once('conn.php');
session_start();
$username=$_post['username'];
$password=$_post['password'];
$exec=select * from admin where username='.$username.';
if($result=mysql_query($exec))
{
if($rs=mysql_fetch_object($result))
{
if($rs->password==$password)
{
$_session['adminname']=$username;
header(location:index.php);
}
else
{
echo ;
}
}
else
{
echo ;
}
}
else
{
echo ;
}
?>
conn.php是这样:
$conn=mysql_connect (127.0.0.1, , );
mysql_select_db(shop);
?>
由于 $_session['adminname']=$username;我们可以这样写验证是否登陆语句的文件:checkadmin.asp
session_start();
if($_session['adminname']=='')
{
echo ;
}
?>
呵呵,今天说到这里,明天说一下怎么弄一个分页。
第八天
php做分页显示
学习目的:做一个分页显示
关键就是用到了sql语句中的limit来限定显示的记录从几到几。我们需要一个记录当前页的变量$page,还需要总共的记录数$num
对于$page如果没有我们就让它=0,如果有
$execc=select count(*) from tablename ;
$resultc=mysql_query($execc);
$rsc=mysql_fetch_array($resultc);
$num=$rsc[0];
这样可以得到记录总数
ceil($num/10))如果一页10记录的话,这个就是总的页数
所以可以这么写
if(empty($_get['page']))
{
$page=0;
}
else
{
$page=$_get['page'];
if($pageif($page>=ceil($num/10))$page=ceil($num/10)-1;//因为page是从0开始的,所以要-1
}
这样$exec可以这么写 $exec=select * from tablename limit .($page*10).,10;
//一页是10记录的
最后我们需要做的就是几个连接:
firstpage
prevpage
nextpage
lastpage
这是一个大致的思路,大家可以想想怎么来优化?今天说到这里,明天说一下一些注意的问题。
第九天
php注意事项
学习目的:注意事项
因为我是先学asp的,所以再做php的时候会发现很多地方需要适应。
1、注意不要漏了分号
2、注意不要漏了变量前的$
3、使用session的时候注意不要遗漏session_start();
如果发生错误的时候,可以采用以下方法:
1、如果是sql语句出错,就注释了然后输出sql语句,注意也要注释调后续的执行sql语句
2、如果是变量为空,大多是没有传递到位,输出变量检查一下,检查一下表单的id和name
3、如果是数据库连接出错,检查是否正确打开my sql和是否遗漏了连接语句
4、注意缩进,排除括号不区配的错误
在做大网站的时候,我的思路是先构建数据库,确定每一个字段的作用,和表之间的关系。然后设计后台界面,从添加数据开始做起,因为添加是否成功可以直接到数据库里面验证,做好了添加再做显示的页面,最后才是两者的结合。一般来说后台就包括添加删除修改和显示,后台没有问题了,前台也没有什么大问题。前台还需要注意安全性和容错还有就是输出格式。
好了,今天说到这里,明天说一下如果用php上传文件和发邮件。
第十天
php上传文件和发邮件
学习目的:学会用php上传文件和发邮件
上传文件表单必须加上 enctype=multipart/form-data
和
下面看一下代码:
$f=&$http_post_files['file'];
$dest_dir='uploads';//设定上传目录
$dest=$dest_dir.'/'.date(ymd)._.$f['name'];//我这里设置文件名为日期加上文件名避免重复
$r=move_uploaded_file($f['tmp_name'],$dest);
chmod($dest, 0755);//设定上传的文件的属性
上传的文件名为date(ymd)._.$f['name'] ,可以在以后插入到数据库的时候用到,php实际上是把你上传的文件从临时目录移动到指定目录。move_uploaded_file($f['tmp_name'],$dest);这是关键
至于发邮件就更加简单,可以使用mail()函数
mail(收件人地址,主题,正文,from:发件人\r\nreply-to:发件人的地址);
不过mail()需要服务器的支持,在windows下还需要配置smtp服务器,一般来说外面的linux空间都行。
好像上传文件和发邮件比asp简单很多,只要调用函数就可以了。asp还需要用到服务器的不同组件比如fso、jmail什么的。
十天学会php说到这里了,我的三大系列文章都用《十天学会》作为名字,想告诉大家的是asp,php,asp.net入门都可以是十天,但是精通决不是十天啊,还需要大家自己去研究。
//==================其他代码
//链接数据库$db=mysql_connect(localhost, root,123456);$sqlname=database;mysql_select_db($sqlname,$db);session_start();mysql_query(set names 'utf8',$db);?>//创建结果集$sql = select * from kecheng;$result = mysql_query($sql); $rs= mysql_fetch_array($result);?>//修改数据$sql = update news set title='1111' where news_id=1;$result = mysql_query($sql);?>//删除数据$sql = delete from news where news_id=1;$result = mysql_query($sql);?>//添加数据$sql = insert into news (title,fenshu) values ('a',1)$result = mysql_query($sql);?>
//=============================================http://www.w3school.com.cn/php/php_cookies.asp [cookies 介绍 - 手册知识]
//======================================
php常用技巧总结
php文件读取函式
复制代码 代码如下:
//文件读取函式
function php_read($file_name) {
$fd=fopen($file_name,r);
while($bufline=fgets($fd, 4096)){
$buf.=$bufline;
}
fclose($fd);
return $buf;
}
?>
文件写入函式
复制代码 代码如下:
//文件写入函式
function php_write($file_name,$data,$method=”w”) {
$filenum=@fopen($file_name,$method);
flock($filenum,lock_ex);
$file_data=fwrite($filenum,$data);
fclose($filenum);
return $file_data;
}
?>
静态页面生成函式
复制代码 代码如下:
//静态页面生成函式
function phptohtm($filefrom,$fileto,$u2u=1){
if($u2u==1){
$data=php_read($filefrom);
}else{
$data=$filefrom;
}
php_write($fileto,$data);
return true;
}
?>
指定条件信息数量检索函式
复制代码 代码如下:
//指定条件信息数量检索函式
function rec_exist($table,$where){
$query=”select count(*) as num from $table “.$where;
$result=mysql_query($query) or die(nerror(1));
$rowcount=mysql_fetch_array($result);
$num=$rowcount[num];
if ($num==0){
return false;
}
return $num;
}
?>
目录删除函式
复制代码 代码如下:
//目录删除函式
function del_dir($directory){
$mydir=dir($directory);
while($file=$mydir->read()){
if((is_dir(“$directory/$file”)) and ($file!=”.”) and ($file!=”..”)){
del_dir(“$directory/$file”);
}else{
if(($file!=”.”) and ($file!=”..”)){
unlink(“$directory/$file”);
//echo “unlink $directory/$file ok “;
}
}
}
$mydir->close();
rmdir($directory);
//echo “rmdir $directory ok “;
}
?>
目录名称合法性检测函式
复制代码 代码如下:
//目录名称合法性检测
function isen($str){
$ret=””;
for($i=0;$i $p=ord(substr($str,$i,1));
if(($p57 & $p90 & $p122){
nerror(“不符合规范!”);
}
$ret.=chr($p);
}
return $ret;
}
?>
php分页函数
复制代码 代码如下:
//分页函数
function splitlist($halt,$lrlist,$echocnt,$paper,$table,$where,$page_id,$userid){
global $splitstr,$sumcnt;
if($paper==”” || $sumcnt==””){
$query = “select count(*) as num from $table $where”;
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$sumcnt=$row[num];
if($sumcnt==0){
nerror(“该版内还没有选择发布新闻 !”);
}
$paper=1;
}
$sumpaper=($sumcnt-$sumcnt%$echocnt)/$echocnt;
if(($sumcnt%$echocnt)!=0) $sumpaper+=1;
if($sumpaper==1 && $halt==0) return($where);
$enwhere=base64_encode(base64_encode($where));
if(($lrlist*2+1) if(($paper-$lrlist) $tract=1;
$sub=$lrlist*2+1;
}else if(($paper+$lrlist) >= $sumpaper){
$tract=$sumpaper-($lrlist*2);
$sub=$sumpaper;
}else{
$tract=$paper-$lrlist;
$sub=$paper+$lrlist;
}
}else{
$tract=1;
$sub=$sumpaper;
}
$uppaper=$paper-1;
$downpaper=$paper+1;
$startcnt=($paper-1)*$echocnt;
$where.=” limit ${ startcnt },${ echocnt }”;
if($tract > 1) { $splitstr=”【 else $splitstr=”【 for($i=$tract;$iif ($i!=$paper) $splitstr.=””.$i.” “;
else $splitstr.=””.$i.” “;
}
if ($sub!=$sumpaper) $splitstr.=”>> 】”;
else $splitstr.=”>> 】”;
return($where);
}
?>
php关于分页函式的使用说明
复制代码 代码如下:
/*
#### 检索分页函式 ####
int $halt – 检索结果仅分1页时是否(1/0)显示页码条
int $lrlist – (页码条显示页码数-1)/2
int $echocnt – 检索时每页显示记录的数量
int $paper – 页数,预提取:$paper=$http_get_vars[paper];
varchar $table – 数据表名,预附值:$table=”db.table”;
varchar $where – 检索条件,预附值:$where=”where field=’value’”;
varchar $enwhere – 将原$where进行两次base64_encode()编码后以get的方式提交
varchar $splitstr – 页码条输出字串,执行函式后在相应的位置执行 echo $splitstr;
函式调用前需获取变量 –
$paper=$http_get_vars[paper];
$sumcnt=$http_get_vars[sumcnt];
$enwhere=$http_get_vars[enwhere];
return (varchar $where) – 分页后检索语句的检索条件
注意:本函式需调用出错处理函式 nerror($error);
*/
php图片文件上传函式
//图片文件上传函式
function upload_img($uploadfile,$uploadfile_name,$uploadfile_size,$uploadpath,$max_size=64){
//$timelimit=60; //设置超时限制时间 缺省时间为 30秒 设置为0时为不限时
//set_time_limit($timelimit);
if(($uploadfile!= “none” )&&($uploadfile != “” )){
$filename=$uploadpath.$uploadfile_name;
if($uploadfile_size $filesize=”(string)$uploadfile_size” . “字节”;
}elseif($uploadfile_size $filesize=number_format((double)($uploadfile_size / 1024), 1) . ” kb”;
}else{
nerror(“文件超过限制大小!”);
}
//{
//$filesize=”number_format((double)($uploadfile_size” / (1024 * 1024)), 1) . ” mb”;
// }
if(!file_exists($filename)){
if(copy($uploadfile,$filename)){
return “$uploadfile_name ($filesize)”;
}else{
nerror(“文件 $uploadfile_name 上载失败!”);
}
unlink($uploadfile);
}else{
nerror(“文件 $uploadfile_name 已经存在!”);
}
//set_time_limit(30); //恢复缺省超时设置
}
}
以下是一些小技巧:
php如何判断ip地址合法性
if(!strcmp(long2ip(sprintf(“%u”,ip2long($ip))),$ip)) echo “is ipn”;
—-
email的正则判断
eregi(“^[_.0-9a-za-z-]+@([0-9a-za-z][0-9a-za-z_-]+.)+[a-za-z]$”, $email);
检测ip地址和mask是否合法的例子
$ip = ’192.168.0.84′;
$mask = ’255.255.255.0′;
$network = ’192.168.0′;
$ip = ip2long($ip);
$mask = ip2long($mask);
$network = ip2long($network);
if( ($ip & $mask) == $network) echo “valid ip and maskn”;
?>
—-
php文件下载头部输出如何设定
header(“content-type: application/x-download”);
header(“content-disposition: attachment; filename=$file_download_name;”);
header(“accept-ranges: bytes”);
header(“content-length: $download_size”);
echo ‘xxx’
php用header输出ftp下载方式,并且支持断点续传
一个例子:
header(‘pragma: public’);
header(‘cache-control: private’);
header(‘cache-control: no-cache, must-revalidate’);
header(‘accept-ranges: bytes’);
header(‘connection: close’);
header(“content-type: audio/mpeg”);
header(“location:ftp://download:1bk3l4s3k9s2@232.2.22.22/2222/web技术开发知识库/cn_web.rmvb”);
php正则匹配中文
ereg(“^[.chr(0xa1).-.chr(0xff).]+$”, $str);
批量替换文本里面的超级链接
function urlparse($str = ”){
if (” == $str) return $str;
$types = array(“http”, “ftp”, “https”);
$replace = ”.htmlentities(’1′).htmlentities(’2′).”
eophp;
$ret = $str;
while(list(,$type) = each($types)){
$ret = preg_replace(“|($type://)([^s]*)|ie “, $replace, $ret);
}
return $ret;
}
//======================
php网站开发常用代码总结(转)11. 可阅读随机字符串
此代码将创建一个可阅读的字符串,使其更接近词典中的单词,实用且具有密码验证功能。
/**************
*@length - length of random string (must be a multiple of 2)
**************/
function readable_random_string($length = 6){
$conso=array(b,c,d,f,g,h,j,k,l,
m,n,p,r,s,t,v,w,x,y,z);
$vocal=array(a,e,i,o,u);
$password=;
srand ((double)microtime()*1000000);
$max = $length/2;
for($i=1; $i{
$password.=$conso[rand(0,19)];
$password.=$vocal[rand(0,4)];
}
return $password;
}
2. 生成一个随机字符串
如果不需要可阅读的字符串,使用此函数替代,即可创建一个随机字符串,作为用户的随机密码等。
/*************
*@l - length of random string
*/
function generate_rand($l){
$c= abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789;
srand((double)microtime()*1000000);
for($i=0; $i$rand.= $c[rand()%strlen($c)];
}
return $rand;
}
3. 编码电子邮件地址
使用此代码,可以将任何电子邮件地址编码为 html 字符实体,以防止被垃圾邮件程序收集。
function encode_email($email='info@domain.com', $linktext='contact us', $attrs ='class=emailencoder' )
{
// remplazar aroba y puntos
$email = str_replace('@', '@', $email);
$email = str_replace('.', '.', $email);
$email = str_split($email, 5);
$linktext = str_replace('@', '@', $linktext);
$linktext = str_replace('.', '.', $linktext);
$linktext = str_split($linktext, 5);
$part1 = '';
$part4 = '';
$encoded = '';
return $encoded;
}
4. 验证邮件地址
电子邮件验证也许是中最常用的网页表单验证,此代码除了验证电子邮件地址,也可以选择检查邮件域所属 dns 中的 mx 记录,使邮件验证功能更加强大。
function is_valid_email($email, $test_mx = false)
{
if(eregi(^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$, $email))
if($test_mx)
{
list($username, $domain) = split(@, $email);
return getmxrr($domain, $mxrecords);
}
else
return true;
else
return false;
}
5. 列出目录内容
function list_files($dir)
{
if(is_dir($dir))
{
if($handle = opendir($dir))
{
while(($file = readdir($handle)) !== false)
{
if($file != . && $file != .. && $file != thumbs.db)
{
echo ''.$file.'
'.\n;
}
}
closedir($handle);
}
}
}
6. 销毁目录
删除一个目录,包括它的内容。
/*****
*@dir - directory to destroy
*@virtual[optional]- whether a virtual directory
*/
function destroydir($dir, $virtual = false)
{
$ds = directory_separator;
$dir = $virtual ? realpath($dir) : $dir;
$dir = substr($dir, -1) == $ds ? substr($dir, 0, -1) : $dir;
if (is_dir($dir) && $handle = opendir($dir))
{
while ($file = readdir($handle))
{
if ($file == '.' || $file == '..')
{
continue;
}
elseif (is_dir($dir.$ds.$file))
{
destroydir($dir.$ds.$file);
}
else
{
unlink($dir.$ds.$file);
}
}
closedir($handle);
rmdir($dir);
return true;
}
else
{
return false;
}
}
7. 解析 json 数据
与大多数流行的 web 服务如 twitter 通过开放 api 来提供数据一样,它总是能够知道如何解析 api 数据的各种传送格式,包括 json,xml 等等。
$json_string='{id:1,name:foo,email:foo@foobar.com,interest:[wordpress,php]} ';
$obj=json_decode($json_string);
echo $obj->name; //prints foo
echo $obj->interest[1]; //prints php
8. 解析 xml 数据
//xml string
$xml_string=
foo
foo@bar.com
foobar
foobar@foo.com
;
//load the xml string using simplexml
$xml = simplexml_load_string($xmphp开发中常用函数总结l_string);
//loop through the each node of user
foreach ($xml->user as $user)
{
//access attribute
echo $user['id']
//========================php开发中常用函数总结
1.获取ip
2.时间的增加
3.检查日期是否合法日期
4.时间比较函数,返回两个日期相差几秒、几分钟、几小时或几天
5.php重定向
6.获取访问者浏览器
7.获取访问者操作系统
8.文件格式类
9.php生成excel文档
10.时间比较问题
11.提取页面和浏览器提交的变量,作用相当于使php.ini开了全局变量
12.读取文件函数
13.写入文件函数
14.页面快速转向
15.产生随机字符串函数
16.截取一定长度的字符串(该函数对gb2312使用有效)
17.取得客户端ip地址
18.判断邮箱地址
19.分页(两个函数配合使用)
20.获取新插入数据的id
21.获得当前的脚本网址
22.把全角数字转为半角数字
23.去除html标记
24.相对路径转化成绝对路径
26.取得所有链接
27.html表格的每行转为csv格式数组
28.将html表格的每行每列转为数组,采集表格数据
29.返回字符串中的所有单词 $distinct=true 去除重复
30.打印出为本php项目做出贡献的人员的清单
function getip() { //获取ip
if ($_server[http_x_forwarded_for])
$ip = $_server[http_x_forwarded_for];
else if ($_server[http_client_ip])
$ip = $_server[http_client_ip];
else if ($_server[remote_addr])
$ip = $_server[remote_addr];
else if (getenv(http_x_forwarded_for))
$ip = getenv(http_x_forwarded_for);
else if (getenv(http_client_ip))
$ip = getenv(http_client_ip);
else if (getenv(remote_addr))
$ip = getenv(remote_addr);
else
$ip = unknown;
return $ip;
}
?>
{downsource}
{downsource}
function check_date($date) { //检查日期是否合法日期
$datearr = explode(-, $date);
if (is_numeric($datearr[0]) && is_numeric($datearr[1]) &&
is_numeric($datearr[2])) {
return checkdate($datearr[1],$datearr[2],$datearr[0]);
}
return false;
}
function check_time($time) { //检查时间是否合法时间
$timearr = explode(:, $time);
if (is_numeric($timearr[0]) && is_numeric($timearr[1]) &&
is_numeric($timearr[2])) {
if (($timearr[0] >= 0 && $timearr[0] = 0
&& $timearr[1] = 0 && $timearr[2] return true;
else
return false;
}
return false;
}
function datediff($date1, $date2, $unit = ) { //时间比较函数,返回
两个日期相差几秒、几分钟、几小时或几天
switch ($unit) {
case 's':
$dividend = 1;
break;
case 'i':
$dividend = 60;
break;
case 'h':
$dividend = 3600;
break;
case 'd':
$dividend = 86400;
break;
default:
$dividend = 86400;
}
$time1 = strtotime($date1);
$time2 = strtotime($date2);
if ($time1 && $time2)
return (float)($time1 - $time2) / $dividend;
return false;
}
?>
{downsource}
php重定向
方法一:header(location: index.php);
方法二:echo window.location =$php_self;īpt>;
方法三:echo ;
?>
{downsource}
获取访问者浏览器
function browse_infor()
{
$browser=;$browserver=;
$browsers =array
(lynx,mosaic,aol,opera,java,macweb,webexplorer,omniwe
b);
$agent = $globals[http_user_agent];
for ($i=0; $i{
if (strpos($agent,$browsers[$i]))
{
$browser = $browsers[$i];
$browserver =;
}
}
if (ereg(mozilla,$agent) && !ereg(msie,$agent))
{
$temp =explode((, $agent); $part=$temp[0];
$temp =explode(/, $part); $browserver=$temp[1];
$temp =explode( ,$browserver); $browserver=$temp[0];
$browserver =preg_replace(/([d.]+)/,1,$browserver);
$browserver = $browserver;
$browser = netscape navigator;
}
if (ereg(mozilla,$agent) && ereg(opera,$agent))
{
$temp =explode((, $agent); $part=$temp[1];
$temp =explode(), $part); $browserver=$temp[1];
$temp =explode( ,$browserver);$browserver=$temp[2];
$browserver =preg_replace(/([d.]+)/,1,$browserver);
$browserver = $browserver;
$browser = opera;
}
if (ereg(mozilla,$agent) && ereg(msie,$agent))
{
$temp = explode((, $agent); $part=$temp[1];
$temp = explode(;,$part); $part=$temp[1];
$temp = explode( ,$part);$browserver=$temp[2];
$browserver =preg_replace(/([d.]+)/,1,$browserver);
$browserver = $browserver;
$browser = internet explorer;
}
if ($browser!=)
{
$browseinfo = $browser$browserver;
}
else
{
$browseinfo = unknown;
}
return $browseinfo;
}
//调用方法$browser=browseinfo() ;直接返回结果
?>
{downsource}
获取访问者操作系统
function osinfo() {
$os=;
$agent = $globals[http_user_agent];
if (eregi('win',$agent) && strpos($agent, '95')) {
$os=windows 95;
}
elseif (eregi('win 9x',$agent) && strpos($agent, '4.90')) {
$os=windows me;
}
elseif (eregi('win',$agent) && ereg('98',$agent)) {
$os=windows 98;
}
elseif (eregi('win',$agent) && eregi('nt 5.0',$agent)) {
$os=windows 2000;
}
elseif (eregi('win',$agent) && eregi('nt',$agent)) {
$os=windows nt;
}
elseif (eregi('win',$agent) && eregi('nt 5.1',$agent)) {
$os=windows xp;
}
elseif (eregi('win',$agent) && ereg('32',$agent)) {
$os=windows 32;
}
elseif (eregi('linux',$agent)) {
$os=linux;
}
elseif (eregi('unix',$agent)) {
$os=unix;
}
elseif (eregi('sun',$agent) && eregi('os',$agent)) {
$os=sunos;
}
elseif (eregi('ibm',$agent) && eregi('os',$agent)) {
$os=ibm os/2;
}
elseif (eregi('mac',$agent) && eregi('pc',$agent)) {
$os=macintosh;
}
elseif (eregi('powerpc',$agent)) {
$os=powerpc;
}
elseif (eregi('aix',$agent)) {
$os=aix;
}
elseif (eregi('hpux',$agent)) {
$os=hpux;
}
elseif (eregi('netbsd',$agent)) {
$os=netbsd;
}
elseif (eregi('bsd',$agent)) {
$os=bsd;
}
elseif (ereg('osf1',$agent)) {
$os=osf1;
}
elseif (ereg('irix',$agent)) {
$os=irix;
}
elseif (eregi('freebsd',$agent)) {
$os=freebsd;
}
if ($os=='') $os = unknown;
return $os;
}
//调用方法$os=os_infor() ;
?>
{downsource}
文件格式类
$mime_types = array(
'gif' => 'image/gif',
'jpg' => 'image/jpeg',
'jpeg' => 'image/jpeg',
'jpe' => 'image/jpeg',
'bmp' => 'image/bmp',
'png' => 'image/png',
'tif' => 'image/tiff',
'tiff' => 'image/tiff',
'pict' => 'image/x-pict',
'pic' => 'image/x-pict',
'pct' => 'image/x-pict',
'tif' => 'image/tiff',
'tiff' => 'image/tiff',
'psd' => 'image/x-photoshop',
'swf' => 'application/x-shockwave-flash',
'js' => 'application/x-javascrīpt',
'pdf' => 'application/pdf',
'ps' => 'application/postscrīpt',
'eps' => 'application/postscrīpt',
'ai' => 'application/postscrīpt',
'wmf' => 'application/x-msmetafile',
'css' => 'text/css',
'htm' => 'text/html',
'html' => 'text/html',
'txt' => 'text/plain',
'xml' => 'text/xml',
'wml' => 'text/wml',
'wbmp' => 'image/vnd.wap.wbmp',
'mid' => 'audio/midi',
'wav' => 'audio/wav',
'mp3' => 'audio/mpeg',
'mp2' => 'audio/mpeg',
'avi' => 'video/x-msvideo',
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
'lha' => 'application/x-lha',
'lzh' => 'application/x-lha',
'z' => 'application/x-compress',
'gtar' => 'application/x-gtar',
'gz' => 'application/x-gzip',
'gzip' => 'application/x-gzip',
'tgz' => 'application/x-gzip',
'tar' => 'application/x-tar',
'bz2' => 'application/bzip2',
'zip' => 'application/zip',
'arj' => 'application/x-arj',
'rar' => 'application/x-rar-compressed',
'hqx' => 'application/mac-binhex40',
'sit' => 'application/x-stuffit',
'bin' => 'application/x-macbinary',
'uu' => 'text/x-uuencode',
'uue' => 'text/x-uuencode',
'latex'=> 'application/x-latex',
'ltx' => 'application/x-latex',
'tcl' => 'application/x-tcl',
'pgp' => 'application/pgp',
'asc' => 'application/pgp',
'exe' => 'application/x-msdownload',
'doc' => 'application/msword',
'rtf' => 'application/rtf',
'xls' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
'mdb' => 'application/x-msaccess',
'wri' => 'application/x-mswrite',
);
?>
{downsource}
php生成excel文档
header(content-type:application/vnd.ms-excel);
header(content-disposition:filename=test.xls);
echo test1t;
echo test2tn;
echo test1t;
echo test2tn;
echo test1t;
echo test2tn;
echo test1t;
echo test2tn;
echo test1t;
echo test2tn;
echo test1t;
echo test2tn;
//改动相应文件头就可以输出.doc .xls等文件格式了
?>
{downsource}
时间比较问题
举一个简单例子说明:比如一个论坛对当天发表的贴子用new图片标记一下。
方法一:
//$db->rows[$i][date]中为数据库中datetime字段值.
$today=time();
$theday=date(y-m-d h:i:s,$today-24*3600);
$newtag=$db->rows[$i][date]>=$theday?src='../image/newinfor.gif'>:;
//方法二:
$newtag=$db->rows[$i][date]>=date(y-m-d 00:00:00)?src='../image/newinfor.gif'>:;
?>
{downsource}
//提取页面和浏览器提交的变量,作用相当于使php.ini开了全局变量
@extract($_server, extr_skip);
@extract($_session, extr_skip);
@extract($_post, extr_skip);
@extract($_files, extr_skip);
@extract($_get, extr_skip);
@extract($_env, extr_skip);
?>
{downsource}
//读取文件函数
function readfromfile($file_name) {
if (file_exists($file_name)) {
$filenum=fopen($file_name,r);
flock($filenum,lock_ex);
$file_data=fread($filenum, filesize($file_name));
rewind($filenum);
fclose($filenum);
return $file_data;
}
}
?>
{downsource}
//写入文件函数
function writetofile($file_name,$data,$method=w) {
$filenum=fopen($file_name,$method);
flock($filenum,lock_ex);
$file_data=fwrite($filenum,$data);
fclose($filenum);
return $file_data;
}
?>
{downsource}
//页面快速转向
function turntopage($url=index.php,$info = 页面转向
中...,$second=2){
print n
n页面转向中....n;
print n;
print n;
print nn;
print n;
print n;
print n;
print
n;
print n;
print n;
print bgcolor=#aa9fff>n;
print n;
print 页面转向提示信息 n;
print
n;
print n;
print $info n;
print
n;
print n;
print n;
print 如果你的浏览器不支持自动跳转,请按这里
n;
print
n;
print n;
print
n;
print
n;
print n;
print n;
print
n;
print
n;
print n;
exit;
?>
{downsource}
产生随机字符串函数
function random($length) {
$hash = @#@#;
$chars =
@#abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz@#;
$max = strlen($chars) - 1;
mt_srand((double)microtime() * 1000000);
for($i = 0; $i $hash .= $chars[mt_rand(0, $max)];
}
return $hash;
}
?>
{downsource}
截取一定长度的字符串(该函数对gb2312使用有效)
function wordscut($string, $length ,$sss=0) {
if(strlen($string) > $length) {
if($sss){
$length=$length - 3;
$addstr=@# ...@#;
}
for($i = 0; $i if(ord($string[$i]) > 127) {
$wordscut .= $string[$i].$string[$i + 1];
$i++;
} else {
$wordscut .= $string[$i];
}
}
return $wordscut.$addstr;
}
return $string;
}
?>
{downsource}
取得客户端ip地址
function getip(){
if (getenv(http_client_ip) && strcasecmp(getenv
(http_client_ip), unknown))
$ip = getenv(http_client_ip);
&