Web_PHP_PHP基础知识;

PHP基础知识 2014/12/25 23:23


引言:PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。PHP 是免费的,并且使用广泛。对于像微软 ASP 这样的竞争者来说,PHP 无疑是另一种高效率的选项。
一、PHP 简介
前言:PHP 脚本在服务器上执行;服务器需支持PHP;
1、什么是 PHP?
>PHP 是 "PHP Hypertext Preprocessor" 的首字母缩略词;
>PHP 是一种被广泛使用的开源脚本语言;
>PHP 脚本在服务器上执行;
>PHP 没有成本,可供免费下载和使用;


2、经验PHP
PHP 是一门令人惊叹的流行语言!它强大到足以成为在网络上最大的博客系统的核心(WordPress)!它深邃到足以运行最大的社交网络(facebook)!而它的易用程度足以成为初学者的首选服务器端语言!


3、什么是 PHP 文件?
>PHP 文件能够包含文本、HTML、CSS 以及 PHP 代码;
>PHP 代码在服务器上执行,而结果以纯文本返回浏览器;
>PHP 文件的后缀是 ".php";


4、PHP 能够做什么?
>PHP 能够生成动态页面内容;
>PHP 能够创建、打开、读取、写入、删除以及关闭服务器上的文件;
>PHP 能够接收表单数据;
>PHP 能够发送并取回 cookies;
>PHP 能够添加、删除、修改数据库中的数据;
>PHP 能够限制用户访问网站中的某些页面;
>PHP 能够对数据进行加密;
通过 PHP,您可以不受限于只输出 HTML。您还能够输出图像、PDF 文件、甚至 Flash 影片。您也可以输出任何文本,比如 XHTML 和 XML。


5、为什么使用 PHP?
>PHP 运行于各种平台(Windows, Linux, Unix, Mac OS X 等等)
>PHP 兼容几乎所有服务器(Apache, IIS 等等)
>PHP 支持多种数据库
>PHP 是免费的。请从官方 PHP 资源下载:www.php.net
>PHP 易于学习,并可高效地运行在服务器端




二、PHP 安装
1、我需要什么?
>使用支持 PHP 和 MySQL 的 web 主机;
>在PC上安装 web 服务器,然后安装 PHP 和 MySQL;


2、使用支持 PHP 的 Web 主机
如果您的服务器支持 PHP,那么您无需做任何事情。只要创建 .php 文件,然后上传到 web 目录中即可。服务器会自动对它们进行解析。您无需编译或安装任何额外的工具。因为 PHP 是免费的,大多数 web 主机都支持 PHP。


3、在您的 PC 上运行 PHP
不过如果您的服务器不支持 PHP,那么您必须:
>安装 web 服务器;
>安装 PHP;
>安装数据库,比如 MySQL;
官方的 PHP 网站 (PHP.net) 提供 PHP 的安装说明:http://php.net/manual/zh/install.php;
提示:如需在 Windows 平台设置并立即运行 PHP,您还可以:下载 WebMatrix(www.microsoft.com/web/webmatrix);




三、PHP 语法
引言:PHP 脚本在服务器上执行,然后向浏览器发送回纯 HTML 结果。
1、基础 PHP 语法
前言:PHP 脚本可放置于文档中的任何位置。PHP 脚本以 结尾:
   // 此处是 PHP 代码
?>
备注:PHP 文件的默认文件扩展名是 ".php"。PHP 文件通常包含 HTML 标签以及一些 PHP 脚本代码。
(1)、HelloWorld实例



我的第一张 PHP 页面


   echo "Hello World!";
?>


注释:PHP 语句以分号结尾(;)。PHP 代码块的关闭标签也会自动表明分号(因此在 PHP 代码块的最后一行不必使用分号)。


2、PHP 注释
前言:PHP 代码中的注释不会被作为程序来读取和执行。它唯一的作用是供代码编辑者阅读。
注释意义:
>使其他人理解您正在做的工作:注释可以让其他程序员了解您在每个步骤进行的工作(如果您供职于团队);
>提醒自己做过什么:大多数程序员都曾经历过一两年后对项目进行返工,然后不得不重新考虑他们做过的事情;注释可以记录您在写代码时的思路;


// 单行注释
# 单行注释
/*
  多行注释
*/
?>




