Advertisement

PHP基础教程 是一本极具参考价值的PHP入门指南!

  • 5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
标题:PHP基础教程出处:风流的CG网络日志时间:Mon, 28 Aug 2006 07:24:34 +0000作者:yufeng地址:http:///read.php?38内容:提供给新手学习的 PHP新手教程,是一个比较有价值的PHP新手教程!一、PHP简介PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的WEB站点。本教程并不想让你完全了解这种语言,只是能使你尽快加入开发动态web站点的行列。我假定你有一些HTML(或者HTML编辑器)的基本知识和一些编程思想。1.简介PHP是能让你生成动态网页的工具之一。PHP网页文件被当作一般HTML网页文件来处理并且在编辑时你可以用编辑HTML的常规方法编写PHP。PHP代表:超文本预处理器(PHP: Hypertext Preprocessor)。PHP是完全免费的,不用花钱,你可以从PHP官方站点(http://www.php.net)自由下载。PHP遵守GNU公共许可(GPL),在这一许可下诞生了许多流行的软件诸如Linux和Emacs。你可以不受限制的获得源码,甚至可以从中加进你自己需要的特色。PHP在大多数Unix平台,GUN/Linux和微软Windows平台上均可以运行。怎样在Windows环境的PC机器或Unix机器上安装PHP的资料可以在PHP官方站点上找到。安装过程很简单。如果你的机器解决了2000问题,那么PHP也一样没有千年虫问题!1.1 历史三年前,Rasmus Lerdorf为了创建他的在线简历而创造了个人主页工具(Personal Home Page Tools)。这是一种非常简单的语言。其后越来越多的人们注意到了这种语言并对其扩展提出了各种建议。在许多人的无私奉献下以及这种语言本身的源代码自由性质,它演变成为一种特点丰富的语言,而且现在还在成长中。PHP虽然很容易学习,但是速度上比mod_perl(植入web服务器的perl模块)慢。现在有了可以与mod_perl速度想媲美的被称作Zend的新引擎,而PHP4就可以充分利用这个引擎。PHP4还处在BETA测试阶段。Andy Gutmans和Zeev Suraki是Zend的主要作者。可以去Zend站点(http://www.zend.com)了解更多。PHP的应用在个人性质的web工程中增长显著。根据Netcraft在1999年10月的报告,有931122个域和321128个IP地址利用PHP技术。1.2 PHP的先进之处应用PHP有许多好处。当然已知的不利之处在于PHP由于是开放源码项目,没有什么商业支持,并且由此而带来的执行速度缓慢(直到PHP4之前)。但是PHP的邮件列表很是有用而且除非你正在运行像Yahoo!或者Amazon.com这样的极受欢迎的站点,你不会感觉出PHP的速度与其他的有什么不同。最起码我就没有感觉出来!好了,让我们来看看PHP有那些优点:- 学习过程我个人更喜欢PHP的非常简单的学习过程。与Java和Perl不同,你不必把头埋进100多页的文档中努力学习才可以写出一个象样的程序。只要了解一些基本的语法和语言特色,你就可以开始你的PHP编码之旅了。之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅相关文档。PHP的语法与C,Perl,ASP或者JSP。对于那些对上述之一的语言较熟悉的人来说,PHP太简单了。相反的,如果你对PHP了解较多,那么你对于其他几种语言的学习都很简单了。你只需要30分钟就可以将PHP的核心语言特点全部掌握,你可能已经非常了解HTML,甚至你已经知道怎样用编辑设计软件或者手工来制作好看的WEB站点。由于PHP代码能够无障碍的添加进你的站点,在你设计和维护站点的同时,你可以很轻松的加入PHP使得你的站点更加具有动态特性。- 数据库连接PHP可以编译成具有与许多数据库相连接的函数。PHP与MySQL是现在绝佳的组合。你还可以自己编写外围的函数取间接存取数据库。通过这样的途径当你更换使用的数据库时,可以轻松的更改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。- 可扩展性就像前面说的那样,PHP已经进入了一个高速发展的时期。对于一个非程序员来说为PHP扩展附加功能可能会比较难,但是对于一个PHP程序员来说并不困难。- 面向对象编程PHP提供了类和对象。基于web的编程工作非常需要面向对象编程能力。PHP支持构造器、提取类等。- 可伸缩性传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意这样以CGI方式安装它。内嵌的PHP可以具有更高的可伸缩性。- 更多特点PHP的开发者们为了更适合web编程,开发了许多外围的流行基库,这些库包含了更易用的层。你可以利用PHP连接包括Oracle,MS-Access,Mysql在内的大部分数据库。你可以在苍蝇上画图,编写程序下载或者显示e-mail。你甚至可以完成网络相关的功能。最好的是,你可以选择你的PHP安装版本需要哪些功能。引用Nissan的Xterra的话来说就是PHP可以做到你想让它做到的一切而且无所不能!1.3 竞争对手:ASP,mod_perl,JSP我当然不清楚ASP/JSP能做些什么。不过明确的是编写那样的代码有多简单,购买它们会有多昂贵以及它们需要多么昂贵和强大的硬件。如果你有什么中立的观点(比如说没有被SUN和Microsoft的百万美金所影响),请顺便通知我。据我所知,JSP基于Java,因此Java程序员可以轻松开始编码。ASP只是一个一般的引擎,具有支持多种语言的能力,不过默认的并且是最常用的还是VBScript。mod_perl与Perl一样强大,只是更快一些。二、PHP入门PHP站点的在线教程已经很棒了。在那里还有一些其他教程的链接。而本文的该部分将让你对PHP熟悉一点。我不可能做到没有任何遗漏,我的目的只在于能让你迅速开始你的PHP编程。2.1 首要条件你首先必须要有一个正在工作着的支持PHP的web服务器。我假定在你的服务器上所有PHP文件的扩展名为.php3。2.2 PHP的安装生成一个名为test.php3的文件,含有以下内容:然后在你的浏览器中打开此文件。看看这个页面你就知道你的PHP安装使用的选项了。2.3 语法就像前面提到的一样,你可以混合编写你的PHP代码和HTML代码。因此你必须有办法将两者区别开来。以下就是你可以采用的几种方法。你可以选用其中一种你最适应的并且就这样坚持这种方法!从HTML中分离以下是可以使用的方法:<% . . . %>语句与Perl和C一样,在PHP中用(;)来分隔语句。那些从HTML中分离出来的标志也表示语句的结束。注释PHP支持C,C++和Unix风格的注释方式:/* C,C++风格多行注释 */// C++风格单行注释# Unix风格单行注释Hello,World!通过我们已经学过的知识,你可以编写一个最简单的程序输出一个也许是程序世界中最有名的词语:<?echo Hello World!;?>

