欢迎光临
我们一直在努力

PHP文件上传

HTML中使用type=”file”类型的表单可向服务器上传文件,服务端使用PHP接收文件数据和接收普通表单元素数据的处理方法稍有不同。例如:

<form action="user.php" enctype="multipart/form-data" method="post"

name="upvideo">

上传文件:<input type="file" name="video" />

<input type="submit" value="上传" />

</form>

上传文件的表单必须在form中定义enctype=”multipart/form-data”。此时用于接收文件信息的代码如下:

<?php

var_dump($_POST);

var_dump($_FILES);

if ($_FILES["video"]["error"] > 0)

{

echo "Error: " . $_FILES["video"]["error"] . "<br />";

} else {

print_r($_FILES["video"]);

if(is_uploaded_file($_FILES['video']['tmp_name'])){

$upfile=$_FILES["video"];

//获取数组里面的值

$name=$upfile["name"];//上传文件的文件名

$type=$upfile["type"];//上传文件的类型

$size=$upfile["size"];//上传文件的大小

$tmp_name=$upfile["tmp_name"];//上传文件的临时存放路径

// 移动上传的文件到指定目录

move_uploaded_file($tmp_name, '/Library/WebServer/Documents/book/'.$name);

}

}

?>

执行上述上传文件操作,打印结果如下:

 

array(0) { } array(1) { ["video"]=> array(5) { ["name"]=> string(14) "linux icon.gif" ["type"]=> string(9) "image/gif" ["tmp_name"]=> string(26) "/private/var/tmp/phpyiMCwf" ["error"]=> int(0) ["size"]=> int(15712) } } Array ( [name] => linux icon.gif [type] => image/gif [tmp_name] => /private/var/tmp/phpyiMCwf [error] => 0 [size] => 15712 )

 

第一个数组为空,表明在使用file类型表单提交数据时并不使用$_POST接收数据,而是使用全局变量$_FILE来接收。PHP中使用move_uploaded_file函数将上传的文件移动到指定位置。

另外,在PHP配置文件php.ini中默认上传文件的大小只有2MB,在上传大文件时需要对配置文件进行修改。php.ini中有关上传文件的设置如下:

  • file_uploads 是否允许HTTP文件上传,默认值为On,允许HTTP文件上传,此选项不能设置为Off。
  • upload_tmp_dir 文件上传的临时存放目录。如果没指定,那么PHP会使用系统默认的临时目录。该选项默认为空,如果不配置这个选项,文件上传功能就无法实现。
  • upload_max_filesize 上传文件的最大尺寸。这个选项默认值为2MB,即文件上传的大小为2MB,如果想上传一个50MB的文件,就必须设定upload_max_filesize = 50M。 仅设置upload_max_filesize = 50M 还是无法实现大文件的上传功能,还必须修改php.ini文件中的 post_max_size 选项。
  • post_max_size 通过表单POST给PHP所能接收的最大值,包括表单里的所有值,默认为8MB。如果POST数据超出限制,那么$_POST和$_FILES将会为空。 要上传大文件,必须设定该选项值大于upload_max_filesize选项的值,例如设置了upload_max_filesize = 50M ,这里就可以设置post_max_size = 100M。 另外,如果启用了内存限制,那么该值应当小于memory_limit选项的值。
  • max_execution_time 每个PHP页面运行的最大时间值(单位秒),默认为30秒。当我们上传一个较大的文件时,例如50MB,很可能要几分钟才能上传完,但PHP默认页面最久执行时间为30秒,超过30秒该脚本就停止执行,导致出现无法打开网页的情况。因此我们可以把值设置得较大些,如 max_execution_time = 600。 如果设置为0,就表示无时间限制。
  • max_input_time 每个PHP脚本解析请求数据所用的时间(单位秒),默认为60秒。当我们上传大文件时,可以将这个值设置得较大些。如果设置为0,就表示无时间限制。
  • memory_limit 这个选项用来设置单个PHP脚本所能申请到的最大内存空间。这有助于防止写得不好的脚本消耗光服务器上的可用内存。如果不需要任何内存上的限制将其设为 -1。

php.ini配置上传文件功能示例

假设要上传一个50MB的大文件,php.ini配置如下:

file_uploads = On

upload_tmp_dir = "/user/file"

upload_max_filesize = 50M

post_max_size = 100M

max_execution_time = 600

max_input_time = 600

max_input_time = 600

 

小例子:

<?php

$file = $_FILES['file'];

$src = '';
if($file){
    $src = 'uploads/'.$file['name'];
    copy($file['tmp_name'],$src);
}

?>
<html>
<head>
    <meta charset="utf-8">
    <title>文件上传</title>
</head>
<body>
<form action="" enctype="multipart/form-data" method="post">
    <input type="file" name="file">
    <input type="submit" name="dosubmit" value="确定">
</form>

<div>
    <img src="<?php echo $src;?>" alt="">
</div>

</body>
</html>

 

分享到:更多 ()