php里面的一个问题,里php 函数里面定义函数经常有M 、I 这一类的代表什么来的呢?

2011年1月 PHP大版内专家分月排行榜第三
2011年1月 PHP大版内专家分月排行榜第三
2010年3月 PHP大版内专家分月排行榜第三2005年4月 PHP大版内专家分月排行榜第三
2010年3月 PHP大版内专家分月排行榜第三2005年4月 PHP大版内专家分月排行榜第三
2008年10月 PHP大版内专家分月排行榜第二2008年9月 PHP大版内专家分月排行榜第二2008年4月 PHP大版内专家分月排行榜第二2007年12月 PHP大版内专家分月排行榜第二
2008年10月 PHP大版内专家分月排行榜第二2008年9月 PHP大版内专家分月排行榜第二2008年4月 PHP大版内专家分月排行榜第二2007年12月 PHP大版内专家分月排行榜第二
2011年2月 PHP大版内专家分月排行榜第三2010年12月 PHP大版内专家分月排行榜第三
2011年2月 PHP大版内专家分月排行榜第三2010年12月 PHP大版内专家分月排行榜第三
2009年10月 PHP大版内专家分月排行榜第二2009年9月 PHP大版内专家分月排行榜第二2009年7月 PHP大版内专家分月排行榜第二2008年1月 PHP大版内专家分月排行榜第二2007年8月 PHP大版内专家分月排行榜第二2007年5月 PHP大版内专家分月排行榜第二2007年3月 PHP大版内专家分月排行榜第二
2009年11月 PHP大版内专家分月排行榜第三2007年7月 PHP大版内专家分月排行榜第三2007年4月 PHP大版内专家分月排行榜第三2007年1月 PHP大版内专家分月排行榜第三
2013年5月 总版技术专家分月排行榜第一
2016年7月 总版技术专家分月排行榜第二2016年3月 总版技术专家分月排行榜第二2015年12月 总版技术专家分月排行榜第二2014年8月 总版技术专家分月排行榜第二2014年7月 总版技术专家分月排行榜第二2013年6月 总版技术专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。你可能感兴趣的文章
扫描二维码用手机看文章首先。我们得知道递归函数是什么东西。通俗来讲也就是自己调用自己本身的函数。
如今须要设计一段代码。解决1到10叠加的问题。
//递归函数
function add($sum){
if($sum&=1){
add(--$sum);
echo add($num);
//递归函数
function add($sum){
if($sum&=1){
return add(--$sum);
echo add($num);
A中打印不出想要的结果,B中能够实现。而A和B代码中的唯一区别就是在if中加入了一个return。
以下就開始分析整个递归的过程,全然能够去看看盗梦空间加深理解了:(以不能实现的A代码为例)
1.将10带入函数中,if语句推断之后。$tot開始叠加。
2.这里重点来了:将參数减一之后又一次带入函数中。(没有返回值!!!)
3.接着上面的过程一直循环。一直到$sum=1,这从外到内,由10到1。这10层的循环都没有返回值。
4.$sum=0的时候,要求有返回值。
就好像,盗梦空间中,主角在11层梦境中醒来,可是前面10层的梦境都处于睡眠阶段。这主角你认为醒的过来吗,明显不可能。他仅仅能卡在第11层梦境。永远醒只是来。
唯一能让主角醒过来的办法也就是他的每一层梦醒都醒过来,一直回到现实生活中。而相对与A代码。B代码则从第一层開始就要求有返回值,一直到11层都要有返回值。所以11层醒过来之后激活了第10层,然后一层一层的激活,最后就顺利醒过来了,这个最后的结果也就正确输出了。
怪不得他们说盗梦空间用递归函数非常好解释。想来确实有点。
剩下的就是自己再深入理解了,一上来确实会有点晕。
阅读(...) 评论()php一些实际项目中经常可以用到的技巧
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="";
=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";
$browseinfo = "Unknown";
//调用方法$browser=browseinfo() ;直接返回结果
3、获取访问者操作系统
function osinfo() {
$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";
//调用方法$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文档
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:filename=test.xls");
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
echo "test2\t\n";
//改动相应文件头就可以输出.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开头的链接)
function enable_url($str)
ereg_replace("(www.[a-zA-Z0-9@:%_.~#-\?&]+)", "
&a href=\"linkHttp://\\1\"
target=\"_blank\"&\\1&/a&",
$str); // 自动转化www开头的链接
ereg_replace("(((f|ht){1}tp://)[a-zA-Z0-9@:%_.~#-\?&]+)",
"&a href=\"\\1\"
target=\"_blank\"&\\1&/a&",
$str); //转化http://开头和ftp://开头的链接
$str = str_replace('linkHttp://','http://',$str);
ereg_replace("([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})","&a
href=\"mailto:\\1\"&\\1&/a&",
$str); // 转化邮件地址
//for example
echo enable_url("");
__________________
QQ不经常用,有问题的朋友可以Email联系我
取得文件扩展名方法
&?//方法一:
function extend($file_name)
$retval="";
$pt=strrpos($file_name, ".");
if ($pt) $retval=substr($file_name, $pt+1, strlen($file_name) -
return ($retval);
//方法二(php4.03及更高版本)
$extend = pathinfo($file_name);
$extend = strtolower($extend["extension"]);
Re: 再增加一个正规表达式例子(自动转化www,ftp,mail开头的链接)
--------------------------------------------------------------------------------
最初由 snowai 发布
function enable_url($str)
ereg_replace("(www.[a-zA-Z0-9@:%_.~#-\?&]+)", "
&a href=\"linkHttp://\\1\"
target=\"_blank\"&\\1&/a&",
$str); // 自动转化www开头的链接
$s...以下省略
--------------------------------------------------------------------------------
能否给个用户名的转化,条件是用户在输入用户名时只能输入中文
PHP中实现大图自动缩成小图(及GD库的安装)(作者:UB)
PHP中实现大图自动缩成小图(及GD库的安装)
我觉得网络编程与普通编程最大的区别就是,网络编程除了具备普通编程的特性外,还要花很大精力考虑速度的问题。
网站上需要很多图片,现在有很多给用户存放照片,图片的“像册”程序,可以让用户自己上传图片,然后自动缩成小图,可以让你在一个页面看到很多小图,然后点击小图看大图。
注意:在网页中指定长宽显示图片,只能让图片以小尺寸显示,但是大小(容量)不变(可以看看属性),速度自然很慢。真正的缩图是把大图的大小(容量)变小,就是重新生成一个小尺寸的图片文
件。我的一个程序有此功能,正在测试:info.net/love
另外,装上GD库,还有很多功能,可以用程序画图,做些特别的计数器之类,还可以支持FREETYPE字体等等,里面函数很多,功能很强大。
先简单说说GIF,JPG,PNG,BMP图的区别:他们都是图形压缩格式。GIF格式单图最多能显示256种颜色,可以保存多图,适合做小动画,容量较大。
JPEG格式,支持24位(16 百万)种颜色,适合于静
态图,容量较小。PNG格式,包含GIF,JPEG的所有特点,支持48位颜色,但是容量较大,而且应用不广泛。
BMP格式,颜色少,非常老的压缩格式,对于网络来说太大了。
在PHP中实现大图自动缩成小图其实很简单,装上GD库,用一个小函数就可以了,但是安装GD库很麻烦。在1.6.2 版以前的 GD
library 有支持 GIF 格式的功能,但因为 GIF 格式使用的 LZW 演算法牵
涉到 Unisys 的专利权,因此在 GD library 1.6.2 版之后不支持 GIF 的格式。
PHP 在 3.0.13 版之后,终于支持了 PNG 的图型格式,使用 PNG 就不怕会有版权的问题了,而且在 PHP
这个版本以后,安装编译时会检查 GD library 支持的是旧的 GIF 格式还是新的 PNG 格式来决
定是否使用 GIF 或 PNG 的专用函数。
一,安装GD库:
1。环境:windows2000server+PHP4.0.4+GD+IIS
在WINDOWS中安装很容易,PHP4.0以上版本中自带,装好后在php4/extensions
目录中自带动态链接库:php_gd.dll 。只要在php.ini 中把 ;extension=php_gd.dll
前面的;去掉,然后重起WEBSERVER(
IIS或APACHE),就行了。运行一个带有&?
phpinfo();?&的PHP程序,里面有以下内容就说明可以用了:
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库。
到 /php_gd 下载 php_gd_404.zip,解压完成上面操作。
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的心得:
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)时,没通过。
下载zlib:
-zip.org/pub/infozip/zlib/
下载libpng:建议使用libpng-1.0.6-1-src.tar.gz
.cn/pub/mirrors/sourceware/cygwin/contrib/libpng/
下载jpegsrc.v6b.tar.gz:
.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 install
4)进入libpng-1.0.6,可以在LINUX,或DOS下安装,LINUX下需要拷贝他的makefile文件, 执行:
cp scripts/makefile.linux makefile
make install
5)进入jpeg-6b 执行:
./configure
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 install
(如果需要MYSQL,而你没装,就先装MYSQL,解压,执行: ./ make
./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 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:)
如果要用GIF图形,操作如下,把上面步骤:6a换成6b
使用gd-1.8.3,加上GIF补丁编译,使GD库包含GIF库:
6b)下载:/gd/http/gd-1.8.3.tar.gz
下载补丁:/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)
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();
页面中加入上传表单:
&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="上传"&
2)处理页面程序,包含判断图片大小,上传拷贝,缩图,生成小图文件,图片ID存入数据库等:(片段)
//取得上传文件大小,300K:
if ($zhaopian_up_size&307200) {
$wrong_massage="对不起,你上传的文件大小超过了300K,请缩小图再传!";
Header("Location:include/wrong_massage.php?wrong_massage=$wrong_massage");
//自动缩图$srcFile原文件,大图;$photo_small目标文件,小图;$dstW,$dstH是小图的宽,高。
function makethumb($srcFile,$photo_small,$dstW,$dstH) {
$data = GetImageSize($srcFile,&$info);
switch ($data[[2]]) {
case 1: //图片类型,1是GIF图
$im = @ImageCreateFromGIF($srcFile);
case 2: //图片类型,2是JPG图
$im = @imagecreatefromjpeg($srcFile);
case 3: //图片类型,3是PNG图
$im = @ImageCreateFromPNG($srcFile);
$srcW=ImageSX($im);
$srcH=ImageSY($im);
$ni=ImageCreate($dstW,$dstH);
ImageCopyResized($ni,$im,0,0,0,0,$dstW,$dstH,$srcW,$srcH);
ImageJpeg($ni,$photo_small);
//ImageJpeg($ni); //在显示图片时用,把注释取消,可以直接在页面显示出图片。
$srcFile=$zhaopian_
//取得文件扩展名:
$type=substr(strrchr($zhaopian_up_name,"."),1);
$photo_ID=time();
$photo_path="user_picture/$user/";
if(is_dir($photo_path)!=TRUE) mkdir($photo_path,0777);
$photo_small=$photo_path."/".$photo_ID."_s.".$ //小图
$photo_s=fopen($photo_small,"w+");
if ($type=="png" || $type=="jpg")
makethumb($srcFile,$photo_small,110,130);//110,130为小图宽,高
在显示图片的程序中,只需从数据库中读出图片ID,用$photo_path."/".$photo_ID."_s.".$type就是显示小图,加个链接,就可以显示大图$photo_path."/".$photo_ID.".".$
在我的一个程序中有此功能,正在测试:info.net/love
另有一篇参考文章。介绍在Solaris
7下安装gd-1.8.3(包含所有库),而且还修改了程序使其支持GIF,看起来很COOL。
但我没有测试过,你需要的话,可以看看:http://wsz26.51.net/PHP-GD.htm
---------------------------------------
好了,还有什么问题欢迎来信讨论(E_mail:),可以随便转载,但是请保留作者。另外,刚开始做了一个个人网站,欢迎访问:http://ub_think.
这个方法我一直再用,但生成的缩略图效果不好........
有没有别的方法???
PHP:--------------------------------------------------------------------------------
function makethumb($srcFile,$dstFile,$dstW,$dstH) {
ImageAlphaBlending($srcFile, true);
$picdata = GetImageSize($srcFile,&$info);
switch ($picdata[2]) {
$im = @ImageCreateFromGIF($srcFile);
$im = @imageCreateFromJpeg($srcFile);
$im = @ImageCreateFromPNG($srcFile);
$im = @ImageCreateFromWbmp($srcFile);
$srcW=ImageSX($im);
$srcH=ImageSY($im);
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="";
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);
}--------------------------------------------------------------------------------
最后编辑由 firefox 在 08-01-02 01:19
二、php3,4中session的实现
--------------------------------------------------------------------------------
日 06:00:40 AM
中是没有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 = $
} ..... 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:/ argument passed to
save_handler(保存session变量的目录,在linux/unix下为/tmp,在win下设为你的目录) ; in the
case of files, 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 = 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
on every session initialization session.gc_maxlifetime =
1440 ; after this number of seconds,
stored(设定保存session的临时文件被清除前的存活秒数) ; data will be seen
as 'garbage' 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 = 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的页面如下:
上一篇: session全教程[教程来自FASTBOARD]
下一篇: 数据表是MyISAM格式,是什么意
PHP中的模板技术
· ·李乔··yesky
1 2& 下一页
  综述:
在多人开发大型PHP项目时,模板技术非常有用,它可以分开美工和程序员的工作,并且方便界面的修改和完善;不仅如此,利用模板技术,我们还可以简单有效地定制或者修改站点。现在我们将要
以PHPLIB的模板为例子讲述如何在PHP中应用模板技术。
  如何使用PHPLIB模板?
设我们有一个模板, 名为UserTemp,路径为/home/user_dir/user_temp/,它的内容如下:
你订购的是:{Product}
大括号表示Product是一个模板变量。
然后我们编写如下的程序:
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}
那么在分析之后,其输出会是:
欢迎你,亲爱的朋友!你订购的是:随身听
下面是更新后的程序:
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是否在线的小程序
function get_status($uin)
$fp = @fsockopen ("", 80,
&$errno, &$errstr, 30);
return '出错';
fputs($fp, "GET /$uin/l/00/0/ HTTP/1.0 ");
$do = 'yes';
while(!feof($fp))
$line = fgets ($fp,128);
$do = ($do == 'yes')?'yes':(eregi("^GIF89",
$line))?'yes':'no';
if($do == 'yes')
if(ereg("Online", $line))
return '在线';
elseif(ereg("Offline", $line))
return '没在线';
fclose($fp);
return '未知';
$uin='989770'; //我自己的
echo get_status($uin);
全文搜索和替换
全文搜索和替换
exec("/bin/grep -r '$oldword' $rootpath", $results,
$errorCode);
if ($errorCode){
if ($errorCode == 1){
echo "Possibly no files were found with $oldword in
them&BR&\n";
echo "OS Error:
$errorCode&BR&\n";
echo "Check 'man errno' and count
down&BR&\n";
echo "Usually
paths/permissions&BR&\n";
while (list(,$path) = each($results)){
$parts = explode(':', $path);
$path = $parts[0];
$fp = fopen($path, 'r') or print("Cannot read
$path&BR&\n");
$data = fread($fp, filesize($path));
fclose($fp);
$newdata = str_replace($oldword, $newword, $data);
$fp = fopen($path, 'w') or print("Cannot write
$path&BR&\n");
fwrite($fp, $newdata);
fclose($fp);
echo $path, "&BR&\n";
/globalreplace.php?oldword=test&newword=text&rootpath=/path/to/dir
上传图片时生成缩微图象的函数
作者/来源:keniv
上传图片时生成缩微图象的函数
实际应用请看http://feifei2./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]) {
$im = @ImageCreateFromGIF($srcFile);
$im = @imagecreatefromjpeg($srcFile);
$im = @ImageCreateFromPNG($srcFile);
$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)
class getfMd5{
& var $file = "";
& function go(){
fopen($this-&file,"rb");
&&& $msg =
fread($fp,filesize($this-&file));
fclose($fp);
&&& return
md5($msg);
//使用范例(支持二进制文件及文本文件)
$fMd5 = new getfMd5;
$fMd5-&file = "logo.gif";//需要校验MD5值的文件
echo "文件&font
color=red&".$fMd5-&file."的MD5值为&/font&".$fMd5-&go();
生成随机字符串
--------------------------------------------------------------------------------
(文:redhat)
function randPs($start=6,$end=8,$t=0){
&& $type = $t;
&& $r = array(
0=&rand(49,57),//1-9的ASCII码
1=&rand(65,90),//A-Z的ASCII码
2=&rand(97,122)//a-z的ASCII码
&& if($type == 3) $re =
chr($r[rand(0,0)]);
&& else $re =
chr($r[rand(0,2)]);
& $s = rand($start,$end);
&& static $ps = "";
&& while(true){
if(strlen($ps)&=$s) return substr($ps,0,$s);
if($type == 0) $tmp = strtolower($tmp);
else $tmp = $type==1?strtoupper($tmp):$
if(stristr($ps,$tmp) ==
true){randPs($start,$end,$t);}
$ps .= (string)$
&&& return
//使用范例
//随机生成6至8位间小写字母和数字的组合字符串
echo randPs(6,8,0);
PHP下载文件
--------------------------------------------------------------------------------
(文:redhat)
// download.php?name=filename
header("Content-type: application/force-download");
header("Content-Disposition:
filename=".$_GET["name"]);
@readfile('./'.$_GET['name']);
根据某年的不同日期调用不同的模板
--------------------------------------------------------------------------------
(文:Redhat)
//初始化时间段数组
$tm = array(
0=&array("05-08","09-10","a.tpl"),
1=&array("03-04","05-04","b.tpl"),
2=&array("01-01","03-03","c.tpl"),
3=&array("09-11","12-31","d.tpl")
$default_tpl = "default.tpl";
//初始化当前时间
$time = time();
//是否找到相应时间段的模板
//循环每个时间段看看有没有符合条件的
for($i=0;$i&sizeof($tm);$i++)
$tmp1 = explode("-",$tm[$i][0]); //分解第一个时间段
$tmp2 = explode("-",$tm[$i][1]); //分解第二个时间段
mktime(0,0,0,$tmp1[0],$tmp1[1],date("Y"));//把第一个时间段转换成时间秒数
mktime(0,0,0,$tmp2[0],$tmp2[1],date("Y"));//把第二个时间段转换相应的时间秒数
if($t1&$time &&
$t2&$time) {//判断是否在当前的时间段内
$find =//找到
"现在调用时间段为:".$tm[$i][0].":::".$tm[$i][1]."的模板(&font
color=red&$tm[$i][2]&/font&)&br&";//好,输出看看
if(!$find)& echo
"没找到,还是用默认的模板吧&font
color=red&$default_tpl&/font&";//没找到
PHP代码:--------------------------------------------------------------------------------
& $name="zhaohf";
& setcookie("cookiename",$name);
& echo $_cookie["name"];
& echo "&meta http-equiv=refresh
content='1; url=6.php'&";
& echo "&meta http-equiv=refresh
content='1; url=10.php'&";
setcookie("cookiename","");
echo "&meta http-equiv=refresh content='1;
url=11.php'&";
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 php 调用类里的函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信