3、PHP 大小写敏感性
在 PHP 中,所有用户定义的函数、类和关键词(例如 if、else、echo 等等)都对大小写不敏感;所有变量都对大小写敏感;




四、PHP 变量
前言:变量是存储信息的容器;
1、PHP 变量规则
>变量以 $ 符号开头,其后是变量的名称;
>变量名称必须以字母或下划线开头;
>变量名称不能以数字开头;
>变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _);
>变量名称对大小写敏感($y 与 $Y 是两个不同的变量);
注释:PHP 变量名称对大小写敏感!


2、变量创建
PHP 没有创建变量的命令;变量会在首次为其赋值时被创建;
注释:如果您为变量赋的值是文本,请用引号包围该值。请注意我们不必告知 PHP 变量的数据类型。PHP 根据它的值,自动把变量转换为正确的数据类型。


3、变量作用域
说明:变量的作用域指的是,变量能够被引用/使用的那部分脚本。在 PHP 中,可以在脚本的任意位置对变量进行声明。
>local(局部);
>global(全局);
>static(静态);


4、Local 和 Global 作用域
函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。
函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行访问。
$x=5; // 全局作用域


function myTest() {
 $y=10; // 局部作用域
 echo "

测试函数内部的变量:

";
 echo "变量 x 是:$x"; // 不能访问;
 echo "
";
 echo "变量 y 是:$y";

myTest();


echo "

测试函数之外的变量:

";
echo "变量 x 是:$x";
echo "
";
echo "变量 y 是:$y"; // 不能访问;
?>
注释:您可以在不同的函数中创建名称相同的局部变量,因为局部变量只能被在其中创建它的函数识别。


5、global 关键词
说明:global 关键词用于访问函数内的全局变量。要做到这一点,请在(函数内部)变量前面使用 global 关键词。
->global关键词实例
$x=5;
$y=10;
function myTest() {
 global $x,$y;
 $y=$x+$y;
}
myTest();
echo $y; // 输出 15
?>
解说:PHP 同时在名为 $GLOBALS[index] 的数组中存储所有的全局变量。下标存有变量名。这个数组在函数内也可以访问,并能够用于直接更新全局变量。
->global关键词实例(重写)
$x=5;
$y=10;
function myTest() {
 $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];

myTest();
echo $y; // 输出 15
?>


6、static 关键词
前言:通常,当函数完成/执行后,会删除所有变量。不过,有时我需要不删除某个局部变量。实现这一点需要在首次声明变量时使用 static 关键词。
->函数计时器
function myTest() {
 static $x=0; // 计数;
 echo $x;
 $x++;
}
myTest(); // 0;
myTest(); // 1;
myTest(); // 2;
?>
注释:该变量仍然是函数的局部变量。




五、PHP 5 echo 和 print 语句
引言:在 PHP 中,有两种基本的输出方法:echo 和 print。
1、PHP echo 和 print 语句
echo - 能够输出一个以上的字符串;
print - 只能输出一个字符串,并始终返回 1;
提示:echo 比 print 稍快,因为它不返回任何值。


2、PHP echo 语句
前言:echo 是一个语言结构,有无括号均可使用:echo 或 echo()。
(1)、显示字符串
切记:请注意字符串中能包含 HTML 标记
print "

PHP is fun!

";
print "Hello world!
";
print "I'm about to learn PHP!";
?>
(2)、显示变量
功能:用 print 命令来显示字符串和变量
$txt1="Learn PHP";
$txt2="W3School.com.cn";
$cars=array("Volvo","BMW","SAAB");


print $txt1;
print "
";
print "Study PHP at $txt2";
print "My car is a {$cars[0]}";
?>




六、PHP 数据类型
前言:字符串、整数、浮点数、逻辑、数组、对象、NULL。
1、PHP 字符串
前言:字符串是字符序列,比如 "Hello world!"。字符串可以是引号内的任何文本。您可以使用单引号或双引号。


2、PHP 整数
前言:整数是没有小数的数字。
(1)、整数规则
>整数必须有至少一个数字(0-9);
>整数不能包含逗号或空格;
>整数不能有小数点;
>整数正负均可;
>可以用三种格式规定整数:十进制、十六进制(前缀是 0x)或八进制(前缀是 0);
(2)、输出变量信息
说明:PHP var_dump() 会返回变量的数据类型和值
$x = 5985;  // 正数
var_dump($x); // int(5985);
echo "
"; 
$x = -345; // 负数
var_dump($x);
echo "
"; 
$x = 0x8C; // 十六进制
var_dump($x);
echo "
";
$x = 047; // 八进制数
var_dump($x);
?>


3、PHP 浮点数
前言:浮点数是有小数点或指数形式的数字。
(1)、显示浮点数值
备注:PHP var_dump() 会返回变量的数据类型和值;
$x = 10.365;
var_dump($x);
echo "
"; // float(10.365);
$x = 2.4e3;
var_dump($x);
echo "
"; // float(2400);
$x = 8E-5;
var_dump($x); // float(8.0E-5)
?>


4、PHP 逻辑
前言:逻辑是 true 或 false。逻辑常用于条件测试。


5、PHP 数组
前言:数组在一个变量中存储多个值。
(1)、前言:PHP var_dump() 会返回变量的数据类型和值;
$cars=array("Volvo","BMW","SAAB");
var_dump($cars);  // array(3) { [0]=> string(5) "Volvo" [1]=> string(3) "BMW" [2]=> string(4) "SAAB" };
?>


6、PHP 对象
前言:对象是存储数据和有关如何处理数据的信息的数据类型。
切记:在 PHP 中,必须明确地声明对象。要声明对象必须先声明对象的类,对此,使用 class 关键词声明类,类是包含属性和方法的结构。然后我们在对象类中定义数据类型,然后在该类的实例中使用此数据类型;
实例:输出对象属性值对


// php类
class Car
{
    // 属性
    var $color;
    // 构造函数
    function Car($color="green") {
      $this->color = $color;
    }
    // 方法
    function what_color() {
      return $this->color;
    }
}
// 类对象属性键值对输出函数
function print_vars($obj) {
   foreach (get_object_vars($obj) as $prop => $val) {
     echo "\t$prop = $val\n";
   }
}
// 实例化对象
$herbie = new Car("white");
// 显示键值对
echo "\herbie: Properties\n";
print_vars($herbie);
?>  




7、PHP NULL 值
前言:特殊的 NULL 值表示变量无值。NULL 是数据类型 NULL 唯一可能的值。NULL 值标示变量是否为空。也用于区分空字符串与空值数据库。
技巧:通过把值设置为 NULL,将变量清空;
$x="Hello world!";
$x=null;
var_dump($x); // NULL;
?>




七、PHP 字符串函数_2014-12-27 10:59
1、strlen() 函数
说明:strlen() 函数返回字符串的长度,以字符计。
提示:strlen() 常用于循环和其他函数,在确定字符串何时结束很重要时。(例如,在循环中,我们也许需要在字符串的最后一个字符之后停止循环)。


2、strpos() 函数
说明:strpos() 函数用于检索字符串内指定的字符或文本。如果找到匹配,则会返回首个匹配的字符位置。如果未找到匹配,则将返回 FALSE。




八、PHP 常量
前言:常量类似变量,但是常量一旦被定义就无法更改或撤销定义。
1、PHP 常量
常量是单个值的标识符(名称)。在脚本中无法改变该值。有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号)。
注释:与变量不同,常量贯穿整个脚本,是自动全局的。


2、常量设置
说明:如需设置常量,请使用 define() 函数,它使用三个参数:首个参数定义常量的名称;第二个参数定义常量的值;可选的第三个参数规定常量名是否对大小写不敏感,默认是 false(敏感);
实例:对大小写敏感的常量
// 对大小写敏感
define("GREETING", "Welcome to W3School.com.cn!");
echo GREETING;
?>




九、PHP 运算符
1、算数运算符
+、-、*、/、%(模数,求模,求余数);


2、赋值运算符赋值运算符
说明:PHP 赋值运算符用于向变量写值。PHP 中基础的赋值运算符是 "="。这意味着右侧赋值表达式会为左侧运算数设置值。
=、+=、-=、*=、/=、%=;


3、字符串运算符
>. 串接
>.= 串接赋值


4、递增/递减运算符
++$x 前递增 $x 加一递增,然后返回 $x
$x++ 后递增 返回 $x,然后 $x 加一递增
--$x 前递减 $x 减一递减,然后返回 $x
$x-- 后递减 返回 $x,然后 $x 减一递减


5、比较运算符
说明:PHP 比较运算符用于比较两个值(数字或字符串);
== 等于 $x == $y 如果 $x 等于 $y,则返回 true。
=== 全等(完全相同) $x === $y 如果 $x 等于 $y,且它们类型相同,则返回 true。
!= 不等于 $x != $y 如果 $x 不等于 $y,则返回 true。
<> 不等于 $x <> $y 如果 $x 不等于 $y,则返回 true。
!== 不全等(完全不同) $x !== $y 如果 $x 不等于 $y,且它们类型不相同,则返回 true。
> 大于 $x > $y 如果 $x 大于 $y,则返回 true。
< 大于 $x < $y 如果 $x 小于 $y,则返回 true。
>= 大于或等于 $x >= $y 如果 $x 大于或者等于 $y,则返回 true.
<= 小于或等于 $x <= $y 如果 $x 小于或者等于 $y,则返回 true。


