php控件 上传文件,PHP 文件上传

这段PHP代码展示了如何处理用户上传的文件,包括检查文件大小、类型,并将其安全地存储到服务器上特定用户的文件夹中。代码首先设置了字符编码,然后接收POST数据,接着检查上传的文件是否超过2MB,是否为允许的图片格式。如果文件上传成功,它会创建一个以用户名为名的目录(如果不存在),并生成一个唯一的文件名以避免文件覆盖。最后,使用move_uploaded_file函数将文件移动到新位置。
摘要由CSDN通过智能技术生成

header("Content-Type:text/html;Charset=utf-8");

//1、接收提交的文件及其用户信息

$username=$_POST['username'];

$fileintro=$_POST['fileintro'];

//echo $username."||".$fileintro;

//我们这里需要使用到 $_FILE

echo "

";

/* $_FILES["file"]["name"] - 被上传文件的名称

$_FILES["file"]["type"] - 被上传文件的类型

$_FILES["file"]["size"] - 被上传文件的大小,以字节计

$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称

$_FILES["file"]["error"] - 由文件上传导致的错误代码 */

print_r($_FILES);

echo "

";

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

{

echo "Error: " . $_FILES["myfile"]["error"] . "
";

}

else

{

echo "Upload: " . $_FILES["myfile"]["name"] . "
";

echo "Type: " . $_FILES["myfile"]["type"] . "
";

echo "Size: " . ($_FILES["myfile"]["size"] / 1024) . " kB
";

echo "Stored in: " . $_FILES["myfile"]["tmp_name"]. "
";

}

/* 上传文件需要考虑的细节:

(1), 如何控制用户上传的文件大小 

(2), 如何控制用户上传的文件类型(问题!)

(3), 如何防止用户图片覆盖问题

(4), 如何防止同一个用户上传的文件名相同问题 */

//2、获取文件大小、格式等

//获取文件的大小

$file_size=$_FILES['myfile']['size'];

if($file_size>2*1024*1024){

echo "文件过大,不能上传大于2m文件";

exit();

}

//获取文件的类型

$file_type=$_FILES['myfile']['type'];

if (($file_type!="image/gif")&&($file_type!="image/jpeg")&&($file_type!="image/jpg")

&&($file_type!="image/pjpeg")&&($file_type!="image/x-png")&&($file_type!="image/png")){

echo "文件类型只能是图片";

exit();

}

//3、转存文件

//is_uploaded_file() 函数检查指定的文件是否是通过 HTTP POST 上传的。

//如果文件是通过 HTTP POST 上传的,该函数返回 TRUE。

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

//要转存的文件

$uploaded_file=$_FILES['myfile']['tmp_name'];

//我们给每个用户动态的创建一个文件夹

$user_path=$_SERVER['DOCUMENT_ROOT']."/file/upload/$username/";

echo '要创建的文件目录:'.$user_path;

//判断该用户是否已经有文件夹

if(!file_exists($user_path)){

//如果不存在,创建该目录

mkdir("$user_path",0777,true);

}

$file_true_name=$_FILES['myfile']['name'];

/* strrpos() 函数查找字符串在另一字符串中最后一次出现的位置(区分大小写)。

注释:strrpos() 函数是区分大小写的。

相关函数:

strpos() - 查找字符串在另一字符串中第一次出现的位置(区分大小写)

stripos() - 查找字符串在另一字符串中第一次出现的位置(不区分大小写)

strripos() - 查找字符串在另一字符串中最后一次出现的位置(不区分大小写)

语法

strrpos(string,find,start)

string  必需。规定被搜索的字符串。

find    必需。规定要查找的字符。

start   可选。规定开始搜索的位置。 */

/* substr() 函数返回字符串的一部分。

注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。

语法

substr(string,start,length)

参数  描述

string  必需。规定要返回其中一部分的字符串。

start   必需。规定在字符串的何处开始。

正数 - 在字符串的指定位置开始

负数 - 在从字符串结尾的指定位置开始

0 - 在字符串中的第一个字符处开始

length  可选。规定要返回的字符串长度。默认是直到字符串的结尾。

正数 - 从 start 参数所在的位置返回

负数 - 从字符串末端返回 */

//文件转存后的文件名

$move_to_file=$user_path.time().rand(1,1000).substr($file_true_name,strrpos($file_true_name,"."));

//转存文件

//move_uploaded_file() 函数把上传的文件移动到新位置。

//如果成功该函数返回 TRUE,如果失败则返回 FALSE。

if(move_uploaded_file($uploaded_file,iconv("utf-8","gb2312",$move_to_file))){

echo $_FILES['myfile']['name']."转存ok
";

echo '文件上传后的具体路径:'.$move_to_file;

}else{

echo "文件转存失败";

}

}else{

echo "文件上传失败";

}

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值