想找教程的朋友请查阅死亡之书,学习基础教程之前请先看下PHP基本符号,帮助了解。本教程适合有一点语言常识的人看,无基础也可,学习PHP贵在坚持,重在实践,学到的东西要经常拿出来写,别人教的代码即使不懂什么意思也要写到面熟为止,有什么问题尽管留言给我,能帮忙解决的小弟第一时间处理,再一次感谢大家的光临!(注意:打开某些文章会有帐号密码输入框,大家直接点取消就好了,想要看图片的,我会尽快把图片连接修改掉的.)
PHP入门(进阶提升)之上传文件
上一篇 /
下一篇 2006-11-23 07:52:40
/ 个人分类:PHP学习经验
除了文本信息外,还可以使用 HTML 表单发送文档,这正是用户能够向系统增加文件的原因。具体的过程如下:
- 用户加载使其能够选择上传文件的表单。
- 用户提交表单。
- 浏览器把文件和关于文件的信息作为请求的一部分发送给服务器。
- 服务器把文件保存在临时存储位置。
- 处理表单提交的 PHP 页面将文件从临时位置转移到持久存储位置。
我们首先创建一个具体的表单。
用于上传文件的表单和用于注册与登录页面的表单类似,有两个重要的区别:
<?php
include("top.txt");
?>
<h3>Upload a file</h3>
<p>You can add files to the system for review by an administrator.
Click <b>Browse</b> to select the file you'd like to upload,
and then click <b>Upload</b>.</p>
<form action="uploadfile_action.php" method="POST"enctype="multipart/form-data">
<input type="file" name="ufile" \><input type="submit" value="Upload" \>
</form>
<?php
include("bottom.txt");
?>
enctype属性告诉浏览器,发送的信息必须使用一种特殊的格式,这种格式允许包含多个部分的信息,而不仅仅是一串名值对。
文件输入提供了一个文本框,允许用户单击浏览...来选择文件,如图 4 所示。
图 4. 选择上传文件

注意该文件uploadfile.php的链接已经添加到top.txt页中,因此出现在浏览器中。
通过浏览器上传文件时,PHP 收到关于该文件的信息数组。这些信息可以在$_FILE数组中根据输入字段的名字找到。比如,如果表单中的文件输入框名字为ufile,那么关于该文件的所有信息都包含在数组$_FILE['ufile']。
该数组允许用户上传多个文件。只要每个文件有自己的名称,就会有自己的数组。
要注意,我们把“$_FILE”称为数组。本系列教程的 第 1 部分中,您已经遇到这样的情况:对口令用同一个名称传递多个表单值时,一个数组值本身是另一个数组。在这里,每个$_FILE数组本身都是关联数组。比如,ufile 文件包含以下信息:
$_FILE['ufile']['name']——文件名(如 uploadme.txt)$_FILE['ufile']['type']——文件类型(如image/jpg)$_FILE['ufile']['size']——上传文件的大小,按字节计算$_FILE['ufile']['tmp_name']——上传文件在服务器上的临时名称和位置$_FILE['ufile']['error']——如果有的话,表示上传过程中产生的错误码
知道了应该具备的信息,就可以在处理之前检查文件是否真的上传了。
开始保存上传文件的过程之前,需要确定将它放在哪儿。除非该文件已经批准,否则您不希望从网站上访问它,因此要创建一个不在主文档根中的目录。
这里使用 /var/www/hidden/,这就是所有文件都要去的地方,因此定义一个常量是不错的办法。打开 scrīpts.txt 增加如下定义:
...
mysql_select_db($db);
}
define(UPLOADEDFILES, "/var/www/hidden/");
?>
只要把 scrīpts.txt 包含在上传页中就可使用该定义了:
<?php
include("top.txt");
include("scrīpts.txt");
if(isset($_FILES['ufile']['name'])){
echo "Uploading: ".$_FILES['ufile']['name']."<br>";
$tmpName = $_FILES['ufile']['tmp_name'];
$newName = UPLOADEDFILES . $_FILES['ufile']['name'];
if(!is_uploaded_file($tmpName) ||
!move_uploaded_file($tmpName, $newName)){
echo "FAILED TO UPLOAD " . $_FILES['ufile']['name'] .
"<br>Temporary Name: $tmpName <br>";
} else {
echo "File uploaded. Thank you!";
}
} else {
echo "You need to select a file. Please try again.";
}
include("bottom.txt");
?>
首先获得文件的当前位置和临时名称(tmp_name),并使用定义的常量确定要存放的位置。
接下来,就是在 if-then 语句中,做了两件事。首先检查要移动的文件是否确实是上传到服务器上的文件,而不是用户诱使我们作出反应的 /etc/passwd 这类文件。如果is_uploaded_file()函数返回 false,则它的反!is_uploaded_file()就是 true,于是 PHP 显示错误消息。
另一方面,如果测试返回 true,则意味着是确实是上传的文件,然后可以将它从当前位置转移到新的位置。如果移动不成功,则返回 false,同样取反后为 true,于是显示错误消息。
换句话说,如果不是上传文件或者不能移动,就显示错误消息。否则显示移动成功的消息(参见图 5)。
图 5. 转移成功的消息

现在已经得到了上传的文件,还需要记录相关的信息以便日后检索。
导入论坛
收藏
分享给好友
管理
举报
TAG:
PHP
文件上传
上传文件
PHP学习经验