选择显示字体大小

用php实现文件上传

  在webdev站点上经常看到的一个问题是关于文件上传的。在这篇文章里我将解释如何用php实现文件
上传。 设计上传表格

  我们主要的目标是完成文件从本地计算机上传到服务器上去。为了做到这一点,我们需要做一个表
格,允许用户选择一个文件并可以提交它。下面是一个例子:

<html>
<head>
<title>文件上传表格</title>
</head>
<body>
<table>
<form enctype="multipart/form-data" name=myform
action=submit.php3
method="post">
<tr><td>选择上传文件</td><td><input name="myfile"
type="file"></td></tr>
<tr><td colspan="2"><input name="submit" value="上传"
type="submit"></td></tr>
</table>
</body>
</html>

  注意表格中的enctype="multipart/form-data"部分。这个一定不能错,否则服务器将不知道你在上
传文件。

设计上传程序

  现在我们已经完成了前台部分,让我们再仔细地考虑后台是如何接收文件并保存它到我们指定的目
录下去。下面就开始用php了。这是submit.php3的程序:

<?
if(&#36;myfile != "none") {
copy(&#36;myfile,"/home/berber/&#36;myfile_name");
unlink(&#36;myfile);
}
else {
echo"你没有上传任何文?;
}
?>

  不管你信不信,这就是整个处理过程。我们在程序中所做的就是:

  1. 检查是否一个文件已经上传到服务器,通过if(&#36;myfile != "none");
  2. 拷贝文件到指定位置。
  3. 删除临时文件。

  当你按下了提交按钮后,文件将会从你的计算机上传到服务器的临时目录下。在临时目录下的文件
名为一个临时文件。应该使用file字段的name值来访问它,在这里为&#36;myfile。真正的文件名使用file
字段的name值加上"_name"来访问它,在这里为&#36;myfile_name。使用copy()函数,将临时文件&#36;myfile拷
贝到指定目录下,拷贝后的文件名为&#36;myfile_name。完成后不要忘了删除临时文件,不然你会有许多你
不想要的文件。

设置文件名

  一个可能让程序员睡不着觉的事情就是试图改变file字段的value属性的值。并不是很多人知道它
是不可能的。尽管w3c说可以,但实际上,象ie.netscape都不允许设置vaue属性的值。听上去有点可
笑,为什么我不能设置一个初始值,这样让用户使用起来更方便呢?如果你那样做,那你就会发现你带
来了一个安全上的漏洞。可以设想一下,你登录到我的网站,我可以改变一个表格中的file字段的值。
那么有许能阻止我把你的/etc/passwd文件上传呢?更进一步的,我不需要你按下提交按钮,我可先设
置file字段的值,然后通过一段javascript程序来模拟提交动作...哇呜...我可以处理你机器上的任何
文件了。因为这个原因,浏览器简单地把<input>标记中的file字段的value字段给忽略了。

限制文件大小

  另一个酷的特性是限制上传文件的大小选项。只要增加一个<input>标记就可以了:

<input type="hidden" name="max_file_size" value="100000">

  这个将不允许用户上传超过100kb的文件。

显示文件大小

  为了显示文件大小,可以通过file字段name属性值加上"_size"这个变量来访问。在我们的例子中
就是使用&#36;myfile_size。所以,如果你想告诉用户上传文件的大小,你可以象下面那样去做:

echo "you have just uploaded &#36;myfile_name";
echo "the size of the file is &#36;myfile_size";

权限

  很明显你需要对目标目录的写的权限。如果一个用户用匿文上传文件,那他的用户名应该是
"bobody"。这个用户必须有对目标目录写的权限否则你可能得到一个象下面的信息:

warning: unable to create '/home/berber/berber.txt':
permission denied
in /home/berber/submit.php3 on line 5


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons