PHP 语言的基础语法(三)

2022-10-11 20:57:44 196 0
魁首哥

PHP 表单和用户输入

PHP 的 $_GET 和 $_POST 用于检索表单中的值,比如用户输入。

PHP 语言的基础语法(三)

PHP 表单处理

表单实例:

Welcome .php” method=”post”>

Name:

Age:

上面的 HTML 页面实例包含了两个输入框和一个提交按钮。当用户填写该表单并单击提交

按钮时,表单的数据会被送往 “welcome.php” 这个文件。

“welcome.php” 文件类似这样:

Welcome .

You are years old.

上面这个脚本的输出样本类似这样:

Welcome John.

You are 28 years old.

我们将在下一章解释 PHP $_GET 和 $_POST。

表单验证

应该在任何可能的时候对用户输入进行验证。客户端的验证速度更快,并且可以减轻服务器

的负载。

不过,任何流量很高以至于不得不担心服务器资源的站点,也有必要担心站点的安全性。如

果表单访问的是数据库,就非常有必要采用服务器端的验证。

在服务器验证表单的一种好的方式是,把表单传给它自己,而不是跳转到不同的页面。这样

用户就可以在同一张表单页面得到错误信息。用户也就更容易发现错误了。

PHP $_GET

$_GET 变量用于收集来自 method=”get” 的表单中的值。

$_GET 变量

$_GET 变量是一个数组,内容是由 HTTP GET 方法发送的变量名称和值。

$_GET 变量用于收集来自 method=”get” 的表单中的值。从带有 GET 方法的表单发送的信

息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送的信息量也有限制(最

多 100 个字符)。

例子

Name:

Age:

当用户点击提交按钮时,发送的 URL 会类似这样:

“welcome.php” 文件现在可以通过 $_GET 变量来获取表单数据了(请注意,表单域的名称会

自动成为 $_GET 数组中的 ID 键):

Welcome .

You are years old!

为什么使用 $_GET?

注释:在使用 $_GET 变量时,所有的变量名和值都会显示在 URL 中。所以在发送密码或

其他敏感信息时,不应该使用这个方法。不过,正因为变量显示在 URL 中,因此可以在收

藏夹中收藏该页面。在某些情况下,这是很有用的。

注释:HTTP GET 方法不适合大型的变量值;值是不能超过 100 个字符的。

$_REQUEST 变量

PHP 的 $_REQUEST 变量包含了 $_GET, $_POST 以及 $_COOKIE 的内容。

PHP 的 $_REQUEST 变量可用来取得通过 GET 和 POST 方法发送的表单数据的结果。

例子

Welcome .

You are years old!

PHP $_POST

$_POST 变量用于收集来自 method=”post” 的表单中的值。

$_POST 变量

$_POST 变量是一个数组,内容是由 HTTP POST 方法发送的变量名称和值。

$_POST 变量用于收集来自 method=”post” 的表单中的值。从带有 POST 方法的表单发送的

信息,对任何人都是不可见的(会显示在浏览器的地址栏),并且对发送信息的量也没有限

制。

例子

Enter your name:

Enter your age:

当用户点击提交按钮,URL 不会含有任何表单数据,看上去类似这样:

“welcome.php” 文件现在可以通过 $_POST 变量来获取表单数据了(请注意,表单域的名称

会自动成为 $_POST 数组中的 ID 键):

Welcome .

You are years old!

为什么使用 $_POST?

· 通过 HTTP POST 发送的变量不会显示在 URL 中。

· 变量没有长度限制。

不过,由于变量不显示在 URL 中,所有无法把页面加入书签。

$_REQUEST 变量

PHP 的 $_REQUEST 变量包含了 $_GET, $_POST 以及 $_COOKIE 的内容。

PHP 的 $_REQUEST 变量可用来取得通过 GET 和 POST 方法发送的表单数据的结果。

例子

Welcome .

You are years old!

PHP Date()

PHP 的 date() 函数用于格式化时间或日期。

PHP Date() 函数

PHP Date() 函数可把时间戳格式化为可读性更好的日期和时间。

语法

date(format,timestamp)

参数描述

format 必需。规定时间戳的格式。

timestamp 可选。规定时间戳。默认是当前的日期和时间。

PHP 日期 – 什么是时间戳(Timestamp)?

时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)以来的秒数。它也被称为 Unix 时间戳

(Unix Timestam)。

PHP 日期 – 格式化日期

date() 函数的第一个参数规定了如何格式化日期/时间。它使用字母来表示日期和时间的格式。

这里列出了一些可用的字母:

· d – 月中的天 (01-31)

· m – 当前月,以数字计 (01-12)

· Y – 当前的年(四位数)

您可以在我们的 PHP Date 参考手册中,找到格式参数中可以使用的所有字母。

可以在字母之间插入其他字符,比如 “/”、”.” 或者 “-“,这样就可以增加附加格式了:

echo date(“Y/m/d”);

echo “
”;

echo date(“Y.m.d”);

echo “
”;

echo date(“Y-m-d”);

?>

以上代码的输出类似这样:

2006/07/11

2006.07.11

2006-07-11

PHP 日期 – 添加时间戳

date() 函数的第二个参数规定了一个时间戳。此参数是可选的。如果您没有提供时间戳,当

前的时间将被使用。

在我们的例子中,我们将使用 mktime() 函数为明天创建一个时间戳。

mktime() 函数可为指定的日期返回 Unix 时间戳。

语法

mktime(hour,minute,second,month,day,year,is_dst)

如需获得某一天的时间戳,我们只要设置 mktime() 函数的 day 参数就可以了:

$tomorrow = mktime(0,0,0,date(“m”),date(“d”)+1,date(“Y”));

echo “Tomorrow is “.date(“Y/m/d”, $tomorrow);

?>

以上代码的输出类似这样:

明天是 2006/07/12

PHP 日期 – 参考手册

PHP 引用文件

服务器端引用 (SSI) 用于创建可在多个页面重复使用的函数、页眉、页脚或元素。

服务器端引用(Server Side include s)

通过 include() 或 require() 函数,您可以在服务器执行 PHP 文件之前在该文件中插入一个

文件的内容。除了它们处理错误的方式不同之外,这两个函数在其他方面都是相同的。

include() 函数会生成一个警告(但是脚本会继续执行),而 require() 函数会生成一个致命错

误(fatal error)(在错误发生后脚本会停止执行)。

这两个函数用于创建可在多个页面重复使用的函数、页眉、页脚或元素。

这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。

当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,

仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)。

include() 函数

include() 函数可获得指定文件中的所有文本,并把文本拷贝到使用 include 函数的文件中。

例子 1

假设您拥有一个标准的页眉文件,名为 “header.php”。如需在页面中引用这个页眉文件,请

使用 include() 函数,就像这样:

Welcome to my home page

Some text

例子 2

现在,假设我们有一个在所有页面上使用的标准菜单文件。请看下面这个 “menu.php”:

Home |

About Us |

Contact Us

三个文件,https://www.zhihuclub.com/%E2%80%9Ddefault.php%E2%80%9D、https://www.zhihuclub.com/%E2%80%9Dabout.php%E2%80%9D 以及 “contact.php” 都引用了 “menu.php” 文件。这是

“default.php” 中的代码:

Welcome to my home page

Some text

如果您在浏览器中查看 “default.php” 的源代码,应该类似这样:

Home |

About Us |

Contact Us

Welcome to my home page

Some text

同时,当然,我们也将用相同的方法处理 “about.php” 和 “contact.php”。通过使用引用文件,

在您需要重命名链接、更改链接顺序或向站点添加另一张网页时,只要简单地更新

“menu.php” 文件中的文本即可。

require() 函数

require() 函数与 include() 相同,不同的是它对错误的处理方式。

include() 函数会生成一个警告(但是脚本会继续执行),而 require() 函数会生成一个致命错

误(fatal error)(在错误发生后脚本会停止执行)。

如果在您通过 include() 引用文件时发生了错误,会得到类似下面这样的错误消息:

PHP 代码:

include(“wrong file .php”);

echo “Hello World!”;

?>

错误消息:

Warning: include(wrongFile.php) [function.include]:

failed to open stream:

No such file or directory in C:\home\website\test.php on line 5

Warning: include() [function.include]:

Failed opening ‘wrongFile.php’ for inclusion

(include_path=’.;C:\php5\pear’)

in C:\home\website\test.php on line 5

Hello World!

请注意,echo 语句依然被执行了!这是因为警告不会中止脚本的执行。

现在,让我们使用 require() 函数运行相同的例子。

PHP 代码:

require(“wrongFile.php”);

echo “Hello World!”;

?>

错误消息:

Warning: require(wrongFile.php) [function.require]:

failed to open stream:

No such file or directory in C:\home\website\test.php on line 5

Fatal error: require() [function.require]:

Failed opening required ‘wrongFile.php’

(include_path=’.;C:\php5\pear’)

in C:\home\website\test.php on line 5

由于在致命错误发生后终止了脚本的执行,因此 echo 语句不会执行。

正因为在文件不存在或被重命名后脚本不会继续执行,因此我们推荐使用 require() 而不是

include()。

PHP 文件处理

fopen() 函数用于在 PHP 中打开文件。

打开文件

fopen() 函数用于在 PHP 中打开文件。

此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件:

$file=fopen(“welcome.txt”,”r”);

?>

文件可能通过下列模式来打开:

模式描述

r 只读。在文件的开头开始。

r+ 读/写。在文件的开头开始。

w 只写。打开并清空文件的内容;如果文件不存在,则创建新文件。

w+ 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。

a 追加。打开并向文件文件的末端进行写操作,如果文件不存在,则创建新文件。

a+ 读/追加。通过向文件末端写内容,来保持文件内容。

x 只写。创建新文件。如果文件以存在,则返回 FALSE。

x+

读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。

注释:如果 fopen() 无法打开指定文件,则返回 0 (false)。

例子

如果 fopen() 不能打开指定的文件,下面的例子会生成一段消息:

$file=fopen(“welcome.txt”,”r”) or exit(“Unable to open file!”);

?>

关闭文件

fclose () 函数用于关闭打开的文件。

$file = fopen(“test.txt”,”r”);

//some code to be executed

fclose($file);

?>

检测 End-of-file

feof() 函数检测是否已达到文件的末端 (EOF)。

在循环遍历未知长度的数据时,feof() 函数很有用。

注释:在 w 、a 以及 x 模式,您无法读取打开的文件!

if (feof($file)) echo “End of file”;

逐行读取文件

fgets() 函数用于从文件中逐行读取文件。

注释:在调用该函数之后,文件指针会移动到下一行。

例子

下面的例子逐行读取文件,直到文件末端为止:

$file = fopen(“welcome.txt”, “r”) or exit(“Unable to open file!”);

//Output a line of the file until the end is reached

while(!feof($file))

{

echo fgets($file). “
”;

}

fclose($file);

?>

逐字符读取文件

fgetc() 函数用于从文件逐字符地读取文件。

注释:在调用该函数之后,文件指针会移动到下一个字符。

例子

下面的例子逐字符地读取文件,直到文件末端为止:

$file=fopen(“welcome.txt”,”r”) or exit(“Unable to open file!”);

while (!feof($file))

{

echo fgetc($file);

}

fclose($file);

?>

PHP 文件上传

通过 PHP,可以把文件上传到服务器。

创建一个文件上传表单

允许用户从表单上传文件是非常有用的。

请看下面这个供上传文件的 HTML 表单:

enctype=”multipart/form-data”>


请留意如下有关此表单的信息:

标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制

数据时,比如文件内容,请使用 “multipart/form-data”。

标签的 type=”file” 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器

中预览时,会看到输入框旁边有一个浏览按钮。

注释:允许用户上传文件是一个巨大的安全风险。请仅仅允许可信的用户执行文件上传操作。

