PHP-上传文件

Posted Sch01aR#

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP-上传文件相关的知识,希望对你有一定的参考价值。

php.ini中和和文件上传相关的选项

指令名 默认值 描述
file_uploads ON 服务器上的php脚本是否可以接受文件上传
max_execution_time 30 PHP脚本在注册一个致命错误之前可以执行的最长时间,以秒为单位
memory_limit 128MB 设置PHP脚本可以分配到的最大内存,以MB为单位,这样可以防止失控的脚本独占服务器内存
upload_max_filesize 2MB 设置上传文件的大小的最大值,以MB为单位。此指令必须小于post_max_size
upload_tmp_dir NULL 设置文件上传后存放的临时目录
post_max_size 8M 通过POST方式发送信息的大小,以MB为单位

用来上传文件的php脚本

<form enctype="multipart/form-data" action="upload.php" method="post">
	<input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
	上传文件:<input type="file" name="userfile" />
	<input type="submit" value="上传" />
</form>

 POST方式发送文件到upload.php进行处理

选择本地的一个shell.jpg文件

upload.php中的内容

<?php 

	//打印文件信息的数组
	print_r($_FILES);

?>

 点击上传

全局数组$_FILES中的元素说明

数组 描述
$_FILES[\'userfile\'][\'name\'] 上传的文件的文件名
$_FILES[\'userfile\'][\'type\'] 上传的文件的文件类型
$_FILES[\'userfile\'][\'tmp_name\'] 上传的文件临时存放地址
$_FILES[\'userfile\'][\'error\'] 上传的文件的错误类型
$_FILES[\'userfile\'][\'size\'] 上传的文件的大小

 

 

 

 

 

 

对上传的文件进行过滤和处理

<?php 

	//允许上传的文件类型
	$allow_type = [\'image/jpeg\', \'image/png\', \'image/pjpeg\', \'image/x-png\', \'image/gif\'];
	//判断上传的类型是否被允许
	if (!in_array($_FILES[\'userfile\'][\'type\'], $allow_type)){
		echo "<script>alert(\'只允许上传jpg/png/gif类型的图片\')</script>";
		exit;
	}


	//判断上传过程中是否发生错误
	if ($_FILES[\'userfile\'][\'error\'] != 0){
		switch ($_FILES[\'userfile\'][\'error\']) {
			case 1:
			echo "<script>alert(\'上传文件的大小超过了php.ini中upload_max_filesize的约定值\')</script>";
			break;
		case 2:
			echo "<script>alert(\'上传文件的大小超过了上传表单max_file_size规定的最大值\')</script>";
			break;
		case 3:
			echo "<script>alert(\'文件只被部分上传\')</script>";
			break;
		case 4:
			echo "<script>alert(\'文件没有被上传\')</script>";
			break;
		}
		exit;
	}


	//用来再次判断上传文件的大小
	define(\'MAX_SIZE\', 2000000);
	if ($_FILES[\'userfile\'][\'size\'] > MAX_SIZE){
		echo "<script>alert(\'上传的文件大小不能超过2M\')</script>";
		exit;
	}


	//判断目录是否存在
	define(\'URL\', dirname(__FILE__).\'\\files\');
	if (!is_dir(URL)) {
		mkdir(URL);
	}

	//把文件从临时文件夹移动到指定文件夹
	if (is_uploaded_file($_FILES[\'userfile\'][\'tmp_name\'])){
		if (!@move_uploaded_file($_FILES[\'userfile\'][\'tmp_name\'], URL.\'/\'.$_FILES[\'userfile\'][\'name\'])){
			echo "<script>alert(\'移动失败\');history.back();</script>";
			exit;
		}
	}else {
		echo "<script>alert(\'临时文件夹找不到文件\');history.back();</script>";
		exit;
	}


	//经过以上过滤,符合条件的文件上传成功,执行以下语句
	echo "<script>alert(\'文件上传成功\');location.href=\'url.php?url=files/".$_FILES[\'userfile\'][\'name\']."\'".";</script>";

?>

 上传文件

然后跳转到http://127.0.0.1/upload/url.php?url=files/shell.jpg

 

以上是关于PHP-上传文件的主要内容,如果未能解决你的问题,请参考以下文章

代码片段 PHP,预期文件结尾,我错在哪里?

android的自带的httpClient 怎么上传文件

PHP常用代码片段

Alamofire 文件上传出现错误“JSON 文本未以数组或对象开头,并且允许未设置片段的选项”

PHP文件上传代码用法

php文件上传漏洞代码只允许上传图片