First PHP page


2.4 数据类型PHP支持整数、浮点数、字符串、数组和对象。变量类型通常不由程序员决定而由PHP运行过程决定(真是好的解脱!)。但是类型也可以被函数cast或者settype()明确的设定。数值数值类型可以是整数或是浮点数。你可以用以下的语句来为一个数值赋值:$a = 1234; # 十进制数$a = -123; # 负数$a = 0123; # 八进制数 (等于十进制数的83)$a = 0x12; # 十六进制数(等于十进制数的18)$a = 1.234; # 浮点数双精度数$a = 1.2e3; # 双精度数的指数形式字符串字符串可以由单引号或双引号引出的字段定义。注意不同的是被单引号引出的字符串是以字面定义的,而双引号引出的字符串可以被扩展。反斜杠(\)可以被用来分割某些特殊字符。举例如下:$first = Hello;$second = World;$full1 = $first $second; # 产生 Hello World$full2 = $first $second;# 产生 $first $second可以将字符和数字利用运算符号连接起来。字符被转化成数字,利用其最初位置。在PHP手册中有详细的例子。数组与哈希表数组与哈希表以同样的方法被支持。怎样运用取决于你怎样定义它们。你可以用list()或者array()来定义它们,也可以直接为数组赋值。数组的索引从0开始。虽然我在这里没有说明,但是你一样可以轻易的使用多维数组。// 一个包含两个元素的数组$a[0] = first;$a[1] = second;$a[] = third; // 添加数组元素的简单方法// 现在$a[2]被赋值为thirdecho count($a); // 打印出3,因为该是数组有3个元素// 用一个语句定义一个数组并赋值$myphonebook = array (sbabu => 5348,keith => 4829,carole => 4533);// 噢,忘了教长吧,让我们添加一个元素$myphonebook[dean] = 5397;// 你定义的carale元素错了,让我们更正它$myphonebook[carole] => 4522// 我还没有告诉你怎样使用数组的相似支持方式吗?让我们看一看echo $myphonebook[0]; // sbabuecho $myphonebook[1]; // 5348其他一些对数组或哈希表有用的函数包括sort(),next(),prev()和each()。对象使用new语句产生一个对象:class foo{function do_foo (){echo Doing foo.;}}$bar = new foo;$bar->do_foo();改变变量类型在PHP手册中提到:PHP不支持(也不需要)直接在声明变量时定义变量类型;变量类型将根据其被应用的情况决定。如果你为变量var赋值为一个字符串,那么它变成了一个字符串。如果你又为它赋了整数值,那么它就变成了整数。$foo = 0; // $foo是字符串(ASCII 48)$foo++; // $foo是字符串1 (ASCII 49)$foo += 1; // $foo现在是整数(2)$foo = $foo + 1.3; // $foo是一个双精度数(3.3)$foo = 5 + 10 Little Piggies; // $foo是一个整数(15)$foo = 5 + 10 Small Pigs; // $foo是一个整数(15)如果想要强行转换变量类型,可以使用与C语言相同的函数settype()。2.5 变量与常量可能你已经注意到,变量都有一个美元符号($)的前缀。所有变量都是局部变量,为了使得定义的函数中可以使用外部变量,使用global语句。而你要将该变量的作用范围限制在该函数之内,使用static语句。$g_var = 1 ; // 全局范围function test(){global $g_var; // 这样就可以声明全局变量了}更先进一些的是变量的变量表示。请参考PHP手册。这在有时会显得很有用。PHP内置了许多已定义的变量。你也可以用define函数定义你自己的常量,比如define(CONSTANT,value)。2.6 运算符PHP具有C,C++和Java中的通常见到的运算符。这些运算符的优先权也是一致的。赋值同样使用=。算术和字符以下只有一种运算符是有关字符的:$a + $b :加$a - $b :减$a * $b :乘$a / $b :除$a % $b :取模(余数)$a . $b :字符串连接逻辑和比较逻辑运算符有:$a || $b :或$a or $b :或$a && $b :与$a and $b :与$a xor $b :异或 (当$a或$b为true时为true,两者一样时为false)! $a :非比较运算符有:$a == $b :相等$a != $b :不等$a < $b :小于$a <= $b :小于等于$a > $b :大于$a >= $b :大于等于与C一样PHP也有三重运算符(?:)。位操作符在PHP同样存在。优先权就和C以及Java一样!2.7 控制流程结构PHP有着与C一样的流程控制。我将在下面大概介绍。if, else, elseif, if(): endifif (表达式一){. . .}elseif (表达式二){. . .}else{. . .}// 或者像Python一样if (表达式一) :. . .. . .elseif (表达式二) :. . .else :. . .endif ;Loops. while, do..while, forwhile (表达式){. . .}do{. . .}while (表达式);for (表达式一; 表达式二; 表达式三){. . .}//或者像Python一样while (expr) :. . .endwhile ;switchswitch是对多重if-elseif-else结构的最好的替换:switch ($i){case 0:print i equals 0;case 1:print i equals 1;case 2:print i equals 2;}break, continuebreak中断当前的循环控制结构。continue被用来跳出剩下的当前循环并继续执行下一次循环。require, include就像C中的#include预处理一样。你在require中指定的那个文件将替代其在主文件中的位置。在有条件的引用文件时,可以使用include()。这样就使得你可以将复杂的PHP文件分割成多个文件并且在不同需要时分别引用它们。2.8 函数你可以像以下的例子一样定义自己的函数。函数的返回值可以是任何数据类型:function foo (变量名一, 变量名二, . . . , 变量名n){echo Example function.\n;return $retval;}所有PHP代码都可以出现在函数定义中,甚至包括对其他函数和类的定义。函数必须在引用之前定义。2.9 类利用类模型建立类。可以参考PHP手册中对类的详细解释。class Employee{var $empno; // 员工人数var $empnm; // 员工姓名function add_employee($in_num, $in_name){$this->empno = $in_num;$this->empnm = $in_name;}function show(){echo $this->empno, $this->empnm;return;}function changenm($in_name){$this->empnm = $in_name;}}$sbabu = new Employee;$sbabu->add_employee(10,sbabu);$sbabu->changenm(babu);$sbabu->show();三、从实例入手 PHP的许多特点与其他软件或者工具有关。利用迄今为止我们所学到的PHP知识,我们可以试着建立一个简单交互的网站。利用这一过程我们又可以学到不少东西。好吧,我们现在开始专注于一个典型个人网站的建设。3.1 计划一个站点一般一个个人站点包括一个欢迎页面、一个留言本页面、一个书签链接页面、一个计数器、联系信息,甚至还有照片集和一些音乐文件等等。让我们从一个标题页面、一个联系信息页面和一个简历页面开始。我们同样需要标准的通用的页面头部和底部。标题页面--front.html这里我们有一个非常简单的html文件:我的个人主页--欢迎