6、逻辑运算符
and $x and $y 如果 $x 和 $y 都为 true,则返回 true。
or $x or $y 如果 $x 和 $y 至少有一个为 true,则返回 true。
xor 异或 $x xor $y 如果 $x 和 $y 有且仅有一个为 true,则返回 true。
&& $x && $y 如果 $x 和 $y 都为 true,则返回 true。
|| $x || $y 如果 $x 和 $y 至少有一个为 true,则返回 true。
! !$x 如果 $x 不为 true,则返回 true。


7、数组运算符
说明:PHP 数组运算符用于比较数组;
+ 联合 $x + $y $x 和 $y 的联合(但不覆盖重复的键)
== 相等 $x == $y 如果 $x 和 $y 拥有相同的键/值对,则返回 true。
=== 全等 $x === $y 如果 $x 和 $y 拥有相同的键/值对,且顺序相同类型相同,则返回 true。
!= 不相等 $x != $y 如果 $x 不等于 $y,则返回 true。
<> 不相等 $x <> $y 如果 $x 不等于 $y,则返回 true。
!== 不全等 $x !== $y 如果 $x 与 $y 完全不同,则返回 true。
实例:
$x = array("a" => "red", "b" => "green"); 
$y = array("c" => "blue", "d" => "yellow"); 
$z = $x + $y; // $x 与 $y 的联合;
var_dump($z); // 输出数组信息;
var_dump($x == $y); // false
var_dump($x === $y); // false
var_dump($x != $y); // true
var_dump($x <> $y); // true
var_dump($x !== $y); // true
?>




十、PHP 条件 语句
前言:条件语句用于基于不同条件执行不同的动作;
1、条件语句
if 语句 - 如果指定条件为真,则执行代码
if...else 语句 - 如果条件为 true,则执行代码;如果条件为 false,则执行另一端代码
if...elseif....else 语句 - 选择若干段代码块之一来执行
switch 语句 - 语句多个代码块之一来执行


2、PHP Switch 语句
前言:switch 语句用于基于不同条件执行不同动作。如果您希望有选择地执行若干代码块之一,请使用 Switch 语句。使用 Switch 语句可以避免冗长的 if..elseif..else 代码块。
语法:
switch (expression)
{
case label1:
  code to be executed if expression = label1;
  break;  
case label2:
  code to be executed if expression = label2;
  break;
default:
  code to be executed
  if expression is different 
  from both label1 and label2;
}
工作原理:
>对表达式(通常是变量)进行一次计算;
>把表达式的值与结构中 case 的值进行比较;
>如果存在匹配,则执行与 case 关联的代码;
>代码执行后,break 语句阻止代码跳入下一个 case 中继续执行;
>如果没有 case 为真,则使用 default 语句;




十一、PHP while 循环
前言:PHP while 循环在指定条件为 true 时执行代码块。
1、循环语句
>while - 只要指定条件为真,则循环代码块;
>do...while - 先执行一次代码块,然后只要指定条件为真则重复循环;
>for - 循环代码块指定次数;
>foreach - 遍历数组中的每个元素并循环代码块;




十二、PHP for 循环
前言:PHP for 循环执行代码块指定的次数。
1、PHP for 循环
说明:如果您已经提前确定脚本运行的次数,可以使用 for 循环。
语法:
for (init counter; test counter; increment counter) {
  code to be executed;
}


