|
php的一些技巧
作者:不详 来源:互联网
最近刚刚完成手中的项目,比较闲。来这儿转转,把积累的一些技巧分享给大家! 1、关于PHP重定向 方法一:header("Location: index.php"); 方法二:echo "<script>window.location =\"$PHP_SELF\";</script>"; 方法三:echo "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0; URL=index.php\">"; 2、获取访问者浏览器 function browse_infor() { $browser="";$browserver=""; $Browsers =array("Lynx","MOSAIC","AOL","Opera","JAVA","MacWeb","WebExplorer","OmniWeb"); $Agent = $GLOBALS["HTTP_USER_AGENT"]; for ($i=0; $i<=7; $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() ;直接返回结果 3、获取访问者操作系统 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() ; 4、文件格式类 $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-javascript', 'pdf' => 'application/pdf', 'ps' => 'application/postscript', 'eps' => 'application/postscript', 'ai' => 'application/postscript', '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', ); 5、php生成excel文档 <? //改动相应文件头就可以输出.doc .xls等文件格式了 6、时间比较问题 举一个简单例子说明:比如一个论坛对当天发表的贴子用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?"<img src='../image/newinfor.gif'>":""; 方法二: $newTag=$db->rows[$i][date]>=date("Y-m-d 00:00:00")?"<img src='../image/newinfor.gif'>":""; 7、PHP中对数据库操作的封装 我的例子.........见上面附件! 再增加一个正规表达式例子(自动转化www,ftp,mail开头的链接) <? 取得文件扩展名方法 <?//方法一: Re: 再增加一个正规表达式例子(自动转化www,ftp,mail开头的链接) quote: -------------------------------------------------------------------------------- 最初由 snowai 发布 <? 的PHP程序,里面有以下内容就说明可以用了:gd GD Support enabled GD Version 1.6.2 or higher FreeType Support enabled FreeType Linkage with TTF library JPG Support enabled PNG Support enabled WBMP Support enabled 另外,网上有个php_gd_gif.dll 可以下载,把它改名为php_gd.dll覆盖掉原文件,重起IIS,就可以实现带GIF库的GD库。 到 http://php.weblogs.com/php_gd 下载 php_gd_404.zip,解压完成上面操作。 这是for PHP4.0.4的,其他版本的PHP不能用,(老板本的PHP4.0.0可以去下载php_gd_gif.zip)。 呵呵,搞定后你的phpinfo()就会多显示一个GIF Support enabled ,但是涉及到版权问题,自己看着办吧。 在LINUX装GD库就比较麻烦了,先简单说说关于APACHE和PHP的安装:当我们在Apache环境下安装PHP的时候,你有三种安装模式可供选择:静态模块、动态模块(DSO)和CGI。 常用的是静态模块,就是APACHE和PHP在一起编译,这样PHP的执行效率高一些,但是PHP要升级或要装GD库之类的附加库时就要把两个都重新编译,很麻烦。动态模块就好办多了,单独重新 编译PHP就行了,具体安装查看PHP中的INSTALL文件。我费了半天劲安装成功了,介绍一点静态模块加GD库+JPEG+PNG的心得: 2. 环境: LINUX6.1+PHP4.0.6+GD1.8.4+jpeg+png+zlib+APACHE_1.3.20+MYSQL 1)下载所需的库: 下载GD库:建议使用Version 1.8.4 (Stable)稳定版,我编译gd-2.0.1(BETA)时,没通过。 http://www.boutell.com/gd/ 下载zlib: http://www.info-zip.org/pub/infozip/zlib/ 下载libpng:建议使用libpng-1.0.6-1-src.tar.gz http://www.turbolinux.com.cn/pub/mirrors/sourceware/cygwin/contrib/libpng/ 下载jpegsrc.v6b.tar.gz: http://www.turbolinux.com.cn/pub/mirrors/gnu/ghostscript/ 以下步骤需要按顺序执行: 2)我用的是LINUX6.1,内核是2.2.12。以ROOT进入,解压所有包,tar -zxvf filename 。然后编译: 3)如果你的LINUX没有安装zlib,必须先安装zilb,进入zlib-1.1.3 执行: ./configure make make install 4)进入libpng-1.0.6,可以在LINUX,或DOS下安装,LINUX下需要拷贝他的makefile文件, 执行: cp scripts/makefile.linux makefile make make install 5)进入jpeg-6b 执行: ./configure make make install 6a)进入gd-1.8.4 修改Makefile 检查GD库编译时是否加入加入JPEG支持,得修改Makefile文件。 修改Makefile文件,使得: CFLAGS=-O -DHAVE_LIBPNG -DHAVE_LIBJPEG LIBS=-lgd -lpng -lz -lm -ljpeg 或者,如果你FREETYPE,XPM,TTF等库都安装了,(安装方法大同小异,自己去找库吧),就改下面: #CFLAGS=-O -DHAVE_LIBXPM -DHAVE_LIBPNG -DHAVE_LIBJPEG #-DHAVE_LIBFREETYPE -DHAVE_LIBTTF #LIBS=-lgd -lpng -lz -ljpeg -lfreetype -lm -lttf 去掉# 此后,编译并安装: make make install (如果需要MYSQL,而你没装,就先装MYSQL,解压,执行: ./configure ; make ; make install ./configure --prefix=/home/mysql ,默认安装路径/usr/local/share/mysql 。) 7)重新编译PHP,我用的是PHP-4.0.6,最好先看看安装文件,more INSTALL,然后执行: 7.1)解压进入apache_1.3.20,需要先考些文件,执行: ./configure --prefix=/home/apache --activate-module=src/modules/php4/libphp4.a 7.2)解压进入php-4.0.6,编译安装: ./configure --with-mysql --with-apache=../apache_1.3.20 --with-gd=../gd-1.8.4 --with-jpeg-dir=../jpeg-6b --with-png-dir=../libpng-1.0.6 --with-zlib --enable-track-var (默认安装路径:/usr/local/lib/php) 8)如果你的PHP是和APACHE一起编译的,静态模块,就要重新编译APACHE,我用的是apache_1.3.20 先停掉APACHE:./home/apache/bin/apachectl stop 进入apache_1.3.20,需要改文件src/Configuration: 加入: AddModule modules/php4/libphp4.a [ 这是APACHE_1.3.x的安装,如果你用的是APACHE_1.2.x,就加入Module php4_module mod_php4.o 然后拷贝libphp4.module到src,修改相应语句为:EXTRA_LIBS=-L. -lphp4 -lgdbm -ldb -L/usr/local/mysql/lib -lmysqlclient 如果你采用动态模块安装,如果是初次安装,修改语句不同,具体查看PHP的INSATLL文件。] 然后执行: ./configure --prefix=/home/apache (prefix=是指定存放路径。不带prefix,默认的是/usr/local/apache) (也可以直接执行./configure --prefix=/home/apache --activate-module=src/modules/php4/libphp4.a ) make make install 9)进入 php-4.0.6 执行 cp php.ini-dist /usr/local/lib/php.ini 10)启动APACHE: ./home/apache/bin/apachectl start 11)运行你的phpinfo()程序,默认APACHE的根目录是/usr/local/apache/htdocs/ 。如过跟上面WINDOWS中显示一样,那就恭喜你安装成功了,可以支持PHP+GD+JPEG+PNG了。不行的话,重装试试。 另外,在gd-1.8.3中有个GIF的补丁,我试过没有成功,看来要版本很低的LINUX才行,如果你成功了,或者在LINUX6.1以上版本中有什么其他办法实现PHP+GD+GIF,麻烦告诉我(E_mail:UBs@ynmail.com) 如果要用GIF图形,操作如下,把上面步骤:6a换成6b 使用gd-1.8.3,加上GIF补丁编译,使GD库包含GIF库: 6b)下载:http://www.boutell.com/gd/http/gd-1.8.3.tar.gz 下载补丁:http://www.webofsin.com/gd-1.8.3-gif.patch 解开,进入gd-1.8.3 打上GIF的补丁:patch -p0 <gd-1.8.3-gif.patch File to patch: gd.c 然后此目录中多了一个gd-1.8.3/gd_gif.c 修改Makefile,基本同上。 此后,编译并安装: 其他步骤同上,只要把gd-1.8.4换成gd-1.8.3 。 二,PHP中大图缩小图的程序实例:(在WINDOWS和LINUX平台都调试通过了。) 1)上传图片页面:(片段) 在<head></head>中间加入下面程序,(这段程序很有用,可以在前台,用户端判断用户上传的文件类型,控制用户的上传文件) <script language="JavaScript"> <!-- function CheckForm(theForm) { var fileext=theForm.zhaopian_up.value.substring(theForm.zhaopian_up.value.length-4,theForm.zhaopian_up.value.length) fileext=fileext.toLowerCase() if (!(fileext=='.jpg' || fileext=='.png')) {alert("对不起,不正确的照片文件,必须为*.jpg或*.png文件 !"); theForm.zhaopian_up.focus(); return false; } return true; } // --> 页面中加入上传表单: <FORM ENCTYPE="multipart/form-data" ACTION="photo_upload2.php" METHOD="POST" onsubmit="return CheckForm(this)"> 注:请先上传照片,后填下表。第一张为封面照片,只能传jpg图片,小于300K,少于9张。 <p class="big"> 上传照片:</p> <input type="file" name="zhaopian_up" size="20"> <INPUT TYPE="submit" value="上传"> </form> 2)处理页面程序,包含判断图片大小,上传拷贝,缩图,生成小图文件,图片ID存入数据库等:(片段) <? 在显示图片的程序中,只需从数据库中读出图片ID,用$photo_path."/".$photo_ID."_s.".$type就是显示小图,加个链接,就可以显示大图$photo_path."/".$photo_ID.".".$type; 在我的一个程序中有此功能,正在测试:www1.yn.cninfo.net/love 另有一篇参考文章。介绍在Solaris 7下安装gd-1.8.3(包含所有库),而且还修改了程序使其支持GIF,看起来很COOL。 但我没有测试过,你需要的话,可以看看:http://wsz26.51.net/PHP-GD.htm --------------------------------------- 这个方法我一直再用,但生成的缩略图效果不好........ 有没有别的方法??? PHP:-------------------------------------------------------------------------------- function makethumb($srcFile,$dstFile,$dstW,$dstH) { ImageAlphaBlending($srcFile, true); $picdata = GetImageSize($srcFile,&$info); switch ($picdata[2]) { case 1: $im = @ImageCreateFromGIF($srcFile); break; case 2: $im = @imageCreateFromJpeg($srcFile); break; case 3: $im = @ImageCreateFromPNG($srcFile); break; case 6: $im = @ImageCreateFromWbmp($srcFile); break; } $srcW=ImageSX($im); $srcH=ImageSY($im); $dstX=0; $dstY=0; if ($srcW*$dstH>$srcH*$dstW) { $fdstH=round($srcH*$dstW/$srcW); $dstY=floor(($dstH-$fdstH)/2); $fdstW=$dstW; } else { $fdstW=round($srcW*$dstH/$srcH); $dstX=floor(($dstW-$fdstW)/2); $fdstH=$dstH; } $ni=ImageCreate($dstW,$dstH); $dstX=($dstX<0)?0:$dstX; $dstY=($dstX<0)?0:$dstY; $dstX=($dstX>($dstW/2))?floor($dstW/2):$dstX; $dstY=($dstY>($dstH/2))?floor($dstH/s):$dstY; $gray = ImageColorAllocate($ni,132,130,132); $black = ImageColorAllocate($ni, 0,0,0); $white = ImageColorAllocate($ni, 255,255,255); imagefilledrectangle($ni,0,0,$dstW,$dstH,$white); ImageCopyResized($ni,$im,$dstX,$dstY,0,0,$fdstW,$fdstH,$srcW,$srcH); $imgtext="sa20.com"; ImageString($ni,2,60,75,$imgtext,$black); //ImageTTFText ($ni, 12, 0, 60, 75, $black, "data/font.ttf",$imgtext); ImagePNG($ni,$dstFile); imagedestroy($im); imagedestroy($ni); } -------------------------------------------------------------------------------- 二、php3,4中session的实现 -------------------------------------------------------------------------------- 在php3中是没有session这种东东的,但我们又需要,怎么办呢?别急,有很多人替你做了这些,这其中最有名的要算phplib了。你可以去国外下载,也可以上国内大部分php站点下载。我们要做的第一件事是让phplib和php3结合在一起使它能工作。为了能实现这方面的功能,我们需要先安装phplib。 跟着我来做,很容易的(以下方法在win2000+php3.0.16+apache1.3.12+ phplib7.2c +mysql3.23.21 for win32 上通过) phplib最基本的功能包括用户认证,Session管理,权限及数据库的抽象化。 怎样使用phplib来实现session功能呢? 一、首先你将phplib解开,里面有一个目录叫"php",将这个目录拷贝到apache的安装目录下。以下以笔者的机器为例: 我的apache安装在d:apache 目录下,我将上面的"php"目录拷贝到d:apache,并将phplib下的pages目录下的文件和目录一起拷贝到 d:apachehtdocs下,注意不带目录本身。 phplib的类库需要根据系统进行初始化,你可以修改local.inc文件,其中包含着一些基本参数,你可以根据自己机器的实际情况来进行修改。 将d:apachephpprepend.php3文件中的一段程序改为如下样子: if (!isset($_PHPLIB) or !is_array($_PHPLIB)) { $_PHPLIB["libdir"] = "d:/apache/php/"; //这儿改为你放phplib下php目录的路径 } 然后将d:apachephplocal.inc文件改如下: class DB_Example extends DB_Sql { var $Host = "localhost";//你的mysql数据库所在主机名 var $Database = "test";//数据库名 var $User = "root";//数据库用户名 var $Password = "";//数据库用户口令 } 最后一步执行解开的phplib目录中的stuff目录下的create_database.mysql文件,生成初始表。 我们说明一下phplib的工作原理,每一个使用phplib的页面首先必须可以找到运行phplib所必须类库文件,我们可以在php3.ini中设置auto_prepend 变量来支持,phplib分发包中包含一个prepend.php3文件,将auto_prepend指定为"d:/apache/php/prepend.php3"(带引号)后,各页面就会自动包含phplib类库,我们还可以 将phplib类库所在目录加进include变量中,以便可以找到这些文件,当然,最苯的办法就是指定phplib的绝对路径,这可不是个好主意,可移植性太差! 第二步,每一个使用phplib的页面中,你必须首先调用page_open函数进行初始化。这会告诉phplib,你现在或将来会用到状态保存。一个典型的 page_open例子如下: "Example_Session"); ?> 数组变量(sess)用来初始化一些状态保存对象,注意:必须使用phplib内置名(sess),这些内置名是你在local.ini中所定义的,page_open 函数必须在页面内容输出到浏览器之前被调用。php3脚本最后应以page_close()结束,这将会将有关状态数据写回到数据库中,如果你忘了的话, 结果你应该能想到,哈哈,你的变量全丢了,可不要怪我没告诉你... 因为phplib使用了Cookies来保存状态信息,所以page_open()函数必须在页面内容输出到浏览器之前被调用, 这里的页面内容可以是任何HTML 信息或者空行,如果你发现了错误"Oops - SetCookie called after header has been sent",这表明在page_open()之前向浏览器输出了些什么, 你要特别留意空行,因为非常难找到,典型的错误是在标记之间输出了空行,你应检查在local.inc和prepend.php3文件中是否包含了空行, 这也是一个非常容易出错的地方。为了减少出错的可能,我们可以这样书写初始化程序: "Example_Session"); ?> ..... 第三步,具体使用。 当一个用户访问了该网站后,随即用户的session就开始了,如果用户的浏览器支持cookie的话,将会建立一个session的id放入cookie, 这个唯一的ID是由PHP3随机生成,然后又用随机种子字串进行md5加密过了的,这里的cookie应该叫做session cookie,因为这个cookie是不会 写到用户硬盘里去的,当一个session期结束的时候,该cookie也被完结了。如果用户浏览器不支持cookie的话,那么 该session的id将会放入url链中, 因为是加密过的,所以窃取了也没用。session ID存放着用户的有关信息,如用户已认证、认证到期时间、用户权限,和其他一些你可能需要的信息, 方便我们取用。 Session其实就是用户一次会话的过程。Session并不是仅仅用来跟踪用户的注册,实际上,它还可以有其它的使用场合,你可以用它来存储任何你想要 存贮的信息,这些信息可以在用户随后访问的页面中派上用场,当然前提是那些页面要使用PHPLIB。方法很简单,注册一个变量后即可在随后的页面中使用它, 直至session结束。方法: register( "variable_name"; ?> 注意,这里的variable_name不是变量值,而是变量名,可以先指定变量名,随后再赋值。你在某个页面中可以改变变量的值,随后的页面访问该变量时 会得到改变后的值。变量的类型是多样的,可以是一个字串,一个数字,一个数组。举例来说明: 第一页: "Example_Session"); $sess->register( "first"; //注意变量名前不需要加$ if (iset($firstname)) { $first = $firstname; } ..... page_close(); ?> 第二页: 注册完一个变量,当页面最后调用page_close()函数后,各个session变量会被写回到数据库中。如果你忘记调用page_close()函数的话, 变量就不会被写回数据库,将出现不可预知的后果。当变量被使用完毕,你不再需要用到时,可以调用以下函数将变量删除: "Example_Session"); ... $sess->unregister( "variable_name"; ... page_close(); ?> PHPLIB 7.0中,使用了一种存储结构,它允许你存储session数据到数据库中、共享内存中或者LDAP中。PHPLIB使用了数据库类,这使得你有 了更多的选择,你可以选用oracle8,mysql,postgresql等等数据库来保存状态信息。 关于phplib中的其它功能以及有关session的其它函数的使用,你可以参看它带的手册,或上它的网站看在线文档。它的老家在 [url]http://phplib.netuse.de/index.php3[/url] 。 php4的session实现大都从phplib学来的,它也靠cookies保存session id,用文件系统保存变量(默认情况下)。因此,它的session 变量不能保存对象(事实上能保存对象内容,但没有意义,因为它是保存在磁盘上的,不是活的对象,充其量也就是对象尸体。)不过这点的限制不是太 大,我们在大部分情况下都只需要保存变量就行了。当然你也可以将session保存在数据库中,下一小节中我们会讲到怎样将session保存在数据库中。 在php4中由于比php3多了session支持,所以在php.ini文件中也多了session配置选项。下面我们来看看各项的作用与意义: [Session] session.save_handler = files ; handler used to store/retrieve data(用什么保存session变量,默认情况下用文件) session.save_path = c:/temp ; argument passed to save_handler(保存session变量的目录,在linux/unix下为/tmp,在win下设为你的目录) ; in the case of files, this is the ; path where data files are stored session.use_cookies = 1 ; whether to use cookies(是否使用cookies,当然,在win下别无选择) session.name = PHPSESSID ; name of the session(默认session使用的cookies名,建议不要改动) ; is used as cookie name session.auto_start = 0 ; initialize session on request startup(是否自动启用session,当为1时,在每页中就可以不必调用session_start()函数了) session.cookie_lifetime = 0 ; lifetime in seconds of cookie(设定 cookie 送到浏览器后的保存时间,单位为秒。缺省值为 0,表示直到浏览器关闭。) ; or if 0, until browser is restarted session.cookie_path = / ; the path the cookie is valid for(cookie)(cookies有效路径) session.cookie_domain = ; the domain the cookie is valid for(cookies有效域名) session.serialize_handler = php ; handler used to serialize data(定义序列化数据的标识,本功能只有 WDDX 模块或 PHP 内部使用。缺省值为 php) ; php is the standard serializer of PHP session.gc_probability = 1 ; percentual probability that the (设定每次临时文件开始处理 (gc, garbage collection) 处理概率。缺省值为 1。 ) ; 'garbage collection' process is started ; on every session initialization session.gc_maxlifetime = 1440 ; after this number of seconds, stored(设定保存session的临时文件被清除前的存活秒数) ; data will be seen as 'garbage' and ; cleaned up by the gc process session.referer_check = ; check HTTP Referer to invalidate (决定参照到客户端的 Session 代码是否要删除。有时在安全或其它考虑时,会设定不删除。缺省值为 0。) ; externally stored URLs containing ids session.entropy_length = 0 ; how many bytes to read from the file(设定 session 从高熵值资源读取的位数。缺省值为 0.) session.entropy_file = ; specified here to create the session id(设定 session 代码建立时,使用外部高熵值资源或文件来建立,例如 UNIX 系统上的 /dev/random 或 /dev/urandom。 ) ; session.entropy_length = 16 ; session.entropy_file = /dev/urandom session.cache_limiter = nocache ; set to { nocache,private,public } to (设定session 缓冲限制) ; determine HTTP caching aspects session.cache_expire = 180 ; document expires after n minutes(文档有效期,单位为分钟) 在windows平台下,php4.01pl2以前的版本会出现设置session.save_path 后出错的情况,这是php的一个bug,在php4.01pl2及以后已经修正了。如果你用以前的版本, 你可以将session.save_path设为"./",或设为"/temp",并在你放置php脚本的当前盘根目录下建一个名为temp的目录即可(我的php脚本放在d:apachehtdocs下,则我在d:盘根目录下建一名为temp的目录)。 在php4中有关session的函数主要有以下这些: session_start: 初始化session,需要用session的每一个页面最开始处调用。 session_destroy: 结束 session,在需要结束session处调。 session_name: 存取目前 session 名称。 session_module_name: 存取目前 session 模块。 session_save_path: 存取目前 session 路径。 session_id: 存取目前 session id号。 session_register: 注册新的session变量。 session_unregister: 删除已注册session变量。 session_is_registered: 检查session变量是否注册。 session_decode: Session 数据解码。 session_encode: Session 数据加密。 通常情况下我们只需要调用三个函数即可。 即sesssion_start()、session_register()、session_is_registered()。 在需要用到session的每一页的最开始处调用session_start()函数, 一个典型的使用session的页面如下: .... PHP中的模板技术 2002-05-17· ·李乔··yesky 1 2 下一页 综述: 在多人开发大型PHP项目时,模板技术非常有用,它可以分开美工和程序员的工作,并且方便界面的修改和完善;不仅如此,利用模板技术,我们还可以简单有效地定制或者修改站点。现在我们将要以PHPLIB的模板为例子讲述如何在PHP中应用模板技术。 如何使用PHPLIB模板? 设我们有一个模板, 名为UserTemp,路径为/home/user_dir/user_temp/,它的内容如下: 你订购的是:{Product} 大括号表示Product是一个模板变量。 然后我们编写如下的程序: <?php include "template.inc"; $user_product = "随身听"; $tmp = new Template("/home/user_dir/user_temp/"); // 创建一个名为 $t 的模板对象 $tmp->set_file("FileHandle","UserTemp.ihtml"); // 设置句柄FileHandle = 模板文件 $tmp->set_var("Product",$user_product); // 设置模板变量Product=$user_product $tmp->parse("Output","FileHandle"); // 设置模板变量 Output = 分析后的文件 $tmp->p("Output"); // 输出 Output 的值(我们的分析后的数据) ?> ??template.inc是PHPLIB中的一个文件,我们用include以便使用PHPLIB的模板功能。PHPLIB模板使用的是面向对象的设计,所以我们可以用$tmp = new Template("/home/user_dir/user_temp/")创建一个模板对象,其参数是一个路径("/home/user_dir/user_temp/"), 用来设置模板文件所在位置,默认路径是PHP脚本所在目录。 ??set_file()用来定义指向UserTemp.ihtml(PHPLIB模板的模板文件名的后缀为.ihtml )的句柄"FileHandle",set_var()用来设置模板变量Product为$user_product的值(即"随身听"),parse()方法会装入FileHandle(即UserTemp.ihtml)进行分析,将所有在模板中出现的"{Product}"替换成$user_product的值("随身听")。 如何使用嵌套的模板? ??在上面的例子中,parse()方法设置的"Output"是一个模板变量,利用这点,我们可以实现模板的嵌套。 ??比如,我们有另外一个模板(假设为UserTemp2),其内容是: ??欢迎你,亲爱的朋友!{Output} ??那么在分析之后,其输出会是: ??欢迎你,亲爱的朋友!你订购的是:随身听 ??下面是更新后的程序: <?php include "template.inc"; $user_product = "随身听"; $tmp = new Template("/home/user_dir/user_temp/"); $tmp->set_file("FileHandle","UserTemp.ihtml"); $tmp->set_var("Product",$user_product); $tmp->parse("Output","FileHandle"); $tmp->set_file("FileHandle2","UserTemp2.ihtml");//设置第二个模板句柄 $tmp->parse("Output","FileHandle2");//分析第二个模板 $tmp->p("Output"); ?> ??很简单,我们就不详细解释了。这里有一个技巧:parse()和p()可以写成一个函数pparse(),比如$tmp->pparse(Output","FileHandle2)。 一个判断oicq是否在线的小程序 一个判断oicq是否在线的小程序 <? 全文搜索和替换 全文搜索和替换 <?php Example http://yourserver.com/globalreplace.php?oldword=test&newword=text&rootpath=/path/to/dir 上传图片时生成缩微图象的函数 作者/来源:keniv 上传图片时生成缩微图象的函数 实际应用请看http://feifei2.bjedu.gov.cn/cgi-bin/funnymovie.php // 这里有很多搞笑电影 // 本函数从源文件取出图象,设定成指定大小,并输出到目的文件 // 源文件格式:gif,jpg,,png // 目的文件格式:jpg // $srcFile: 源文件 // $dstFile: 目标文件 // $dstW: 目标图片宽度 // $dstH: 目标文件高度 function makethumb($srcFile,$dstFile,$dstW,$dstH) { $data = GetImageSize($srcFile,&$info); switch ($data[2]) { case 1: $im = @ImageCreateFromGIF($srcFile); break; case 2: $im = @imagecreatefromjpeg($srcFile); break; case 3: $im = @ImageCreateFromPNG($srcFile); break; } $srcW=ImageSX($im); $srcH=ImageSY($im); $ni=ImageCreate($dstW,$dstH); ImageCopyResized($ni,$im,0,0,0,0,$dstW,$dstH,$srcW,$srcH); ImageJpeg($ni,$dstFile); // 如果需要输出到浏览器,那么将上一句改为ImageJpeg($ni); // 如果需要其它格式的图片,改动最后一句就可以了 取得文件的MD5值 -------------------------------------------------------------------------------- (文:Redhat) <?php 生成随机字符串 -------------------------------------------------------------------------------- (文:redhat) <?php PHP下载文件 -------------------------------------------------------------------------------- (文:redhat) <?php 根据某年的不同日期调用不同的模板 -------------------------------------------------------------------------------- (文:Redhat) <?php PHP代码:-------------------------------------------------------------------------------- <? <? <? <? --------------------------------------------------------------------------------
|