我的个人主页

欢迎


欢迎来我的寒舍,虽然这里现在暂时还没有什么。

不过我希望马上就可以多起来。


Copyright ? 我自己,1999

联系信息页面--count.html同样我们又有了一个简单页面:我的个人主页--联系信息

我的个人主页

联系信息


你可以通过1-800-PHP-INFO联系我


Copyright ? 我自己,1999

3.2 HTML到PHP从上面你可以看出,每个页面有相同的头部和底部。像上面那样每个页面都写入相同的信息在工作量少的时候还可以,但是想象一下当有100多页面且你需要全部更改其头部或底部时你要花费多大精力?一页一页的手工更改是一件多么冗长无趣的事情啊!所以我们应该为这些页面编写PHP的头部和底部文件,之后我们只要在每个HTML页面中引用它们就行了。我们将把这些include文件放在一个叫include的子目录下。下面我们就把这些站点的通用内容写进文件中。全站通用变量设定:common.inc$MyEmail;$MyName = PHP Talk;$MySiteName = $MyName.s Home Page;?>通用页面头部:header.inc<? echo $MySiteName - $title; ?>


通用页面底部:footer.inc

Copyright ? by, 1999

新的页面front.php3:

欢迎来我的寒舍,虽然这里现在暂时还没有什么。

不过我希望马上就可以多起来。

新的cont.php3:

你可以通过1-800-PHP-INFO联系我