2、PHP foreach 循环
注意:foreach 循环只适用于数组,并用于遍历数组中的每个键/值对。
语法:
foreach ($array as $value) {
  code to be executed;
}
原理:每进行一次循环迭代,当前数组元素的值就会被赋值给 $value 变量,并且数组指针会逐一地移动,直到到达最后一个数组元素。
实例:
$colors = array("red","green","blue","yellow"); 
foreach ($colors as $value) {
 echo "$value
";
}
?>




十三、PHP 函数
前言:PHP 的真正力量来自它的函数:它拥有超过 1000 个内建的函数。
1、用户定义函数
说明:函数是可以在程序中重复使用的语句块。页面加载时函数不会立即执行。函数只有在被调用时才会执行。
(1)、创建用户定义函数
function functionName() {
   被执行的代码;
}
注释:函数名能够以字母或下划线开头(而非数字)。函数名对大小写不敏感。函数名应该能够反映函数所执行的任务。


2、函数参数
说明:可以通过参数向函数传递信息。参数类似变量。参数被定义在函数名之后,括号内部。您可以添加任意多参数,只要用逗号隔开即可。


3、默认参数值
function setHeight($minheight=50) {
 echo "The height is : $minheight
";
}
?>


4、函数返回值
function sum($x,$y) {
 $z=$x+$y;
 return $z;
}
?>




十四、PHP 数组
前言:数组能够在单独的变量名中存储一个或多个值。
1、什么是数组?
说明:数组是特殊的变量,能够在单一变量名中存储许多值,并且您能够通过引用下标号来访问某个值。


2、创建数组
说明:array() 函数用于创建数组;


3、数组类型
索引数组 - 带有数字索引的数组
关联数组 - 带有指定键的数组
多维数组 - 包含一个或多个数组的数组


4、索引数组
$arrayName = array(arrayValue1,arrayValue2,...arrayValuen);


5、获得数组长度 - 使用count() 函数
说明:count() 函数用于返回数组的长度(元素数);


6、遍历索引数组
$cars=array("Volvo","BMW","SAAB");
$arrlength=count($cars);
for($x=0;$x<$arrlength;$x++) {
  echo $cars[$x];
  echo "
";
}
?>


7、关联数组
说明:关联数组是使用您分配给数组的指定键的数组。
创建:$arrName = array(key=>value);
遍历:如需遍历并输出关联数组的所有值,您可以使用 foreach 循环
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
foreach($age as $x=>$x_value) {
 echo "Key=" . $x . ", Value=" . $x_value;
 echo "
";
}
?>
 
8、多维数组
说明:包含一个或多个数组的数组;




十五、PHP 数组排序
说明:数组中的元素能够以字母或数字顺序进行升序或降序排序。
1、 数组排序函数
sort() - 以升序对数组排序;
rsort() - 以降序对数组排序;
asort() - 根据值,以升序对关联数组进行排序;
ksort() - 根据键,以升序对关联数组进行排序;
arsort() - 根据值,以降序对关联数组进行排序;
krsort() - 根据键,以降序对关联数组进行排序;


2、sort()_升序排序
实例:按照字母升序对数组 $cars 中的元素进行排序
$cars=array("Volvo","BMW","SAAB");
sort($cars);
?>
实例:按照数字升序对数组 $numbers 中的元素进行排序
$numbers=array(3,5,1,22,11);
sort($numbers);
?>


3 、rsort()_降序排序 
4、 asort()
说明:根据值对数组进行升序排序;
实例:根据值对关联数组进行升序排序
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
asort($age);
?>


5、ksort()
说明:根据键对数组进行升序排序
实例:根据键对关联数组进行升序排序
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
ksort($age);
?>


6、 arsort()
说明:根据值对数组进行降序排序
7、 krsort()
说明:根据键对数组进行降序排序




十六、PHP 全局变量 - 超全局变量
前言:超全局变量 在 PHP 4.1.0 中引入,是在全部作用域中始终可用的内置变量。
1、全局变量 - 超全局变量
说明:PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。
$GLOBALS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION


2、$GLOBALS
说明:引用全局作用域中可用的全部变量;
解说:$GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。PHP 在名为 $GLOBALS[index] 的数组中存储所有全局变量。变量的名字就是数组的键。
实例:如何使用超级全局变量 $GLOBALS
// 全局变量
$x = 75; 
$y = 25;
function addition() { 
 // 方法内不能直接访问全局变量
 $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; 
}
addition(); // 执行方法
echo $z; 
?>


