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 文件的默认文件扩展名是 ".php"。PHP 文件通常包含 HTML 标签以及一些 PHP 脚本代码。
(1)、HelloWorld实例
<!DOCTYPE html>
<html>
<body>
<h1>我的第一张 PHP 页面</h1>
<?php
   echo "Hello World!";
?>
</body>
</html>
注释:PHP 语句以分号结尾(;)。PHP 代码块的关闭标签也会自动表明分号(因此在 PHP 代码块的最后一行不必使用分号)。


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


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 作用域,只能在函数内部进行访问。
<?php
$x=5; // 全局作用域


function myTest() {
 $y=10; // 局部作用域
 echo "<p>测试函数内部的变量:</p>";
 echo "变量 x 是:$x"; // 不能访问;
 echo "<br>";
 echo "变量 y 是:$y";

myTest();


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


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

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


6、static 关键词
前言:通常,当函数完成/执行后,会删除所有变量。不过,有时我需要不删除某个局部变量。实现这一点需要在首次声明变量时使用 static 关键词。
->函数计时器
<?php
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 标记
<?php
print "<h2>PHP is fun!</h2>";
print "Hello world!<br>";
print "I'm about to learn PHP!";
?>
(2)、显示变量
功能:用 print 命令来显示字符串和变量
<?php
$txt1="Learn PHP";
$txt2="W3School.com.cn";
$cars=array("Volvo","BMW","SAAB");


print $txt1;
print "<br>";
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() 会返回变量的数据类型和值
<?php 
$x = 5985;  // 正数
var_dump($x); // int(5985);
echo "<br>"; 
$x = -345; // 负数
var_dump($x);
echo "<br>"; 
$x = 0x8C; // 十六进制
var_dump($x);
echo "<br>";
$x = 047; // 八进制数
var_dump($x);
?>


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


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


5、PHP 数组
前言:数组在一个变量中存储多个值。
(1)、前言:PHP var_dump() 会返回变量的数据类型和值;
<?php 
$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 关键词声明类,类是包含属性和方法的结构。然后我们在对象类中定义数据类型,然后在该类的实例中使用此数据类型;
实例:输出对象属性值对
<html>
<body>
<?php
// 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);
?>  
</body>
</html>


7、PHP NULL 值
前言:特殊的 NULL 值表示变量无值。NULL 是数据类型 NULL 唯一可能的值。NULL 值标示变量是否为空。也用于区分空字符串与空值数据库。
技巧:通过把值设置为 NULL,将变量清空;
<?php
$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(敏感);
实例:对大小写敏感的常量
<?php
// 对大小写敏感
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。
实例:
<?php
$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 变量,并且数组指针会逐一地移动,直到到达最后一个数组元素。
实例:
<?php 
$colors = array("red","green","blue","yellow"); 
foreach ($colors as $value) {
 echo "$value <br>";
}
?>




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


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


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


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




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


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


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


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


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


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


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




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


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


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


5、ksort()
说明:根据键对数组进行升序排序
实例:根据键对关联数组进行升序排序
<?php
$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
<?php 
// 全局变量
$x = 75; 
$y = 25;
function addition() { 
 // 方法内不能直接访问全局变量
 $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; 
}
addition(); // 执行方法
echo $z; 
?>


3、$_SERVER
说明:$_SERVER 这种超全局变量保存关于报头、路径和脚本位置的信息。
实例:如何使用 $_SERVER 中的某些元素
<?php 
// 当前执行脚本的文件名
echo $_SERVER['PHP_SELF'];
echo "<br>";
// 服务器的主机名
echo $_SERVER['SERVER_NAME'];
echo "<br>";
// 当前请求的 Host 头
echo $_SERVER['HTTP_HOST'];
echo "<br>";
// 当前页面的完整 URL(不可靠,因为不是所有用户代理都支持)
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
// 客户代理字串
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
// 当前脚本的路径
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 表单提交的数据。
示例:获取请求参数
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php 
$name = $_REQUEST['fname']; 
echo $name; 
?>
</body>
</html>


5、PHP $_POST
说明:PHP $_POST 广泛用于收集提交 method="post" 的 HTML 表单后的表单数据。$_POST 也常用于传递变量。
实例:
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php 
$name = $_POST['fname']; 
echo $name; 
?>
</body>


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


<PHP  表单>
十七、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 字符会被替换为 &lt; 和 &gt; 。
// 这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>
Gender:<input type="radio" name="gender" value="female">Female<input type="radio" name="gender" value="male">Male
</form>
(3)、验证数据
>通过htmlspecialchars() 函数,把特殊字符转换为 HTML 实体。
>通过 PHP trim() 函数,去除用户输入数据中不必要的字符(多余的空格、制表符、换行)。
>通过 PHP stripslashes() 函数,删除用户输入数据中的反斜杠(\)。
<?php
// 定义变量并设置为空值
$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表单
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
现在,如果用户进入的是地址栏中正常的 URL:"http://www.example.com/test_form.php",上面的代码会转换为:<form method="post" action="test_form.php">,到目前,一切正常。
不过,如果用户在地址栏中键入如下 URL:http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E(后面解码为"><script>alert('hacked')</script>),在这种情况下,上面的代码会转换为:<form method="post" action="test_form.php"><script>alert('hacked')</script>。
这段代码加入一段脚本和一个提示命令。并且当此页面加载后,就会执行 JavaScript 代码(用户会看到一个提示框)。这仅仅是一个关于 PHP_SELF 变量如何被利用的简单无害案例。您应该意识到 <script> 标签内能够添加任何 JavaScript 代码!黑客能够把用户重定向到另一台服务器上的某个文件,该文件中的恶意代码能够更改全局变量或将表单提交到其他地址以保存用户数据,等等。


3、如何避免 $_SERVER["PHP_SELF"] 被利用?
说明:通过使用 htmlspecialchars() 函数能够避免 $_SERVER["PHP_SELF"] 被利用。
解释;表单代码是这样的:<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">,htmlspecialchars() 函数把特殊字符转换为 HTML 实体。现在,如果用户试图利用 PHP_SELF 变量,会导致如下输出:<form method="post" action="test_form.php/"><script>alert('hacked')</script>">,无法利用,没有危害!




十九、PHP 表单验证 - 必填字段
1、必填实现代码
<?php
// 定义变量并设置为空值
$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、 显示错误消息
<form method="post" action="<?php echo htmlspecialchars($_SERVER[" PHP_SELF "]);?>">
    Name:<input type="text" name="name"><span class="error">* <?php echo $nameErr;?></span>
    <br>
    E-mail:<input type="text" name="email"><span class="error">* <?php echo $emailErr;?></span>
    <br>
    Website:<input type="text" name="website"><span class="error"><?php echo $websiteErr;?></span>
    <br>
    Comment:<textarea name="comment" rows="5" cols="40"></textarea>
    <br>
    Gender:<input type="radio" name="gender" value="female">Female<input type="radio" name="gender" value="male">Male<span class="error">* <?php echo $genderErr;?></span>
    <br>
    <input type="submit" name="submit" value="Submit">
</form>


二十、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
<?php
// 定义变量并设置为空值
$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 表单验证 - 完成表单实例
引言:如何在用户提交表单后保留输入字段中的值。
<html>
<head>
    <style>
        .error {
            color: #FF0000;
        }
    </style>
</head>
<body>
    <?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;
}
    ?>
    <h2>PHP 验证实例</h2>
    <p><span class="error">* 必需的字段</span></p>
    <form method="post" action="<?php echo htmlspecialchars($_SERVER[" PHP_SELF "]);?>">
        姓名:
        <input type="text" name="name">
        <span class="error">* <?php echo $nameErr;?></span>
        <br>
        <br> 电邮:
        <input type="text" name="email">
        <span class="error">* <?php echo $emailErr;?></span>
        <br>
        <br> 网址:
        <input type="text" name="website">
        <span class="error"><?php echo $websiteErr;?></span>
        <br>
        <br> 评论:
        <textarea name="comment" rows="5" cols="40"></textarea>
        <br>
        <br> 性别:
        <input type="radio" name="gender" value="female">女性
        <input type="radio" name="gender" value="male">男性
        <span class="error">* <?php echo $genderErr;?></span>
        <br>
        <br>
        <input type="submit" name="submit" value="提交">
    </form>
    <?php 
echo "<h2>您的输入:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
    ?>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值