现在你就可以猜出这样安排的好处了。如果你想改动页面的头部或者底部,你只需要改动相应的文件就可以了。如果你要修改你的e-mail地址甚至你的名字,只要修改common.inc文件就行了。另外值得注意的是你可以把具有任何文件名或者文件扩展名的文件包含进你的文件中,你甚至可以包含其他站点上的文件。3.3 计数器让我们在首页上加上一个计数器。这个例子已经被讲过多次了,但是还是有利于演示怎样读写文件以及创建自己的函数。counter.inc包含以下代码:然后我们更改front.php3文件以显示这个计数器:%06d
\n,get_hitcount(counter.txt));include(include/footer.inc);?>看看我们的新front.php33.4 反馈表单让我们再添加一个反馈表单以便你的浏览者填写并e-mail给你。举例来说我们用一种很简单的方法实现它,我们只需要两个页面:一个为浏览者提供输入表单;一个获得表单数据并处理、mail给你。PHP中获取表单数据是很简单的。当一个表单被发送后,表单中所包含的各个元素被赋上了相应的值,而这样就可以像引用一般变量一样使用了。
在process_form.php3中,变量$mytext就被赋予了输入的值--非常简单!同样的,你可以从列表框、多选框、单选框、按钮等表单元素中取得变量值。你唯一要做的就是为表单中的每一个元素取名以便将来可以引用。根据这个方法,我们可以生成一个简单的包含三个元素的表单:姓名、e-mail地址和留言。当浏览者发送表单后,处理该表单的PHP页面(sendfdbk.php3)读取数据,检查姓名是否为空,最后将数据mail给你。表单:form.php3