3、$_SERVER
说明:$_SERVER 这种超全局变量保存关于报头、路径和脚本位置的信息。
实例:如何使用 $_SERVER 中的某些元素
// 当前执行脚本的文件名
echo $_SERVER['PHP_SELF'];
echo "
";
// 服务器的主机名
echo $_SERVER['SERVER_NAME'];
echo "
";
// 当前请求的 Host 头
echo $_SERVER['HTTP_HOST'];
echo "
";
// 当前页面的完整 URL(不可靠,因为不是所有用户代理都支持)
echo $_SERVER['HTTP_REFERER'];
echo "
";
// 客户代理字串
echo $_SERVER['HTTP_USER_AGENT'];
echo "
";
// 当前脚本的路径
echo $_SERVER['SCRIPT_NAME'];
?>
(1)、$_SERVER元素
$_SERVER['PHP_SELF'] 返回当前执行脚本的文件名。
$_SERVER['GATEWAY_INTERFACE'] 返回服务器使用的 CGI 规范的版本。
$_SERVER['SERVER_ADDR'] 返回当前运行脚本所在的服务器的 IP 地址。
$_SERVER['SERVER_NAME'] 返回当前运行脚本所在的服务器的主机名(比如 www.w3school.com.cn)。
$_SERVER['SERVER_SOFTWARE'] 返回服务器标识字符串(比如 Apache/2.2.24)。
$_SERVER['SERVER_PROTOCOL'] 返回请求页面时通信协议的名称和版本(例如,“HTTP/1.0”)。
$_SERVER['REQUEST_METHOD'] 返回访问页面使用的请求方法(例如 POST)。
$_SERVER['REQUEST_TIME'] 返回请求开始时的时间戳(例如 1577687494)。
$_SERVER['QUERY_STRING'] 返回查询字符串,如果是通过查询字符串访问此页面。
$_SERVER['HTTP_ACCEPT'] 返回来自当前请求的请求头。
$_SERVER['HTTP_ACCEPT_CHARSET'] 返回来自当前请求的 Accept_Charset 头( 例如 utf-8,ISO-8859-1)
$_SERVER['HTTP_HOST'] 返回来自当前请求的 Host 头。
$_SERVER['HTTP_REFERER'] 返回当前页面的完整 URL(不可靠,因为不是所有用户代理都支持)。
$_SERVER['HTTPS'] 是否通过安全 HTTP 协议查询脚本。
$_SERVER['REMOTE_ADDR'] 返回浏览当前页面的用户的 IP 地址。
$_SERVER['REMOTE_HOST'] 返回浏览当前页面的用户的主机名。
$_SERVER['REMOTE_PORT'] 返回用户机器上连接到 Web 服务器所使用的端口号。
$_SERVER['SCRIPT_FILENAME'] 返回当前执行脚本的绝对路径。
$_SERVER['SERVER_ADMIN'] 该值指明 Apache 服务器配置文件中的 SERVER_ADMIN 参数。
$_SERVER['SERVER_PORT'] Web 服务器使用的端口。默认值为 “80”。
$_SERVER['SERVER_SIGNATURE'] 返回服务器版本和虚拟主机名。
$_SERVER['PATH_TRANSLATED'] 当前脚本所在文件系统(非文档根目录)的基本路径。
$_SERVER['SCRIPT_NAME'] 返回当前脚本的路径。
$_SERVER['SCRIPT_URI'] 返回当前页面的 URI。


4、$_REQUEST
说明:PHP $_REQUEST 用于收集 HTML 表单提交的数据。
示例:获取请求参数



Name:


$name = $_REQUEST['fname']; 
echo $name; 
?>




5、PHP $_POST
说明:PHP $_POST 广泛用于收集提交 method="post" 的 HTML 表单后的表单数据。$_POST 也常用于传递变量。
实例:


Name:


$name = $_POST['fname']; 
echo $name; 
?>



6、$_GET
说明:PHP $_GET 也可用于收集提交 HTML 表单 (method="get") 之后的表单数据。$_GET 也可以收集 URL 中的发送的数据。