创建上传脚本

“upload_file.php” 文件含有供上传文件的代码:

if ($_FILES[“file”][“error”] > 0)

{

echo “Error: ” . $_FILES[“file”][“error”] . “
”;

}

else

{

echo “Upload: ” . $_FILES[“file”][“name”] . “
”;

echo “Type: ” . $_FILES[“file”][“type”] . “
”;

echo “Size: ” . ($_FILES[“file”][“size”] / 1024) . ” Kb
”;

echo “Stored in: ” . $_FILES[“file”][“tmp_name”];

}

?>

通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。

第一个参数是表单的 input name,第二个下标可以是 “name”, “type”, “size”, “tmp_name” 或

“error”。就像这样:

· $_FILES[“file”][“name”] – 被上传文件的名称

· $_FILES[“file”][“type”] – 被上传文件的类型

· $_FILES[“file”][“size”] – 被上传文件的大小,以字节计

· $_FILES[“file”][“tmp_name”] – 存储在服务器的文件的临时副本的名称

· $_FILES[“file”][“error”] – 由文件上传导致的错误代码

这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关什么用户有权上传

文件的限制。

上传限制

在这个脚本中,我们增加了对文件上传的限制。用户只能上传 .gif 或 .jpeg 文件,文件大小

必须小于 20 kb:

if ((($_FILES[“file”][“type”] == “image/gif”)

|| ($_FILES[“file”][“type”] == “image/jpeg”)

|| ($_FILES[“file”][“type”] == “image/pjpeg”))

&& ($_FILES[“file”][“size”] < 20000))

{

if ($_FILES[“file”][“error”] > 0)

{

echo “Error: ” . $_FILES[“file”][“error”] . “
”;

}

else

{

echo “Upload: ” . $_FILES[“file”][“name”] . “
”;

echo “Type: ” . $_FILES[“file”][“type”] . “
”;

echo “Size: ” . ($_FILES[“file”][“size”] / 1024) . ” Kb
”;

echo “Stored in: ” . $_FILES[“file”][“tmp_name”];

}

}

else

{

echo “Invalid file”;

}

?>

注释:对于 IE,识别 jpg 文件的类型必须是 pjpeg,对于 FireFox,必须是 jpeg。

保存被上传的文件

上面的例子在服务器的 PHP 临时文件夹创建了一个被上传文件的临时副本。

这个临时的复制文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外

的位置:

if ((($_FILES[“file”][“type”] == “image/gif”)

|| ($_FILES[“file”][“type”] == “image/jpeg”)

|| ($_FILES[“file”][“type”] == “image/pjpeg”))

&& ($_FILES[“file”][“size”] < 20000))

{

if ($_FILES[“file”][“error”] > 0)

{

echo “Return Code: ” . $_FILES[“file”][“error”] . “
”;

else

{

echo “Upload: ” . $_FILES[“file”][“name”] . “
”;

echo “Type: ” . $_FILES[“file”][“type”] . “
”;

echo “Size: ” . ($_FILES[“file”][“size”] / 1024) . ” Kb
”;

echo “Temp file: ” . $_FILES[“file”][“tmp_name”] . “
”;

if (file_exists(“upload/” . $_FILES[“file”][“name”]))

{

echo $_FILES[“file”][“name”] . ” already exists. “;

}

else

{

move_uploaded_file($_FILES[“file”][“tmp_name”],

“upload/” . $_FILES[“file”][“name”]);

echo “Stored in: ” . “upload/” . $_FILES[“file”][“name”];

}

}

}

else

{

echo “Invalid file”;

}

?>

上面的脚本检测了是否已存在此文件,如果不存在,则把文件拷贝到指定的文件夹。

注释:这个例子把文件保存到了名为 “upload” 的新文件夹。

收藏
分享
海报
0 条评论
196
上一篇:2022年是丰收年吗(2022年是丰收年还是灾年) 下一篇:92、Workerman通信框架-网络IO库-Select类介绍

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码