求实现php文件上传代码

我想做一个页面有两个功能1.可以实现文件上传2.显示上传的文件
能再对应的给出下在的代码吗,下载上传文件中的内容

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  èµ·å§‹é¡µ é”™è¯¯ä¿¡æ¯è¯´æ˜Ž 
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网