文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP(文件上传、下载、删除、读取&写入)

2023-09-04 11:34

关注

一、文件上传:

先构造一个html的上传页面

        文件上传

action:是提交给谁处理,写upload.php的话就交由upload.php处理,为空就是自己处理

 可以看到页面成功构造成功,接下来了解一下PHP_FILES这个函数

        文件上传

";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 '文件类型不正确';    }}

完整代码:

        文件上传

";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这个函数

        文件下载

直连下载


传参下载

看下效果:可以将文件位置获取到,而下载文件只需要访问这个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");    }}

单引号的字符串是单纯的字符串 

双引号的字符串 里面的变量就是变量的值

输入文件名,下载成功:

 完整代码

        文件下载

直连下载


传参下载

'; } }}//直连下载函数function geturldown($name){ $url='http://'.$_SERVER['HTTP_HOST'].'/php-start/file/upload/'.$name; echo $url; if($name){ header("location:$url"); }}

三、文件删除

文件删除

文件夹删除

unlink()函数:删除文件

rmdir()函数:删除文件夹

直接用这两个函数即可

function delfilename($name){    @unlink($name);}function delfiledir($name){    @rmdir($name);}

还是用之前的代码替换一下函数即可

文件删除

需要删除的文件

文件夹删除

需要删除的文件夹
'; } }}function delfilename($name){ @unlink($name);}function delfiledir($name){ @rmdir($name);}

四、文件读取&写入

1)文件读取:

fopen() 函数:打开一个文件或 URL。

如果 fopen() 失败,它将返回 FALSE 并附带错误信息。可以通过在函数名前面添加一个 '@' 来隐藏错误输出。

例子:$file = fopen("test.txt","r");

模式描述
r打开文件为只读。文件指针在文件的开头开始。
w打开文件为只写。删除文件的内容或创建一个新的文件,如果它不存在。文件指针在文件的开头开始。
a打开文件为只写。文件中的现有数据会被保留。文件指针在文件结尾开始。创建新的文件,如果文件不存在。
x创建新文件为只写。返回 FALSE 和错误,如果文件已存在。
r+打开文件为读/写、文件指针在文件开头开始。
w+打开文件为读/写。删除文件内容或创建新文件,如果它不存在。文件指针在文件开头开始。
a+打开文件为读/写。文件中已有的数据会被保留。文件指针在文件结尾开始。创建新文件,如果它不存在。
x+创建新文件为读/写。返回 FALSE 和错误,如果文件已存在。

fread() 函数读取打开的文件。

fread() 的第一个参数包含待读取文件的文件名,第二个参数规定待读取的最大字节数。

如下 PHP 代码把 "webdictionary.txt" 文件读至结尾:

fread($myfile,filesize(webdictionary.txt));

fclose() 函数用于关闭打开的文件。

function fileread($name){        $myfile = @fopen($name, "r");//打开$name文件        echo @fread($myfile,filesize($name));  //读取到结尾        @fclose($myfile); //关闭}

可以看到1.txt里面成功读取到123 

2)文件写入:

fwrite语法

fwrite(file,string,length)

参数描述
file必需。规定要写入的打开文件。
string必需。规定要写入打开文件的字符串。
length可选。规定要写入的最大字节数。

修改一下前端

需要写入的文件
需要写入的代码

稍微修改一下之前的代码

function filewrite($name,$txt){        $myfile = @fopen($name, "w+");        @fwrite($myfile,$txt);        @fclose($myfile);}

写入文件,在用读取文件读一下,成功

 

完整代码

        文件下载

文件读取

需要读取的文件

文件写入

需要写入的文件
需要写入的代码
'; } }}function fileread($name){ $myfile = @fopen($name, "r");//打开$name文件 echo @fread($myfile,filesize($name)); @fclose($myfile);}function filewrite($name,$txt){ $myfile = @fopen($name, "w+"); @fwrite($myfile,$txt); @fclose($myfile);}

来源地址:https://blog.csdn.net/fainpo/article/details/129624271

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