十七、PHP 表单处理
引言:PHP 超全局变量 $_GET 和 $_POST 用于收集表单数据(form-data)。
1、GET VS POST
GET 和 POST 都创建数组(例如,array( key => value, key2 => value2, key3 => value3, ...))。此数组包含键/值对,其中的键是表单控件的名称,而值是来自用户的输入数据。
GET 和 POST 被视作 $_GET 和 $_POST。它们是超全局变量,这意味着对它们的访问无需考虑作用域 - 无需任何特殊代码,您能够从任何函数、类或文件访问它们。
$_GET 是通过 URL 参数传递到当前脚本的变量数组。$_POST 是通过 HTTP POST 传递到当前脚本的变量数组。


2、何时使用 GET?
通过 GET 方法从表单发送的信息对任何人都是可见的(所有变量名和值都显示在 URL 中)。GET 对所发送信息的数量也有限制。限制在大于 2000 个字符。不过,由于变量显示在 URL 中,把页面添加到书签中也更为方便。
GET 可用于发送非敏感的数据。注释:绝不能使用 GET 来发送密码或其他敏感信息!


3、何时使用 POST?
通过 POST 方法从表单发送的信息对其他人是不可见的(所有名称/值会被嵌入 HTTP 请求的主体中),并且对所发送信息的数量也无限制。
此外 POST 支持高阶功能,比如在向服务器上传文件时进行 multi-part 二进制输入。不过,由于变量未显示在 URL 中,也就无法将页面添加到书签。提示:开发者偏爱 POST 来发送表单数据。




十八、PHP 表单验证
0、PHP 表单验证
提示:在处理 PHP 表单时请重视安全性!
1、实例
(1)、表单规则
Name 必需。必须包含字母和空格。
E-mail 必需。必须包含有效的电子邮件地址(包含 @ 和 .)。
Website 可选。如果选填,则必须包含有效的 URL。
Comment 可选。多行输入字段(文本框)。
Gender 必需。必须选择一项。
(2)、表单代码
// htmlspecialchars()_把预定义字符(特殊字符)转换为 HTML 实体。这意味着 < 和 > 之类的 HTML 字符会被替换为 < 和 > 。
// 这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。
">
Name:
E-mail:
Website:
Comment:
Gender:FemaleMale

(3)、验证数据
>通过htmlspecialchars() 函数,把特殊字符转换为 HTML 实体。
>通过 PHP trim() 函数,去除用户输入数据中不必要的字符(多余的空格、制表符、换行)。
>通过 PHP stripslashes() 函数,删除用户输入数据中的反斜杠(\)。
// 定义变量并设置为空值
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["website"]);
  $comment = test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);
}
// 验证数据
function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>


2、关于 PHP 表单安全性的重要提示
说明:$_SERVER["PHP_SELF"] 变量能够被黑客利用!如果您的页面使用 PHP_SELF,用户能够输入下划线然后执行跨站点脚本(XSS)。
提示:跨站点脚本(Cross-site scripting,XSS)是一种计算机安全漏洞类型,常见于 Web 应用程序。XSS 能够使攻击者向其他用户浏览的网页中输入客户端脚本。
示例:test_form.php表单
">
现在,如果用户进入的是地址栏中正常的 URL:"http://www.example.com/test_form.php",上面的代码会转换为:,到目前,一切正常。
不过,如果用户在地址栏中键入如下 URL:http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E(后面解码为">),在这种情况下,上面的代码会转换为:
这段代码加入一段脚本和一个提示命令。并且当此页面加载后,就会执行 JavaScript 代码(用户会看到一个提示框)。这仅仅是一个关于 PHP_SELF 变量如何被利用的简单无害案例。您应该意识到 ">,无法利用,没有危害!




十九、PHP 表单验证 - 必填字段
1、必填实现代码
// 定义变量并设置为空值
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  // name
  if (empty($_POST["name"])) {
    $nameErr = "Name is required";
  } else {
    $name = test_input($_POST["name"]);
  }
  // email
  if (empty($_POST["email"])) {
    $emailErr = "Email is required";
  } else {
    $email = test_input($_POST["email"]);
  }
  // website
  if (empty($_POST["website"])) {
    $website = "";
  } else {
    $website = test_input($_POST["website"]);
  }
  // comment
  if (empty($_POST["comment"])) {
    $comment = "";
  } else {
    $comment = test_input($_POST["comment"]);
  }
  // gender
  if (empty($_POST["gender"])) {
    $genderErr = "Gender is required";
  } else {
    $gender = test_input($_POST["gender"]);
  }
}
?>


