免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2768 | 回复: 6
打印 上一主题 下一主题

任何用PHP代码 实现文件上传 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-11-14 21:58 |只看该作者 |倒序浏览
哪位高手能 帮个忙??
别人新手 遇到了这个困难 希望得到帮助
万分感谢

论坛徽章:
0
2 [报告]
发表于 2004-11-15 12:40 |只看该作者

任何用PHP代码 实现文件上传

php手册中“特点”部分的“文件上传处理”介绍是最详细的。

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
3 [报告]
发表于 2004-11-15 12:47 |只看该作者

任何用PHP代码 实现文件上传

强烈鄙视不看手册而用PHP的人,新手是好学的,不看手册是可耻的。
http://w.yi.org/ftp/FAPM/PHP/php_manual_zh/features.file-upload.html
章 20. 文件上传处理
目录
POST 方法上传
关于错误信息的解释
一些注意事项
上传多个文件
对 PUT 方法的支持
POST 方法上传
PHP 能够接受任何来自符合 RFC-1867 标准的浏览器(包括 Netscape Navigator 3 及更高版本,Microsoft Internet Explorer 3 加微软补丁,或者更高版本)上传的文件。PHP 的这种特性使得我们既可以上传文本文件,也可以上传二进制文件。利用 PHP 的认证和文件操作函数,您就可以控制谁有上传的权限,以及在文件上传后进行哪些处理。

相关的设置: 请参阅 php.ini 的 file_uploads、 upload_max_filesize、upload_tmp_dir 以及 post_max_size 设置选项。

请注意 PHP 也支持 PUT 方法的文件上传,Netscape Composer 和 W3C 的 Amaya 客户端使用这种方法。请参阅 PUT 方法支持以获取更多信息。

您可以如下建立一个特殊的表单来支持文件上传:

例子 20-1. 文件上传表单

<form enctype="multipart/form-data" action="_URL_" method="OST">;
<input type="hidden" name="MAX_FILE_SIZE" value="30000">;
Send this file: <input name="userfile" type="file">;
<input type="submit" value="Send File">;
</form>;




以上范例中的“_URL_”应该替换成指向一个 PHP 文件的真实 URL。MAX_FILE_SIZE 隐藏域(单位为字节)必须先于文件输入域,其值为接收文件的最大尺寸。同时,要保证您的文件上传表单中要有 enctype="multipart/form-data",否则文件上传将不能工作。


警告
MAX_FILE_SIZE 的值只是对浏览器的一个建议,实际上它可以被简单的绕过。因此不要把对浏览器的限制寄希望于该值。实际上,PHP 设置中的上传文件最大值,是不会失效的。但是最好还是在表单中加上 MAX_FILE_SIZE,因为它可以避免用户在花时间等待上传大文件之后才发现该文件太大了的麻烦。



为上传文件定义的变量会根据 PHP 的版本及设置的不同而不同。自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这些数组将包含所有关于您上传的文件的信息,其中,我们推荐您使用 $_FILES。如果 PHP 的设置选项 register_globals 为 on,则相关的变量名将也会存在。从 PHP 4.2.0 版本开始,register_globals 的默认值被设为 off。

以上范例中 $_FILES 数组的内容如下所示。我们假设文件上传字段的名称如上例所示,为 userfile。名称可随意命名。


$_FILES['userfile']['name']
客户端机器文件的原名称。

$_FILES['userfile']['type']
文件的 MIME 类型,需要浏览器提供该信息的支持,例如“image/gif”。

$_FILES['userfile']['size']
已上传文件的大小,单位为字节。

$_FILES['userfile']['tmp_name']
文件被上传后在服务端储存的临时文件名。

$_FILES['userfile']['error']
和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。


注: 在 PHP 4.1.0 版本以前该数组的名称为 $HTTP_POST_FILES,它并不像 $_FILES 一样是自动全局变量。PHP 3 不支持 $HTTP_POST_FILES 数组。

当 php.ini 中的 register_globals 被设置为 on 时,您可以使用更多的变量。例如,$userfile_name 等价于 $_FILES['userfile']['name'],$userfile_type 等价于 $_FILES['userfile']['type'] 等。请记住从 PHP 4.2.0 开始,register_globals 的默认值为 off,因此我们建议您不要依赖于改设置项而使用刚刚提到的那些附加变量。

文件被上传后,默认地会被储存到服务端的默认临时目录中,除非您将 php.ini 中的 upload_tmp_dir 设置为了其它的路径。服务端的默认临时目录可以通过更改 PHP 运行环境的环境变量 TMPDIR 来重新设置,但是在 PHP 脚本内部通过运行 putenv() 函数来设置是不起作用的。该环境变量也可以用来确认其它的操作也是在上传的文件上进行的。 例子 20-2. 使文件上传生效

请查阅函数 is_uploaded_file() 和 move_uploaded_file() 以获取进一步的信息。以下范例处理由表单提供的文件上传。

<?php
// 在 4.1.0 以前的 PHP 中,需要用 $HTTP_POST_FILES 代替 $_FILES。
// 在 4.0.3 以前的 PHP 中,需要用 copy() 和 is_uploaded_file() 来代替 move_uploaded_file()。

$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir. $_FILES['userfile']['name'];
print "<pre>;";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) {
    print "File is valid, and was successfully uploaded.  Here's some more debugging info:\n";
    print_r($_FILES);
} else {
    print "ossible file upload attack!  Here's some debugging info:\n";
    print_r($_FILES);
}
print "</pre>;";
?>;  



接受上传文件的 PHP 脚本必须在文件上传后进行判断,来决定接下来要对该文件进行那些操作。例如,您可以通过 $_FILES['userfile']['size'] 变量来忽略尺寸太大或太小的文件,也可以通过 $_FILES['userfile']['type'] 变量来过滤文件类型和某种标准不相符合的文件。在 PHP 4.2.0 以上版本,您还可以通过 $_FILES['userfile']['error'] 变量来根据不同的错误代码来做相关的判断。不管做何种的判断,您必须将该文件从临时目录中删除,要么将其移动到其它的地方。

如果表单中没有选择上传的文件,则 PHP 变量 $_FILES['userfile']['size'] 的值将为 0,$_FILES['userfile']['tmp_name'] 将为 none。

如果该文件没有被移动到其它地方也没有被改名,则该文件将在表单请求结束时被删除。

论坛徽章:
0
4 [报告]
发表于 2004-11-15 21:28 |只看该作者

任何用PHP代码 实现文件上传

问一下 手册哪里可以下载???
给个地址

论坛徽章:
0
5 [报告]
发表于 2004-11-15 23:21 |只看该作者

任何用PHP代码 实现文件上传

上传多个文件
您可以对 input 域使用不同的 name 来上传多个文件。

PHP 支持同时上传多个文件并将它们的信息自动以数组的形式组织。要完成这项功能,您需要在 HTML 表单中对文件上传域使用类似于多下拉菜单和复选框的数组名称来提交。

注: 对多文件上传的支持是在 3.0.10 版本添加的。

例子 18-3. 上传多个文件

<form action="file-upload.php" method="OST" enctype="multipart/form-data">;
  Send these files:<br>;
  <input name="userfile[]" type="file">;<br>;
  <input name="userfile[]" type="file">;<br>;
  <input type="submit" value="Send files">;
</form>;




当以上表单被提交后,数组 $_FILES['userfile']、$_FILES['userfile']['name'] 和 $_FILES['userfile']['size'] 将被初始化(在 PHP 4.1.0 以前版本是 $HTTP_POST_FILES。)如果 register_globals 的设置为 on,则和文件上传相关的全局变量也将被初始化。所有这些提交的信息都将被储存到以数字为索引的数组中。

例如,假设名为 /home/test/review.html 和 /home/test/xwp.out 的文件被提交,则 $_FILES['userfile']['name'][0] 将包含文件 review.html 的名称,而 $_FILES['userfile']['name'][1] 则将包含文件 xwp.out 的名称。类似的,$_FILES['userfile']['size'][0] 将包含文件 review.html 的大小,依此类推。

$_FILES['userfile']['name'][0]、$_FILES['userfile']['tmp_name'][0]、$_FILES['userfile']['size'][0] 以及 $_FILES['userfile']['type'][0] 都将被同时设置并有效。

论坛徽章:
0
6 [报告]
发表于 2004-11-24 17:29 |只看该作者

任何用PHP代码 实现文件上传

二楼的干脆!

论坛徽章:
0
7 [报告]
发表于 2004-11-24 17:40 |只看该作者

任何用PHP代码 实现文件上传

“强烈鄙视不看手册而用PHP的人,新手是好学的,不看手册是可耻的。 ”

同意。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP