PHP(文件上传、下载、删除、读取&写入)
后台-插件-广告管理-内容页头部广告(手机) |
一、文件上传:
先构造一个html的上传页面
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>文件上传title>
- head>
- <body>
- <form id="upload-form" action="upload.php" method="post" enctype="multipart/form-data" >
- <input type="file" id="upload" name="upload" /> <br />
- <input type="submit" value="Upload" />
- form>
- body>
- html>
action:是提交给谁处理,写upload.php的话就交由upload.php处理,为空就是自己处理
可以看到页面成功构造成功,接下来了解一下PHP_FILES这个函数
- "en">
- "UTF-8">
-
文件上传 - "file" id="upload" name="upload" />
- "submit" value="Upload" />
- <?php
- //获取上传文件的名字
- $name=$_FILES['upload']['name']; #第一个参数接受的是表单的name
- //获取上传文件的类型
- $type=$_FILES['upload']['type'];
- //获取上传文件的大小
- $size=$_FILES['upload']['size'];
- //获取上传文件的错误代码
- $error=$_FILES['upload']['error'];
- //获取上传文件的临时文件名
- $tmpname=$_FILES['upload']['tmp_name'];
- echo $name."
"; - echo $type."
"; - echo $size."
"; - echo $error."
"; - echo $tmpname."
";
上传一个图片看下效果
接下来熟悉一下move_uploaded_file() 函数
move_uploaded_file() 函数把上传的文件移动到新位置。
如果成功该函数返回 TRUE,如果失败则返回 FALSE
语法
move_uploaded_file(file,newloc)
file | 必需。规定要移动的文件。 |
newloc | 必需。规定文件的新位置。 |
在当前文件目录下有一个upload文件夹,把接收的文件移动到upload目录下,$name是获取的文件名字
- if(!move_uploaded_file($tmpname,'upload/'.$name)){
- echo '文件移动失败';
- }
- else{
- echo '文件上传成功';
- echo '/upload/'.$name;
- }
可以看到文件成功上传到指定位置
简单的进行一个判断是否是png的类型
- if($type=='image/png'){
- if(!move_uploaded_file($tmpname,'upload/'.$name)){
- echo '文件移动失败';
- }
- else{
- echo '文件上传成功';
- echo '/upload/'.$name;
- }
- }
- else{
- echo '文件类型不正确';
- }
过滤更多后缀
explode()函数:使用一个字符串分割另一个字符串,并返回由字符串组成的数组。
- $name='shell.php';
- $Filenames = explode(".",$name);
- var_dump($Filenames);
看到结果:可以以 “.” 进行分割,并且是数组
array_pop()函数:弹出数组最后一个单元
可以看到是可以将后缀成功拿到
定义一个白名单数组,将上传的文件后缀拿出来判断是否在这个数组里面,操作是否要上传
- $allowType = array("jpg", "png", "gif", "jpeg", "ico","zip");//允许的文件拓展名
- $Filenames = explode(".",$name); // 使用.分割$name
- $Filenamelast=array_pop($Filenames); // 取出数组的最后一个单元,也就是拿到后缀
- if($Filenamelast){ //判断是否上传了文件
- if(in_array($Filenamelast,$allowType)){ //判断是否在这个数组里面
- if(!move_uploaded_file($tmpname,'upload/'.$name)){
- echo '文件移动失败';
- }
- else{
- echo '文件上传成功';
- echo '/upload/'.$name;
- }
- }
- else{
- echo '文件类型不正确';
- }
- }
完整代码:
- "en">
- "UTF-8">
-
文件上传 - "file" id="upload" name="upload" />
- "submit" value="Upload" />
- <?php
- //获取上传文件的名字
- $name=$_FILES['upload']['name']; #第一个参数接受的是表单的name
- //获取上传文件的类型
- $type=$_FILES['upload']['type'];
- //获取上传文件的错误代码
- $size=$_FILES['upload']['size'];
- //获取上传文件的错误代码
- $error=$_FILES['upload']['error'];
- //获取上传文件的临时文件名
- $tmpname=$_FILES['upload']['tmp_name'];
- echo $name."
"; - echo $type."
"; - echo $size."
"; - echo $error."
"; - echo $tmpname."
"; - $allowType = array("jpg", "png", "gif", "jpeg", "ico","zip");//允许的文件拓展名
- $Filenames = explode(".",$name); // 使用.分割$name
- $Filenamelast=array_pop($Filenames); // 取出数组的最后一个单元,也就是拿到后缀
- if($Filenamelast){ //判断是否上传了文件
- if(in_array($Filenamelast,$allowType)){ //判断是否在这个数组里面
- if(!move_uploaded_file($tmpname,'upload/'.$name)){
- echo '文件移动失败';
- }
- else{
- echo '文件上传成功';
- echo '/upload/'.$name;
- }
- }
- else{
- echo '文件类型不正确';
- }
- }
二、文件下载
文件下载分两种
直连下载:http://www.xxx.com/soft/软件.zip
参数下载:http://www.xxx.com/soft/down.php?filename=软件.zip
getchwd() 函数返回当前工作目录
scandir() 函数返回指定目录中的文件和目录的数组
- function getfilename(){ //定义一个函数,将文件名拿出来
- $filepath=getcwd(); //获取到当前路径
- var_dump($filepath);
- $filename=scandir($filepath.'/soft/'); //把当前路径下的soft文件夹下的东西都显示出来
- var_dump($filename);
- }
- getfilename();
看下效果:
foreach 循环用于迭代一个列表或集合变量的值
- function getfilename(){
- $filepath=getcwd(); //获取到当前路径
- $filename=scandir($filepath.'/soft/'); //把当前路径下的soft文件夹下的东西都显示出来
- foreach ($filename as $value){ //将数组里的值遍历出来
- if($value != '.' && $value != '..'){ //判断是否是正常的文件
- $arr[]=$value; //添加到$arr数组里面
- echo $value.'
'; //将每一个文件名打印出来 - }
- }
- }
看下效果: 可以成功将我们的文件名拿出来
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组
我们可以通过这个全局变量拿到一些相关信息
举个简单的例子:http://localhost/aaa/?p=222
结果:
$_SERVER['QUERY_STRING'] = "p=222";
$_SERVER['REQUEST_URI'] = "/aaa/?p=222";
$_SERVER['SCRIPT_NAME'] = "/aaa/index.php";
$_SERVER['PHP_SELF'] = "/aaa/index.php";
$_SERVER['HTTP_HOST'] = "localhost"
更多$_SERVER的使用:$_SERVER参数的含义 (bbsmax.com)
定义一个函数,根据传进来的文件名能访问到它
- function geturldown($name){
- $url='http://'.$_SERVER['HTTP_HOST'].'/php-start/file/soft/'.$name;
- echo $url;
- }
可以看到正常无参调用是这样的,如果传进参数就构成完整的url地址了
修改一下之前的表单信息:接收前端输入的数据并调用geturldown这个函数
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>文件下载title>
- head>
- <h1>直连下载h1>
- <form id="upload-form" action="" method="post" enctype="multipart/form-data" >
- <input type="text" name="name" /> <br />
- <input type="submit" value="下载" />
- form>
- <?php getfilename();?>
- <?php $name=$_POST['name'];geturldown($name);?>
- <h1>传参下载h1>
- <body>
- body>
- html>
看下效果:可以将文件位置获取到,而下载文件只需要访问这个url就可以
PHP中header:可以用作重定向,有很多操作,下面利用重定向url地址,达到下载文件效果
PHP中header函数的用法及其注意事项详解_php实例_脚本之家 (jb51.net)
header重定向:
header(‘Location: http://www.phpthinking.com');
修改一下之前的代码,重定向一下
- function geturldown($name){
- $url='http://'.$_SERVER['HTTP_HOST'].'/php-start/file/soft/'.$name;
- echo $url;
- if($name){ //判断一下是否有传进来的参数,在决定跳转下载
- header("location:$url");
- }
- }
单引号的字符串是单纯的字符串
双引号的字符串 里面的变量就是变量的值
输入文件名,下载成功:
完整代码
- "en">
- "UTF-8">
-
文件下载 - <?php getfilename();?>
直连下载
- "text" name="name" />
- "submit" value="下载" />
- <?php $name=$_POST['name'];geturldown($name);?>
传参下载
- <?php
- //获取文件列表
- function getfilename(){
- $filepath=getcwd(); //获取到当前路径
- $filename=scandir($filepath.'/upload/'); //把当前路径下的upload文件夹下的东西都显示出来
- foreach ($filename as $value){
- if($value != '.' && $value != '..'){
- $arr[]=$value;
- echo $value.'
'; - }
- }
- }
- //直连下载函数
- function geturldown($name){
- $url='http://'.$_SERVER['HTTP_HOST'].'/php-start/file/upload/'.$name;
- echo $url;
- if($name){
- header("location:$url");
- }
- }
三、文件删除
1、文件删除
2、文件夹删除
unlink()函数:删除文件
rmdir()函数:删除文件夹
直接用这两个函数即可
- function delfilename($name){
- @unlink($name);
- }
- function delfiledir($name){
- @rmdir($name);
- }
还是用之前的代码替换一下函数即可
文件删除
- <?php getfilename();?>
- 需要删除的文件"text" name="name" />
- "submit" value="删除" />
- <?php $name=$_POST['name'];delfilename($name);?>
文件夹删除
- <?php getfilename();?>
- 需要删除的文件夹"text" name="name" />
- "submit" value="删除" />
- <?php $name=$_POST['name'];delfiledir($name);?>