处理表单:sendfdbk.php3Your name is supposed to be replaced withyour actual name!;}else{// 输出一段礼貌的感谢语echo Hello, $name.
Thank you for your feedback. It is greatly appreciated.
Thanking you
$MyName
$MyEmailLink;// 最后mail出去mail($MyEmail, Feedback.,Name : $nameE-mail : $emailComment : $comment);}include(include/footer.inc);?>3.5 简单的站内搜索引擎PHP可以调用外部程序。在Unix环境下我们可以利用程序grep实现一个简单的搜索引擎。我们可以做的稍微复杂一些:使用一个页面既输出一个表单供用户输入搜索字串又输出查询结果。

METHOD=POST>SIZE=20 MAXLENGTH=30>

\n;// 调用grep对所有文件进行大小写非敏感模式的查询$cmdstr = grep -i $searchstr *;$fp = popen( $cmdstr, r ); // 执行命令并输出管道$myresult = array(); // 存储查询结果while( $buffer = fgetss ($fp, 4096)){// grep返回这样格式: 文件名:匹配字串出现行数// 因此我们利用函数split()分离处理数据list($fname, $fline) = split(:,$buffer, 2);// 我们只输出第一次匹配的结果if ( !defined($myresult[$fname]))$myresult[$fname] = $fline;}// 现在我们将结果存储在数组中,下面就可以处理并输出了if ( count($myresult) ){echo
    \n;while(list($fname,$fline) = each($myresult))echo
  1. $fname : $fline
  2. \n;echo
\n;}else{// 如果没有查询结果echo Sorry. Search on $searchstrreturned no results.
\n;}pclose($fp);}?>注释:PHP_SELF是PHP内建的变量。包含当前文件名。fgets()按行读取文件,最多4096(指定)字符长度。fgetss()与fgets()相似,只是解析输出的HTML标记。split()有一个参数是2,因为我们只需要把输出分成两部分。另外需要省略:。each()是一个数组操作函数,用来更方便的遍历整个数组。popen()、pclose()与fopen()、fclose()的功能很相似,只是增加了管道处理。请注意以上的代码并不是实现一个搜索引擎的好办法。这只是有助于我们更好学习PHP而举出的一个例子而已。理想的情况是你应该建立一个包含关键字的数据库然后进行搜索四、与数据库链接通过PHP你可以轻松的连接到数据库,请求数据并将其显示在你的web站点中,甚至修改数据库中的数据。MySQL是一种很流行的数据库,并且在互联网中有许多有关PHP与MySQL的教程。MySQL是免费的,这一点也许就吸引了不少人。由于其广泛应用,我就不想在这里赘述MySQL的使用方法了。Oracle被大量在企业应用中采用,因此我们就利用Oracle来介绍PHP与数据库的连接。我们当然不会提及Oracle数据库的设计原理,原因是这已经超出了我们的讨论范围。PHP提供了两套函数与Oracle连接,分别是ORA_和OCI函数。其中ORA_函数略显陈旧。OCI函数更新据说更好一些。两者的使用语法几乎相差无几。如前所述,你的PHP安装选项应该可以支持两者的使用。想获得更多有关在Microsoft Windows平台上安装支持PHP3的Apache服务器的知识以及更多有关Oracle数据库的知识,请查阅以下URL:www.csoft.net/~vsbabu/articles/oraphp.html。4.1 连接SUCCESS ! Connected to database\n;}else{echo Failed :-( Could not connect to database\n;}Ora_Logoff($conn);phpinfo();?>以上代码使用TNSNAME(在你的tnsnames.ora文件中指明)定义的Oracle数据库名称、用户名称和密码连接数据库。在成功连接的基础上,ora_logon函数返回一个非零的连接ID并储存在变量$conn中。4.2 查询假设与数据库已经连接就绪,下面我们就来实际的应用对数据库的查询。下面的代码演示了一个连接并查询的典型例子:$conn
\n;echo Opening cursor ...
\n;$cursor=ora_open($conn); printoraerr($cursor);echo Opened cursor - $cursor
\n;$qry=select user,sysdate from dual;echo Parsing the query $qry ...
\n;ora_parse($cursor,$qry,0); printoraerr($cursor);echo Query parsed
\n;echo Executing cursor ...
\n;ora_exec($cursor); printoraerr($cursor);echo Executed cursor
\n;echo Fetching cursor ...
\n;while(ora_fetch($cursor)){$user=ora_getcolumn($cursor,0); printoraerr($cursor);$sysdate=ora_getcolumn($cursor,1); printoraerr($cursor);echo row = $user, $sysdate
\n;}echo Fetched all records
\n;echo Closing cursor ...
\n;ora_close($cursor);echo Closed cursor
\n;echo Logging off from oracle...
\n;ora_logoff($conn);echo Logged off from oracle
\n;?>(译者注:以上代码段缺少注释,请读者参考PHP Manual的Oracle数据库函数部分)4.3 显示结果以下代码演示了怎样查询数据库并将结果输出:n;ora_logoff($conn);exit;}return;}function exequery($w_qry,$conn){$cursor=ora_open($conn); printoraerr($cursor,$conn);ora_parse($cursor,$w_qry,0); printoraerr($cursor,$conn);ora_exec($cursor); printoraerr($cursor,$conn);$numrows=0;$w_numcols=ora_numcols($cursor);// 显示头部echo \n;for ($i=0;$i<$w_numcols;$i++){$align=(ora_columntype($cursor,$i)==NUMBER)?RIGHT:LEFT;echo \t\n;}echo \n;while(ora_fetch($cursor)){echo \n;for ($i=0;$i<$w_numcols;$i++){$align=(ora_columntype($cursor,$i)==NUMBER)?RIGHT:LEFT;if(ora_columntype($cursor,$i)==LONG)echo \n;elseecho \n;printoraerr($cursor,$conn);}$numrows++;echo \n;}if ($numrows==0)echo \n;else{echo \n;echo \n;echo \n;echo \n;}echo
.ora_columnname($cursor,$i).
.ora_getcolumn($cursor,$i).
.ora_getcolumn($cursor,$i).
Query returned no records
Count$numrows
\n;ora_close($cursor);return;}// 主程序if(!($conn=ora_logon(user@SID,password))){echo Error: Cannot connect to database\n;exit;}$qry=SELECTdeptno \Dept\,empno \Emp\,empnm \Name\,salary \Salary\FROMemployeeORDER BY 1,2;exequery($qry);ora_logoff($conn);?>(译者注:以上代码段缺少注释,请读者参考PHP Manual的Oracle数据库函数部分)4.4 基于HTTP的Oracle登录将以下代码加在PHP页面代码之前以确认Oracle登录。注意你必须正确设定$ SID。You are not authorized to enter the site \n;exit;}else{if (!($conn=ora_logon($PHP_AUTH_USER@$SID,$PHP_AUTH_PW))){Header(WWW-authenticate: basic realm=\$SID\);Header(HTTP/1.0 401 Unauthorized);$title=Login Instructions;echo
You are not authorised to enter the site
\n;exit;}}?>五、其它功能5.1 生成图像PHP可以操作处理图像。如果你已经安装了GD库,你甚至可以利用PHP生成图像。(译者注:以上代码段缺少注释,请读者参考PHP Manual的图像处理函数部分)这段代码在其他页面中通过以下标记调用,然后以上的那段button.php3代码取得text值并在另外取得的图像文件中加上该值--在以上的代码中该图像文件是images/button1.gif--最后输出到浏览器。假如你想在表单域中使用图像按钮,但是又不希望在每次按钮上的文字改变后不得不重新生成新的图像,就可以利用这样简单的方法动态生成图像文件。5.2 CookiesPHP支持基于HTTP的cookies。在需要时你可以像使用一般变量一样方便的使用cookie。Cookies是浏览器保存于客户端的一些信息片段,由此你可以知道是否一台特定PC上的任何人都访问过你的站点,浏览者者在你的站点上的踪迹等等。使用cookies的典型例子就是对浏览者偏好的甄别。Cookies由函数setcookie()设定。与输出HTTP标头的函数header()一样,setcookie()必须在任何实际内容杯输出到浏览器之前调用。以下是一个简单例子:;// 读取cookie并判断if ( (time() - $VisitedBefore) >= (60*60*24*7) )echo Why did you take a week to come back. You should be here more often!? ;}?>5.3 基于HTTP验证基于HTTP验证当PHP以CGI模式运行时不能实现。我们可以使用函数header()发送HTTP标头强制验证,客户端浏览器则弹出供输入用户名和密码的对话框。这两个变量被储存在$PHP_AUTH_USER和$PHP_AUTH_PW中,你可以使用这两个变量验证合法并允许进入。以下的例子通过用户名称/密码对为tnc/nature的验证一名用户的登录:事实上再实际引用中不大可能如上面使用代码段明显的用户名称/密码对,而是利用数据库或者加密的密码文件存取它们。5.4 文件上传你可以利用PHP实现文件的功能,注意客户端的浏览器应该是Netscape3以上或者IE3以上。以下就是该功能的简单演示:( upload.html ):Upload Your File



(You may notice a slightdelay while we upload your file.)下面是处理上传的文件:( receiver.php3 ): 2000000 ){$error_msg = Sorry, your file is too large.;return;}$the_time = time ();// 你需要对以下目录有写权限$upload_dir = /local/uploads;$local_file = $upload_dir/$the_time;if ( file_exists ( $local_file ) ){$seq = 1;while ( file_exists ( $upload_dir/$the_time$seq ) ) { $seq++; }$local_file = $upload_dir/$the_time$seq;};rename ( $uploadfile, $local_file );display_page ();}function display_page (){// 这里是你的页面内容}php3 Receiving Script$error_msg


