首页 » PHP和MySQL Web开发(原书第4版) » PHP和MySQL Web开发(原书第4版)全文在线阅读

《PHP和MySQL Web开发(原书第4版)》第四篇 PHP的高级技术

关灯直达底部

第19章 与文件系统和服务器的交互

在第2章中,我们已经了解了如何在Web服务器上读数据,以及如何将数据写入一个文件中。本章将介绍允许与Web服务器文件系统进行交互的PHP其他函数。

在本章中,我们将主要介绍以下内容:

■使用PHP上传文件

■使用目录函数

■与服务器上的文件进行交互

■在服务器上运行程序

■使用服务器环境变量

为了讨论这些函数的使用,我们首先来了解一个例子。考虑到我们可能会希望客户能够更新一些网站内容,例如,关于他们公司的最新消息(或者我们可能想为自己设计一个比FTP更友好的用户界面)。解决此类问题的一种方法是让客户以普通文本的方式上传文件内容。通过使用由PHP设计的模板,这些文件是可以在网站中访问到的,正如我们在第6章中所介绍的一样。

在开始研究文件系统函数之前,先让我们简单地了解一下文件是如何上传的。

19.1 文件上传

PHP的一个非常有用的功能是它支持文件上传。不是使用HTTP将服务器上的文件传递到客户端的浏览器,而是以相反的方向执行——使用HTTP将文件从客户端浏览器传递到服务器。通常,可以使用HTML表单的界面实现它。图19-1所示的就是在这个例子中我们将使用的HTML表单界面。

图 19-1 用于文件上载的HTML表单包含了与普通HTML表单不同的域和域类型

正如你可以看到的,以上表单包含一个文本输入框,在这个输入框中,用户可以输入文件名,或者点击"Browse"按钮来浏览或寻找本地的有效文件。稍后我们将详细介绍如何实现它。

在输入文件名后,用户可以点击"Send File"按钮将文件上传到服务器,而服务器上的PHP脚本正等着处理它。

在进入文件上传的例子之前,需要注意的是,php.ini文件具有五个能够控制PHP如何处理文件上传的指令。这些指令和默认值及其相关描述如表19-1所示。

19.1.1 文件上传的HTML代码

为了实现文件上传功能,需要用到一些专门用于上传文件的HTML语法。上例表单的HTML源代码如程序清单19-1所示。

程序清单19-1 upload.html——上传文件的HTML表单

<html>

<head>

<title>Administration-upload new files</title>

</head>

<body>

<h1>Upload new news files</h1>

<form action="upload.php"method="post"enctype="multipart/form-data"/>

<p>

<input type="hidden"name="MAX_FILE_SIZE"/>

<label for="userfile">Upload a file:</label>

<input type="file"name="userfile"id="userfile"/>

<input type="submit"/>

</p>

</form>

</body>

</html>

请注意,该表单使用了POST方法。文件上传也可以使用为Netscape Composer和Amaya所支持的PUT方法。但是,这需要对该脚本进行修改,因为这两种浏览器不支持GET方法。

这个表单的其他特性包括:

■在<form>标记中,必须设置属性enctype="multipart/form-data",这样,服务器就可以知道上传的文件带有常规的表单信息。

■必须有一个可以设置上传文件最大长度的表单域。这是一个隐藏的域,如下所示:

<input type="hidden"name="MAX_FILE_SIZE">

请注意,MAX_FILE_SIZE表单域是可选的,该值也可以在服务器端设置。然而,如果在这个表单中使用,表单域的名称必须是MAX_FILE_SIZE。其值是允许人们上传文件的最大长度值(按字节计算)。在这里,我们将其设置为1 000 000B(几乎就是1MB)。针对你自己的应用程序,可以将该值设置为更大或更小。

■你需要指定文件类型,如下所示:

<input type="file"name="userfile"id="userfile"/>

可以为文件选择喜欢的任何名字,但必须记住,将在PHP接收脚本中使用这个名字来访问文件。

提示 在我们进一步实现该功能之前,必须注意有些PHP版本在文件上传的代码中存在安全漏洞。如果决定在产品服务器上使用文件上传功能,必须确定所使用的PHP是最新版本,而且要时刻注意PHP的补丁发布。

当然,这并不能妨碍使用这样一个有用的技术,但是应该非常小心所编写的代码,考虑限制用户对文件上传功能的使用,例如,只允许站点管理员和内容管理员使用该功能。