PHP入门 – 文件的上传和下载

文件的上传

利用php上传文件的过程是:通过 form 表单上传文件传递给php文件处理存入服务器。

1. form 表单

使用 post 方式(显然,不能通过 get 方式上传),表单设置 enctype="multipart/form-data",使用<input type='file' name='myfile'>。

注意几个特征属性:

POST方法:表单最常用的功能,向目标页面传递变量,我们在上传文件的时候,会在表单中设置相应的属性,来完成文件的传递

enctype="multipart/form-data" 这样服务器就会知道,我们要传递一个文件,这样服务器可以知道上载的文件带有常规的表单信息。

MAX_FILE_SIZE 此字段必须在文件输入字段之前,控制最大的传递文件的大小(字节)

<input type="file" name="userfile"> 设置浏览器文件输入浏览按钮

2. 服务器端通过php处理上传

具体需要通过以下三个方面信息:

设置PHP配置文件中的指令:用于精细地调节PHP的文件上传功能。

$_FILES多维数组:用于存储各种与上传文件有关的信息,其他数据还是使用$_POST获取。

PHP的文件上传处理函数:用于上传文件的后续处理。

PHP配置文件中与文件上传有关的选项

图片1

超级全局数组$_FILES

$_FILES["myfile"]["name"]中的值是: 客户端文件系统的文件的名称

$_FILES["myfile"]["type"]中的值是: 客户端传递的文件的类型

$_FILES["myfile"]["size"]中的值是: 文件的字节的大小

$_FILES[“myfile”][“tmp_name”]中的值是: 文件被上传后在服务器存储的临时全路径

$_FILES["myfile"]["error"]中的值是: 文件上传的错误代码-php 4.2以后增加的功能

存储在$_FILES["myfile"]["error"]中的值

值为0:表示没有发生任何错误。

值为1:表示上传文件的大小超出了约定值。文件大小的最大值是在PHP配置文件中指定的,该指令是:upload_max_filesize。

值为2:表示上传文件大小超出了HTML表单隐藏域属性的MAX_FILE_SIZE元素所指定的最大值。

值为3:表示文件只被部分上传。

值为4:表示没有上传任何文件。

值为6:表示找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。

值为7:表示文件写入失败。PHP 5.1.0 引进。

错误值对应常量

UPLOAD_ERR_OK :   对应值0

UPLOAD_ERR_INI_SIZE :   对应值1

UPLOAD_ERR_FORM_SIZE :   对应值2

UPLOAD_ERR_PARTIAL :   对应值3

UPLOAD_ERR_NO_FILE :   对应值4

UPLOAD_ERR_NO_TMP_DIR : 对应值6

UPLOAD_ERR_CANT_WRITE :   对应值7

常见的数据格式(MIME)

图片2

上传成功的文件会被放置到服务器端临时目录下,文件名是随机生成的临时文件名。

注:该文件在程序执行完后将自动被删除掉。在删除前可以像本地文件一样操作。

文件上传处理函数:

is_uploaded_file —判断文件是否是通过 HTTP POST 上传的

格式:bool is_uploaded_file ( string $filename )

move_uploaded_file — 将上传的文件移动到新位置

格式:bool move_uploaded_file ( string $filename , string $destination )

注意:如果目标文件已经存在,将会被覆盖。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>php上传</title>
	</head>
	<body>
		<form method="post" enctype="multipart/form-data">
			姓名:<input type="text" name="name"><br><br>
			上传:<input type="file" name="myfile"><br><br>
			<input type="submit" value="提交">
		</form>


<?php
$file = $_FILES['myfile']['tmp_name'];
if(is_uploaded_file($file)){
	var_dump($_FILES['myfile']);
	switch($_FILES['myfile']['type']){
		case 'image/jpeg':
		$pic = '.jpg';
		break;
		case 'image/jpg':
		$pic = '.jpg';
		break;
		case 'image/gif':
		$pic = '.gif';
		break;
		case 'image/png':
		$pic = '.png';
		break;
		default:
		echo '上传的格式不正确';
		exit;
	}
	$upload = 'upload/'.time().rand(1,1000).$pic;
	if(move_uploaded_file($file,$upload)){
		echo '上传成功!';
	}else{
		echo '上传失败!';
	}
}


?>

	</body>
</html>

多文件上传

多文件上传与上面的单文件上传所不同的主要在两处:

1.form表单的 <input type="file" name="myfiles[]" multiple="multiple"> 这里注意name值使用一个数组,并添加multiple属性(这个是HTML5新增的特性)

2.服务器端php处理的是数组,因此代码要相应修改。如下示例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>php上传</title>
	</head>
	<body>
		<form method="post" enctype="multipart/form-data">
			姓名:<input type="text" name="name"><br><br>
			上传:<input type="file" name="myfile[]" multiple="multiple"><br><br>
			<input type="submit" value="提交">
		</form>


<?php
$files = $_FILES['myfile'];
if(is_uploaded_file($files['tmp_name'][0])){
	//var_dump($files);
	foreach($files['type'] as $type){
		switch($type){
		case 'image/jpeg':
		$pic[] = '.jpg';
		break;
		case 'image/jpg':
		$pic[] = '.jpg';
		break;
		case 'image/gif':
		$pic[] = '.gif';
		break;
		case 'image/png':
		$pic[] = '.png';
		break;
		default:
		echo '上传的格式不正确';
		exit;
		}
	}
	//var_dump($pic);
	$i = 0;
	foreach($files['tmp_name'] as $tmp){
		$upload = 'upload/'.time().rand(1,1000).$pic[$i];
		if(move_uploaded_file($tmp,$upload)){
			echo '上传成功!';
		}else{
			echo '上传失败!';
			exit;
		}
		$i++;
	}
}

?>

	</body>
</html>

文件下载

通过 header 下载文件

<?php
 //文件下载
$filename="./upload/1500428853129.jpg";
$basename=pathinfo($filename);
header("Content-Type: application/octet-stream"); //指定下载文件类型的
header("Content-Disposition:attachment;filename=".$basename["basename"]);
//指定下载文件的描述信息
header("Content-Length:".filesize($filename));  //指定文件大小的
readfile($filename);//将内容输出,以便下载。

?>
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