; }if ( $sendit ){do_upload ();}elseif ( $cancelit ){header ( Location: $some_other_script );exit;}else{some_other_func ();}?>5.5 常用函数我们简单来看看一些常用的函数。数组array - 生成数组count - 数组元素个数sort - 数组排序,另有其他几种排序函数可供使用list - 列出数组元素each - 返回下一个key/value对current - 返回当前数组元素next,prev - 传回当前数组元素前后指针日期和时间checkdate - 验证日期/时间格式date - 生成日期/时间格式time - 当前时间信息strftime - 格式化日期/时间目录、文件系统chdir - 改变目录dir - 目录类别opendir, readdir, closedir - 开启、读取、关闭目录fopen, fclose - 开启、关闭文件fgets, fgetss - 逐行读取内容file - 将整个文件读入一个数组变量中正则表达式ereg - 匹配正则表达式eregi - 大小写非敏感匹配正则表达式ereg_replace -匹配正则表达式并替换eregi_replace -大小写非敏感匹配正则表达式并替换split - 依规则切开字符串并以数组形势存储字符串AddSlashes - 加上斜杠后使用字符串echo - 输出一个或多个字符串join, implode - 将数组元素合并为字符串htmlentities, htmlspecialchars - 将HTML特殊字符转换为HTML标记形式split - 依规则切开字符串并以数组形势存储5.6 扩展我们的范例主页我们将使用以上提到的一些函数和思想为我们的范例主页添加更多的动态内容。我们可以在每个页面的顶部加上导航栏,同时使得当前页自动的不被链接显示;同时还可以添加一个用户验证表单以便上传音乐、图像等文件并自动更新页面。导航栏实际上就是在footer.inc文件中加上一段代码。假设你的web站点中所有后缀为.php3的文件都会出现在导航栏中,以下就是被存为include/navbar.inc的代码: | \n;while($entry = $d->read()){// 忽略无文件情况if ( !is_file($entry) )continue;/* 将文件名与扩展名分开。由于.是正则表达式特殊字符,应该用\引出 */list($filenm, $fileext) = split(\.,$entry, 2);// 忽略非.php3文件情况if( $fileext != php3 )continue;/* 现在我们已经把.php3文件都选出,下面搜寻文件中的第一行(标题)类似$title=something;并将以上标题内容分开,用作链接文字 */$linknm = ;$fp=fopen($entry,r);while($buffer=fgets($fp, 4096)){$buffer = trim($buffer);// 我们已经把每个文件的标题放在文件的第一行以便搜索// 但是当你改变变量名称时可能会带来大麻烦if (ereg(title *= *\, $buffer)){/* 我们已经取得了标题内容并可以在此基础上进行去除空格等处理。必须以PHP代码方式处理,比如$title = blah blah */eval($buffer);// 然后将链接文字显示为标题文字$linknm = $title;break;}}fclose($fp);if ( $entry == basename($PHP_SELF) )echo $linknm;elseecho $linknm;echo | ;}$d->close();echo

\n;?>照片收藏夹我们将引用基于HTTP的验证、文件系统函数和文件上传功能维护放置图像文件的目录。同时我们需要建立一个可以列出在该目录下所有照片的页面。文件上传;exit;}}if ( $cancelit ){// 当浏览者按下取消按钮则转向首页面header ( Location: front_2.php3 );exit;}function do_upload () {global $userfile, $userfile_size, $userfile_name, $userfile_type;global $local_file, $error_msg;global $HTTP_REFERER;if ( $userfile == none ) {$error_msg = You did not specify a file for uploading.;return;}if ( $userfile_size > 2000000 ){$error_msg = Sorry, your file is too large.;return;}// Wherever you have write permission below...$upload_dir = photos;$local_file = $upload_dir/$userfile_name;if ( file_exists ( $local_file ) ) {$error_msg = Sorry, a file with that name already exists;return;};// 你还可以由此检查文件名称/类型对以确定是何种文件:gif,jpg,mp3…rename($userfile, $local_file);echo The file is uploaded
\n;echo Go Back
\n;}$title = Upload File;include(include/header.inc);if (empty($userfile) || $userfile==none){// 输出以下表单?>
ENCTYPE=multipart/form-data METHOD=POST>


(You may notice a slight delay while we upload your file.)$error_msg


; }if ( $sendit ) {do_upload ();}}include(include/footer.inc);?>照片图库

Here are some of our family photos. This PHP script can reallybe made better, by splitting into multiple pages.

read()){if (is_file(photos/$entry))echo \n;}$d->close();?>另外,你可以在文件上传的表单中加上一个输入元素去描述该上传的文件。这个元素将被存储在文件中,然后被以上的照片图库的那段代码所读出并显示出来。六、网络资源你可以通过web上的众多资源更多的了解PHP3。许多邮件列表和书籍对你都非常有用。6.1 站点PHP的爆炸性流行使得一夜之间出现了很多基于PHP的站点,其中不少站点有在线教程、范例代码、技巧和提示等内容。国内http://www.phpuser.com - PHP中文用户,也就是这里了http://www.phpx.com - 中国PHP联盟http://www.phpsite.net - PHP专门站http://www.phpchina.com - PHP CHINAhttp://www.cpcw.com/netschool/homepage/cgi/ - 电脑报网页陶吧国外http://www.php.net/ - PHP官方站点http://www.devshed.com/ - 极好的教程http://px.sklar.com - 代码交换http://www.phpbuilder.com/ - 教程、专栏和邮件列表档案http://www.weberdev.com/ - 文章和代码http://www.phpwizard.net/ - 提示与技巧http://www.iometrics.com/php/phplist.php3/ - IOMetrics scripts的档案http://www.e-gineer.com/phpkb/ - PHP知识库6.2 邮件列表你可以在PHP官方站点的支持栏目内登记获得以下的邮件列表。值得注意的是这些都是高流量流表,一般每天会有100份e-mail。php3@lists.php.net - 主要的列表php-dev@lists.php.net - 主要针对开发者php-list@exp.com.cn - 本站的邮件列表,与论坛相通6.3 引人注目的工程一些基于PHP的工程已经发展得比较完善。其中一些更出色更引人注目的是:http:// phplib.netuse.de - PHPLib,一整套PHP函数库http://www.phorum.org - Phorum是一个很完善的BBS系统http://www.fishcartsql.org - FishCartSQL是一个电子商务解决方案http://www.midgard-project.org - Midgard是一个网络应用开发平台Generated by Bo-blog 2.0.2 sp2

全部评论 (0)

