CGI的基本概念
HTML用户虽然可以通过表单将数据发送到Web服务器,但是HTML无法与数据库交互。这就需要在HTML网页与数据库之间架设一个沟通的渠道,这就是通用网关接口(Common Gateway Interface,CGI)。它也是万维网动态网页机制之一。CGI是外部扩展应用程序(例如Perl编写的Perl脚本语言)与Web服务器交互的一种通用的接口标准。按照CGI标准编写的外部扩展应用程序可以处理客户端浏览器输入(例如表单方式)的需要协同工作的数据,并将相应的处理结果给浏览器。从而完成客户端与服务器的交互操作,大大扩展了Web提供的功能。
PHP的简单程序
将该程序存放在apache根目录下的greeting.php文件中
1 <html> 2 <head> 3 <title>The First Greeting from PHP </title> 4 </head> 5 <body> 6 <? 7 echo "hello,$name "; 8 ?> 9 </body> 10 </html>
打开浏览器,在地址栏输入http://localhost/greeting.php?name=Cheng,回车。从IE中查看源文件的PHP输出,可以看到6-8行变为"hello,Cheng"。
PHP网页除了需要Web服务器和浏览器的参与外,还需要经过CGI模块处理才能显示(本例中用的是Aache的PHP解释模块);PHP网页的程序参数(或变量)可以从地址栏附在网页的URL一起输入,如网址后附带的"?name=Cheng",等号左边是变量名,右侧的是变量值,当需要输入的数据项多于一项时,数据项之间要用"&"号隔开。
<1>将PHP程序嵌入网页的方法:
<? echo("这是第一个PHP语言的嵌入例子 "); ?> 规范形式 <?php echo("这是第二个PHP语言的嵌入例子 "); ?>
<2>PHP中引用文件的方法
a,require("MyRequiredFile.php");
该函数一般放在PHP程序的最前面,PHP程序在执行前,就会先读入require语句所指定引入的文件,使它变成PHP网页的一部分。用此方法可将常用的函数引入网页中
b,include("MyRequiredFile.php");
该函数一般放在流程控制中。PHP程序网页在读到include语句时,才将相关的文件读进来。这样可把流程处理程序简化,增强可读性
<3>PHP的注释: 可用"//"或"/* */"
PHP的常量,变量和数据类型
说明:PHP是一种弱类型的程序语言,即一个变量可以存储任意类型的数据;
定义或分配简单的数据类型(标量或数组),第一次使用变量名就相当于定义它;
PHP中的变量名区分大小写,不能以数字字符开始。
<1>PHP基本数据类型
布尔型:它的值可以为TURE或FALSE。这些情况也被认为是FALSE:0,0.0,"0",空白字符串(""),只声明没有赋值的数组等。
整数:$integer=100;//十进制 $integer=0666;//八进制 $integer=0x888;//十六进制
浮点型(float/double): $php=1.2; $php=1.0E3;//科学计数 $php=7e-6;
字符串:可给字符串加单引号,双引号
<2>内置环境变量和常量
__ FILE__,执行中的PHP程序文件名
__LINE __,执行中PHP程序行数
PHP_VISION,PHP程序的版本
PHP_OS,执行PHP的操作系统名称
TRUE,真值
FALSE,假值
E_ERROR,指向最近的错误处
所有以E_开头形式的常量,可以参考PHP手册中,error_reporting()函数
自定义所需的常量:define("PI", "3.14"); echo PI;
<3>PHP变量类型
标量:用来记录单个信息,一次保存四种基本数据类型中的一种
数组:存储数值的列表
$arr_names[]='Jack'; $arr_names[]='Tom'; //arr_names第一次使用,这两个元素的下标分别为0,1
$arr_animal['panda']='rare animal'; 或$arr_animal=array('panda'=>'rare animal' , 'dog'=>'home animal'); //用于数组下标的字符串须用单引号括起来,且不能有空格
$arr_mixed=array(2,54,‟Jack‟=>'the first name','application'); //混合下标,数组下标分别为0、1、'Jack'和2
多维数组:
$arr_books=array('book1'=>array('name'=>'The New History' , 'pages' => 400) , 'book2'=>array('name'=>'Children of the Mind' , 'pages'=>500));
echo $arr_books['book1']['pages'];
$arr_books['book1']['author']='Orson Scott Card'; //多维数组随时都可以加入需要的元素
对象:存储变量信息和函数
资源变量:用来保存了对外部资源的引用所得到得结果
PHP运算符和函数
<1>字符串的连接符:$a="hello"; echo $a.','.'world'.'<br>';
算术运算符,赋值运算符:$a+=5; $b="我"; $b.="们"; //$b="我们";
逻辑运算符:&& || !
区地址运算符:$a表示一个标量,&$a表示实际存储标量$a的地址
三元运算符:(expr1)? (expr2): (expr3);
三种语言结构:顺序,分支,循环,switch(expr)
<2>PHP函数分为两类:有返回值的函数和无返回值的函数,相当于Pascal中的函数(function)和过程(procedure),两者的区别在于是否有return
函数的定义:function func_name (参数列表) { 函数功能 } //其返回值可以是个标量或数组
按值调用和按址调用:
<? //按值调用 function add1($value) {$value++;} $a = 2; add1($a); echo "$a<br>"; //$a=2 ?> <? //按址调用 function add2(&$value) {$value++;} $a = 2; add2($a); echo "$a<br>"; //$a=3 ?>
PHP函数
PHP网页参数传递
<1>$_POST['表单控件名']
$_GET['参数名']
应用举例:(与前文中的表单标记对应)
//wp2.php <html> <body> <?php //显示函数 function echo_message($u_type) { $u_type = $_POST[$u_type]; if( $u_type == "我的建议是:") $u_type = ""; if( $u_type == "") $u_type="(空)"; echo "<font color=red>".$u_type."</font>"; } //显示擅长语言函数 function echo_lang() { $lang = $_POST[language]; $j = count($lang); for($i=0;$i<$j;$i++) { echo "<font color=red>".$lang[$i]."</font> "; } } ?> 姓名:<?php echo_message('myname');?><br> 用户名:<?php echo_message('user');?><br> 性别:<?php echo_message('gender');?><br> 血型:<?php echo_message('bloodtype');?><br> 擅长语言:<?php echo_lang();?><br> 最擅长操作系统:<?php echo_message('OS');?><br> 上传的文件:<?php echo_message('upload');?><br> 建议:<?php echo_message('advice');?><br> <button>确认</button> </body> </html>
<2>SESSION会话的使用
session_start() :开始一个会话或者返回已经存在的会话
$_SESSION['xxx']=xxx :注册SESSION全局变量。和GET,POST,COOKIE的使用方法相似,具体使用如下:
<?php //w1.php session_start(); //使用SESSION前必须调用该函数。 $_SESSION['name']="我是黑旋风李逵!"; //注册一个SESSION变量 $_SESSION['passwd']="mynameislikui"; $_SESSION['time']=time(); echo "<br /><a href='w2.php'>通过COOKIE传递SESSION</a>"; //如果客户端支持cookie,可通过该链接传递session到下一页。 echo "<br /><a href='w2.php?" . SID ."'>通过URL传递SESSION</a>";//客户端不支持cookie时,使用该办法传递session. ?> <?php //w2.php session_start(); echo $_SESSION['name']."<br>"; echo $_SESSION['passwd']."<br>"; echo date('Y m d H:i:s',$_SESSION['time'])."<br>"; echo "<br /><a href='w1.php'>返回上一页</a>"; ?>
session_id() :用于设定或取得当前session_id,php5也可以通过附加在url上的SID取得当前会话的session_id和session_name。若session_id()有具体指定值,则取代当前的session_id值。使用前先启动会话session_start()
isset($_SESSION['xxx'] :检查session是否存在
session_regenerate_id() :更改session_id,成功返回true,失败返回false。使用该函数可以为当前session更改session_id,但不改变当前session的其他信息
session_name() :返回当前session的name或改变当前session的name。若要改变当前session的name,必须在session_start()之前调用该函数。注意:session_name不能只由数字组成,它至少包含一个字母。
unset ($_SESSION['xxx']) :删除单个session
unset($_SESSION) :此函数千万不可使用,它会将全局变量$_SESSION销毁,而且还没有可行的办法将其恢复。用户也不再可以注册$_SESSION变量。
$_SESSION=array() 删除多个session
<?php session_start(); $old_sessionid = session_id(); session_regenerate_id(); $new_sessionid = session_id(); echo "原始 SessionID: $old_sessionid<br />"; echo "新的 SessionID: $new_sessionid<br />"; echo"<pre>"; print_r($_SESSION); echo"</pre>"; ?> 结果是: 原始 SessionID: 2a218c061f4964ee0d0209ebc70a4f8e 新的 SessionID: 0f34199b49e7cbc8804387b5a61d21d8 Array ( [name] => 我是黑旋风李逵! [passwd] => mynameislikui [time] => 1417957843 )