问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

php中的文件上传处理

发布网友 发布时间:2022-04-06 04:24

我来回答

4个回答

热心网友 时间:2022-04-06 05:53

PHP上传文件非常简单,你需要一个上传的HTML文件(<FORM>),一个保存文件的PHP文件(保存),一个查询上传文件清单的工具。

真正实现完整功能的上传和管理需要使用数据库,我的网站俱乐部里面上传文件一开放很快就传了几万个文件。

最简单的方法不用数据库,可以用一个PHP文件实现,这个文件列出指定目录下的所有文件,然后提供一个上传的FORM,最后检测是否提交了FORM数据,是就保存文件到指定位置。

PHP手册第39章有关于处理这些问题的说明,我复制粘贴如下:

 
上一页  V. 特点 下一页 

--------------------------------------------------------------------------------

第 39 章 文件上传处理
目录
POST 方法上传
错误信息说明
常见缺陷
上传多个文件
对 PUT 方法的支持
POST 方法上传
本特性可以使用户上传文本和二进制文件。用 PHP 的认证和文件操作函数,可以完全控制允许哪些人上传以及文件上传后怎样处理。 

PHP 能够接受任何来自符合 RFC-1867 标准的浏览器(包括 Netscape Navigator 3 及更高版本,打了补丁的 Microsoft Internet Explorer 3 或者更高版本)上传的文件。 

相关的设置: 请参阅 php.ini 的 file_uploads,upload_max_filesize,upload_tmp_dirpost_max_size 以及 max_input_time 设置选项。 

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

例 39.1. 文件上传表单

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

    

<!-- The data encoding type, enctype, MUST be specified as below -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
    <!-- MAX_FILE_SIZE must precede the file input field -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <!-- Name of input element determines name in $_FILES array -->
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>

    
以上范例中的 __URL__ 应该被换掉,指向一个真实的 PHP 文件。 

MAX_FILE_SIZE 隐藏字段(单位为字节)必须放在文件输入字段之前,其值为接收文件的最大尺寸。这是对浏览器的一个建议,PHP 也会检查此项。在浏览器端可以简单绕过此设置,因此不要指望用此特性来阻挡大文件。实际上,PHP 设置中的上传文件最大值是不会失效的。但是最好还是在表单中加上此项目,因为它可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。 

注意: 要确保文件上传表单的属性是 enctype="multipart/form-data",否则文件上传不了。 

全局变量 $_FILES 自 PHP 4.1.0 起存在(在更早的版本中用 $HTTP_POST_FILES 替代)。此数组包含有所有上传的文件信息。 

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

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

$_FILES['userfile']['type']
文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。 

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

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

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

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

例 39.2. 使文件上传生效

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

<?php
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.

$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "Possible file upload attack!\n";
}

echo 'Here is some more debugging info:';
print_r($_FILES);

print "</pre>";

?> 

接受上传文件的 PHP 脚本为了决定接下来要对该文件进行哪些操作,应该实现任何逻辑上必要的检查。例如可以用 $_FILES['userfile']['size'] 变量来排除过大或过小的文件,也可以通过 $_FILES['userfile']['type'] 变量来排除文件类型和某种标准不相符合的文件,但只把这个当作一系列检查中的第一步,因为此值完全由客户端控制而在 PHP 端并不检查。自 PHP 4.2.0 起,还可以通过 $_FILES['userfile']['error'] 变量来根据不同的错误代码来计划下一步如何处理。不管怎样,要么将该文件从临时目录中删除,要么将其移动到其它的地方。 

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

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

例 39.3. 上传一组文件

PHP 的 HTML 数组特性甚至支持文件类型。 

<form action="" method="post" enctype="multipart/form-data">
<p>Pictures:
<input type="file" name="pictures[]" />
<input type="file" name="pictures[]" />
<input type="file" name="pictures[]" />
<input type="submit" value="Send" />
</p>
</form>

   
<?php
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
        $name = $_FILES["pictures"]["name"][$key];
        move_uploaded_file($tmp_name, "data/$name");
    }
}
?> 

--------------------------------------------------------------------------------
上一页  上一级 下一页 
38. 处理 XForms  起始页 错误信息说明 

热心网友 时间:2022-04-06 07:11

它主要是告诉接收端 这个表单不是普通的表单通过字符串就可以传输!
而是要准备打开socket 接受文件流

热心网友 时间:2022-04-06 08:46

编码的方式,ENCTYPE 共有三种,这是其中一种,另外两种*很多,所以一般你用mutipart/form-data就好

热心网友 时间:2022-04-06 10:37

这个是针对于PHP上传所必须滴,具体什么意思我就不知道到了 可以谷歌搜搜
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...乱弹flash游戏广告(少儿不宜类)的病毒到底怎么杀?? 手机老是出现少儿不宜的软件 老是宣传 还让下载 恢复出厂设置也不 钢材商贸公司怎么取名好听 钢材贸易公司起名字大全免费 您好,我现在20多岁,有一个演员梦,我不怕吃苦,就是想演戏,可是我性格有... ...我想当演员,因为我的梦想也是做一名演员,我相信我自己能做好_百度知... 我是淘宝新手卖家,有供应商主动邀请我分销他的产品,这其中有什么不妥... 淘宝旺旺里有个阿里巴巴供应商说交900元帮我运营店铺,说能赚钱,有企业... 初中仁爱版英语总复习练习册多少钱 英语八年级下册复习(仁爱版本) 桐庐大奇山门票是多少? 怎么用php文件上传功能,并可以同时进行数据提交,请问代码如何写? 怎么用php做一个文件上传代码实例 php 文件上传 php上传文件到服务器 用php怎么处理上传文件 php 上传文件 php上传文件到文件夹 PHP 上传图片 并生成固定尺寸的缩略图 求 php自动生成缩略图代码... 求大神解释下面php缩略图代码的详细功能逻辑 php 如何提取内容里面的第一张图片生成缩略图 ThinkPHP 做url生成缩略图要怎么做 php制作png格式的缩略图 求如何用php读取指定文件夹中的所有图片,生成缩略图,在网页上分页显示,单击缩略图就在新页面显示大图。 能直接用的PHP生成缩略图的程序(要求简单) 谁有php批量处理图片、图片生成缩略图、图片添加水印的函数? php里如何提取内容里面的第一张图片生成缩略图。 php按百分比生成缩略图的代码分享 php自动生成缩略图代码 PHP如何把上传的照片生成高质量的缩略图? PHP字符串如何替换函数 php 替换中文字符串函数 php判断连接是不是url PHP判断变量是否为正确的url的正则表达式怎么写? php 怎么验证输入的url合法性 php语言获得并判断url php判断url地址正则表达怎么写 请问用JS或者PHP再或者其他什么方法能否实现判断跳转后的URL是否是某个URL(比如是否是百度)? PHP。判断URL正则表达,如何写。 php怎么判断一个url是不是图片 php 判断是网址还是文件路径 PHP 正则验证URL网址格式是否有效 php如何判断URL是远程的文件还是目录 php如何判断一个数组中是否存在于一段url中 thinkphp判断url是不是图片链接 php 判断url是否有效 curl php 正则验证是url否以http://开始 返回值是啥 我是一菜鸟 求解 php 如何判断url转向后的地址? PHP在控制器中怎么添加token验证,具体代码 谢谢 PHP API接口怎么控制权限