2、 显示错误消息
">
    Name:*
   

    E-mail:*
   

    Website:
   

    Comment:
   

    Gender:FemaleMale*
   

   



二十、PHP 表单验证 - 验证 E-mail 和 URL
引言:如何验证名字、电邮和 URL。
1、 验证名字
注释:preg_match() 函数检索字符串的模式,如果模式存在则返回 true,否则返回 false。
$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name)) { // 匹配字母、空格;
  $nameErr = "只允许字母和空格!"; 
}


2、验证 E-mail
$email = test_input($_POST["email"]);
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
  $emailErr = "无效的 email 格式!"; 
}


3、 验证 URL
$website = test_input($_POST["website"]);
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%
=~_|]/i",$website)) {
  $websiteErr = "无效的 URL"; 
}


4、验证 Name、E-mail、以及 URL
// 定义变量并设置为空值
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";


if ($_SERVER["REQUEST_METHOD"] == "POST") {
  // name
  if (empty($_POST["name"])) {
    $nameErr = "Name is required";
  } else {
    $name = test_input($_POST["name"]);
    // 检查名字是否包含字母和空格
    if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
      $nameErr = "Only letters and white space allowed"; 
    }
  }
  // email
  if (empty($_POST["email"])) {
    $emailErr = "Email is required";
  } else {
    $email = test_input($_POST["email"]);
    // 检查电邮地址语法是否有效
    if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
      $emailErr = "Invalid email format"; 
    }
  }
  // website
  if (empty($_POST["website"])) {
    $website = "";
  } else {
    $website = test_input($_POST["website"]);
    // 检查 URL 地址语言是否有效(此正则表达式同样允许 URL 中的下划线)
    if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%
    =~_|]/i",$website)) {
      $websiteErr = "Invalid URL"; 
    }
  }
  // comment
  if (empty($_POST["comment"])) {
    $comment = "";
  } else {
    $comment = test_input($_POST["comment"]);
  }
  // gender
  if (empty($_POST["gender"])) {
    $genderErr = "Gender is required";
  } else {
    $gender = test_input($_POST["gender"]);
  }
}
?>




二十一、PHP 表单验证 - 完成表单实例
引言:如何在用户提交表单后保留输入字段中的值。


   


    // 定义变量并设置为空值 
$nameErr=$emailErr=$genderErr=$websiteErr="";
$name=$email=$gender=$comment=$website="";
if($_SERVER["REQUEST_METHOD"]=="POST" )
{
if (empty($_POST[ "name"])){
$nameErr="姓名是必填的";}
else{
$name=test_input($_POST["name"]); 
// 检查姓名是否包含字母和空白字符
if (!preg_match("/^[a-zA-Z ]*$/",$name))

$nameErr="只允许字母和空格";
}
}
if(empty($_POST["email"]))
{
$emailErr="电邮是必填的";
}else{
$email=test_input($_POST["email"]); 
// 检查电子邮件地址语法是否有效
if(!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
{
$emailErr="无效的 email 格式" ;
}
}
if(empty($_POST["website"]))
{
$website="";
}else{
$website=test_input($_POST[ "website"]);
// 检查 URL 地址语法是否有效(正则表达式也允许 URL 中的斜杠)
if(!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website))
{
$websiteErr="无效的 URL" ;
}
}
if(empty($_POST["comment"]))
{
$comment="";
}else{
$comment=test_input($_POST["comment"]);
}
if(empty($_POST["gender"]))
{
$genderErr="性别是必选的";
}else{
$gender=test_input($_POST["gender"]);
}
}
// 数据初处理
function test_input($data){
$data=trim($data); // 去除空格;
$data=stripslashes($data); // 去除反斜杠;
$data=htmlspecialchars($data); // 转换标签;
return $data;
}
    ?>
   

PHP 验证实例


   

* 必需的字段


   
">
        姓名:
       
        *
       

       
电邮:
       
        *
       

       
网址:
       
       
       

       
评论:
       
       

       
性别:
        女性
        男性
        *
       

       

       
   

    echo "

您的输入:

";
echo $name;
echo "
";
echo $email;
echo "
";
echo $website;
echo "
";
echo $comment;
echo "
";
echo $gender;
    ?>

你可能感兴趣的:(Web_PHP)