还没有任何评论哟~
客服
客服
  • PHP到精通
    优质
    《PHP入门到精通指南》是一本全面介绍PHP编程语言的学习手册,适合初学者循序渐进地掌握PHP基础知识,并逐步深入学习高级应用与最佳实践。 本书专为编程初学者设计,采用简单易懂的语言,并通过大量实例详细介绍使用PHP进行网络开发所需掌握的各项技术。全书共24章,涵盖了从PHP基础知识到高级应用的各个方面,包括但不限于:PHP入门、环境搭建与工具选择、语言基础、流程控制语句、字符串和正则表达式处理、数组操作、Web页面交互技术(含JavaScript)、日期时间管理、Cookie及Session使用方法、图像处理技巧、文件系统操作指南等。此外还涉及面向对象编程理念,加密技术应用,MySQL数据库的基础知识与高级功能,PHP框架如Zend Framework的应用实践以及Smarty模板技术和XML/Ajax集成开发等内容。 书中每个知识点均通过具体实例进行解释,并提供详尽的代码注释以便于理解。本书旨在帮助读者迅速掌握PHP程序设计的核心技能并提高实际项目中的应用能力。书内提供了大量的小型案例、综合示例及部分项目案例,配套光盘包含视频教程与源码下载,“实践与练习”答案等辅助材料;同时,官方服务网站也提供模块库、题库资源以及在线答疑支持。 本书内容全面详实且实例丰富多样,非常适合编程新手作为学习教材使用,同时也可为有经验的开发者们在日常工作中查阅参考。
  • VB(经典
    优质
    《VB基础教程》是一本经典的学习资料,专为编程初学者设计,详细介绍了Visual Basic语言的基础知识和实用技巧,是掌握VB编程技能的理想起点。 当我们沉浸在精彩的游戏世界或惊叹于某个工具软件的巧妙设计后,总会有编写程序的想法涌现出来。在以前的时代,如果你对电脑一窍不通的话,编程简直是不可能完成的任务。特别是在DOS环境下使用C、Qbasic等语言进行编程更是困难重重。 然而,编程需要一定的天赋和清晰的大脑思维能力,并不是每个人都能做到的。这使得它成为一件枯燥乏味的事情。但随着第四代计算机语言(可视化编程)的出现,人们发现他们可以利用自己的想象力创造出从前不敢尝试的程序,不再局限于那些天生具有逻辑思考力的人。 Visual Basic (VB) 作为早期最著名的可视化编程工具之一,在过去几年间经历了五个版本的发展,并且微软正在积极开发它的第六版。这表明了用户对 VB 的热爱以及微软对其的支持力度。可以说,微软在预测市场趋势方面非常准确,其强大的技术与资金支持使得它能够在短时间内成为许多未涉足领域的强有力竞争者。 目前VB有一个强有力的竞争对手——Delphi ,有人甚至称它为“VB杀手”。不过这种说法可能有些偏颇了,因为两者都有各自的优缺点。然而鉴于微软对 VB 的投入和热情,可以预见 VB 将会变得越来越强大。
  • ArcPy:ArcGIS Python
    优质
    本书为初学者提供了一条学习ArcGIS与Python集成之道,通过详细的实例讲解了如何使用ArcPy模块进行空间数据处理和分析。适合地理信息科学及相关专业的学生及从业者阅读。 ArcPy基础教程为那些想要学习如何使用Python进行ArcGIS操作的初学者提供了入门指导。该教程涵盖了从基本概念到实用技巧的所有内容,帮助用户快速掌握在地理信息系统中运用Python的能力。
  • 三JS-中文
    优质
    《三JS入门指南-中文基础教程》是一本专为初学者设计的学习资源,旨在通过简单易懂的方式教授JavaScript编程语言的基础知识和实用技巧。本书涵盖了从变量、数据类型到函数、DOM操作等内容,帮助读者快速掌握前端开发必备技能,轻松上手编写网页交互效果。 对于初学者来说,学习Three.js和WebGL是一个很好的开始。Three.js是一款功能强大的JavaScript库,用于在网页上创建3D图形和动画效果。它简化了使用WebGL进行开发的复杂性,并且提供了大量实用的功能来帮助开发者快速构建复杂的三维场景。 寻找合适的教程是入门的关键步骤之一。有许多在线资源可以提供从基础到高级的各种Three.js教程,适合不同水平的学习者参考学习。这些教程通常会涵盖如何设置项目、创建基本几何体、添加光源和材质等基础知识,并逐步深入介绍动画效果以及交互功能的实现方法。 通过实践练习来巩固理论知识是非常重要的。动手尝试构建自己的3D场景可以帮助你更好地理解Three.js的工作原理及其应用潜力。随着技能的增长,探索更多高级特性如物理模拟或粒子系统等功能也将成为可能。
  • PHP与实战(含源码)
    优质
    《PHP编程入门与实战指南(含源码)》是一本全面介绍PHP语言基础及应用实践的教程书籍,适合初学者快速掌握PHP开发技能。书中不仅涵盖了语法、框架使用等内容,还提供了丰富的案例和配套源代码,帮助读者将理论知识应用于实际项目中。 HP作为一种简单易学且功能强大的脚本语言,在开发WEB应用程序方面表现出色。本书以由浅入深、循序渐进的方式系统地介绍了PHP的相关知识及其在WEB应用程序开发中的实际应用,并通过具体案例帮助读者巩固所学,更好地进行实践操作。全书共分为13章,内容包括PHP开发环境的搭建、基本语法介绍、FORM表单处理技术、数据库设计原则及实现方法、如何使用PHP与各种类型的数据库建立连接和交互等实用技能,以及会话控制机制的应用实例和界面美化技巧等内容。 本书由孔祥盛主编编写,其内容详实且讲解深入浅出,适合初学者入门学习的同时也能够满足有一定基础的中级用户的需求。此外,它还适合作为各类院校相关专业的教材使用,并为广大PHP爱好者提供了一本实用参考手册。
  • PHP
    优质
    《PHP教学指南》是一本全面介绍PHP编程语言的基础教程,内容涵盖语法结构、Web开发技术及案例实践,适合初学者快速入门与进阶学习。 PHP是一种广泛使用的服务器端脚本语言,主要用于Web开发。它能够嵌入HTML文档中,并且运行在服务器上生成动态网页内容。学习PHP可以帮助开发者创建交互性强、功能丰富的网站应用。 对于初学者来说,掌握基本的编程概念和语法是十分重要的。这包括变量、数组、条件语句(如if-else)、循环结构以及函数等基础知识点的学习与实践。随着技能的增长,可以逐步深入到面向对象编程(OOP)的概念和技术中去。 此外,在实际项目开发过程中还应注重数据库操作技巧的应用,比如使用MySQLi或PDO库来连接和管理关系型数据库系统(RDBMS),实现数据存储、查询等功能的高效处理。 总之,通过系统地学习PHP语言及其相关技术栈,可以为构建高质量网站应用奠定坚实的基础。
  • 经典李逵劈鱼游戏,
    优质
    李逵劈鱼是一款深受玩家喜爱的经典捕鱼游戏。该游戏以其独特的玩法和丰富的奖励机制而闻名,为同类游戏提供了宝贵的设计思路与灵感来源。 李逵劈鱼HGE带控制机器人是经典李逵劈鱼游戏的一种变体,具有很高的参考价值。这款子游戏在保留原作精髓的基础上增加了新的玩法元素,为玩家提供了更加丰富的娱乐体验。
  • PHP代码示例
    优质
    《PHP基础教程代码示例》是一本针对初学者设计的手册,通过丰富的实例讲解了PHP语言的基础知识和编程技巧,帮助读者快速掌握网站后端开发技能。 PHP基础教程源码提供了一系列入门级的代码示例和文档,帮助初学者快速掌握PHP编程的基础知识和技术要点。这些资源包括了从变量、数组到函数、面向对象等核心概念的学习材料,非常适合想要学习或提高自己PHP技能水平的朋友使用。
  • FF14商业辅助C++完整源码含脚
    优质
    这是一套完整的Final Fantasy XIV商业辅助工具C++源代码,内附详细脚本。这套代码集实用性和技术性于一体,对于游戏开发和编程爱好者具有极高的学习和参考价值。 FF14辅助脚本的参考编写方法如下:全套代码编译后可以直接使用。请注意,在分享和使用此类工具时,请遵守相关游戏的服务条款和社区准则。
  • PHP、MySQL与Apache编(原著第四版)
    优质
    本书是针对初学者编写的PHP、MySQL和Apache集成环境编程教程,详细讲解了如何使用这三种技术进行网页开发。 《PHP、MySQL和Apache编程导学(原书第4版)》PDF高清扫描版电子书是一本详细介绍如何使用PHP、MySQL和Apache进行网页开发的书籍。这本书适合初学者,也包含了足够的深度以满足有经验开发者的需求。书中内容涵盖了从基础语法到高级应用的各种主题,并提供大量示例代码帮助读者更好地理解概念和技术细节。