我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

一、文件上传:

先构造一个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

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringBoot使用FTP操作文件的过程(删除、上传、下载文件)

这篇文章主要介绍了SpringBoot使用FTP操作文件,主要包括配置ftp服务器,上传、删除、下载文件操作,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
2022-12-20

docker怎么安装minio及实现文件上传、删除、下载

这篇文章主要介绍“docker怎么安装minio及实现文件上传、删除、下载”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“docker怎么安装minio及实现文件上传、删除、下载”文章能帮助大家解决问
2023-07-05

PHP读取和写入CSV文件的代码写

这篇文章主要介绍“PHP读取和写入CSV文件的代码写”,在日常操作中,相信很多人在PHP读取和写入CSV文件的代码写问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP读取和写入CSV文件的代码写”的疑惑有所
2023-07-06

PHP学习笔记:文件上传与下载

引言:在现代网络应用中,文件上传与下载是非常常见的功能需求。无论是用户上传图片、音频、视频等文件,还是用户下载网站提供的资源文件,文件上传与下载都是必不可少的功能之一。本文将介绍如何使用PHP语言实现文件上传与下载功能,并提供具体代码示例,
2023-10-21

php上传文件写入失败如何解决

这篇文章主要讲解了“php上传文件写入失败如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php上传文件写入失败如何解决”吧!php上传文件写入失败是因为上传文件临时文件夹空间内存不够
2023-06-20

php如何实现文件的上传和下载

这篇文章将为大家详细讲解有关php如何实现文件的上传和下载,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Pe
2023-06-14

PHP读取和写入CSV文件的示例代码

CSV(逗号分隔值)文件是使用逗号分隔信息的文本文件。该文件的每一行都是一条数据记录,也就意味着它可以用于以表格的形式展现信息。本文主要介绍了PHP读取和写入CSV文件的方法,需要的可以参考一下
2023-05-15

如何使用PHP进行文件读写操作?(PHP读取和写入文件的方法有哪些?)

PHP提供多种文件读写方法,包括:fopen()和fwrite()、file_put_contents()、file()和file_put_contents()、fopen()和fgets()、fseek()和fread()、copy()、unlink()、PHPstreams、FilesystemIterator和FileInfo。选择方法取决于需求和限制。fopen()和fwrite()用于低级操作,file_put_contents()和file()更简单,PHPstreams和Filesystem
如何使用PHP进行文件读写操作?(PHP读取和写入文件的方法有哪些?)
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录