php入门-文件操作(文件包含、文件上传、文件管理)
0x00 起源
从零学习php,最终目的实现代码审计入门,软件采用sublime text,环境使用phpstudy搭建,需要有简单的html基础和php基础,跟随流沙前辈视频学习记录。
国庆放假摆烂几日,奖励自己好多把亚索,嘿嘿嘿,今日继续对php基础学习。
0x01 文件包含的简单例子
文件包含是高危漏洞,如果代码处理不好,就有可能对网站产生隐患。之前也对该漏洞作出记录。但现阶段目的是实现php代码审计入门,所以在原有基础上进一步理解原理。
文件包含漏洞使用特定函数把别的文件包含进来。
include 包含过程出错,报错但继续执行
include_once() 不会二次包含
require() 包含过程出错,直接退出不继续执行
require_once() 不会二次包含
代码一 2-9.php
<?php //PHP 文件管理操作一-文件包含$conn = array("host" => "localhost","mysql" => "localhost","port" => "3306","database" => "testdb");代码二 t3.php
<?phpecho "www.baidu.com<br/>";include '2-7.php'; //注意,此处2-7.php文件是不存在的,让它报错;这里先测试require//include、require函数可以理解为调用,等价于把代码一的$coon那一段代码调用到此处$host = $conn["port"]; //输入port数据,正常为3306,但是此处文件是2-7.phpecho $host;echo "xxaadqawd"; //下面添加回显内容,用于对比include和require
测试include可以看到使用include包含2-7.php,虽然2-7.php不存在导致过程出错,但还是正常执行下面的echo命令
测试require发现不错但不继续执行,这两者的区别就再此处体现
0x02 文件上传的简单例子
开始前要做的准备
1.首先是有关目录创建的小栗子,下面代码的核心逻辑为判断当前目录是否存在,不存在自己创建
//创建目录的代码段
<?php //echo __DIR__. "<br/>"; //输出当前路径//echo dirname(__DIR__); //输出上级目录//现在我们有一个情况,在上级目录下新建路径/uploads/imagesdefine("PATH",dirname(__DIR__));$path = PATH."/"."uploads"."/images"; //定义path,判断上级目录是否为uploads/images 等价于 ../uploads/images$dir1 = date("Ym"); //年月$dir2 = date("d"); //日$fullPath = $path."/".$dir1.$dir2; //拼接完整路径if(is_dir($fullPath)){ //判断指定的文件是否是目录echo "yes"; //是输出yes}else{// echo "no"; 不是目录,使用mkdir函数创建路径mkdir($fullPath,0777,true); //创建路径,赋予文件权限}
首先自己先创建uploads/images路径,上传的图片都会上传到这个路径,可以看到正常情况下是空的。
但是当代码判断为否时,会在images路径根据当前年月日创建文件夹
2.结合1实现上传代码,文件上传要用到函数 move_uploaded_file,该函数用来移动图片路径
<?php header("Content-type:text/html;charset=utf-8"); //因为下面有中文,不输入可能会存在问题if(empty($_FILES)){echo "请上传文件";}else{//echo $_FILES["picture"]["name"]."<br/>";//echo $_FILES["picture"]["tmp_name"];define("PATH",dirname(__DIR__));$path = PATH."/"."uploads"."/images"; $dir1 = date("Ym"); $dir2 = date("d"); $fullPath = $path."/".$dir1.$dir2; if(is_dir($fullPath)){ echo "yes"; }else{// echo "no"; mkdir($fullPath,0777,true); }$fileName = rand(10000,99999); //上传的图片文件名给予5位随机数,从10000-99999$fileType = strrchr($_FILES["picture"]["name"],".");$fileName = $fileName.$fileType; move_uploaded_file($_FILES["picture"]["tmp_name"],$fullPath."/".$fileName); //把html表单上传的文件移动到所需的目录;类比把客户端输入的图片移动到服务器
}
3.前端的上传代码实现
<!DOCTYPE htnl> <!--文件上传表单-->
<html>
<head><meta charset="utf-8"><title>测试文件上传</title>
</head>
<body>
<form action="t3.php" method="post" enctype="multipart/form-data"> <!--文件上传需要加上enctype="multipart/form-data"--><input type="file" name="picture"/><input type="submit"/>
</form>
</body>
</html>
在html页面上传1.jpg,最终实现的上传到图片服务器的为随机数20126.jpg,当然实际网站不可以这样写。
0x03 文件管理
unlink() 删除文件
realpath(".") 等价于__dir__输出当前路径
file_get_contents() 从文件中读取内容
file_put_contents() 向文件中写入内容
file_get_contents读取文件内容小例子
<?phpheader("Content-type:text/html;charset=utf-8");$str = file_get_contents("t5.php");var_dump($str);
使用递归思想的小栗子
<?phpheader("Content-type:text/html;charset=utf-8");/*$path 目录$lev 层级*/function showDir($path,$lev=0){$fh = opendir($path);while($row = readdir($fh)){//如果目录为.和..就跳过if(($row=='.') || ($row=='..')){continue;}echo str_repeat(" ",$lev),$row,'<br/>';//如果目录里面还有目录,就继续往下读取目录if(is_dir($path.'/'.$row)){showdir($path.'/'.$row,$lev+1);}}closedir($fh);}showDir('.'); //输出当前目录下的文件
php入门-文件操作(文件包含、文件上传、文件管理)相关推荐
- EasyExcel实现文件读取、导出、上传、下载操作
一.EasyExcel简介 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度 ...
- [Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- Java编程那些事儿——文件操作之写文件
Java编程那些事儿--文件操作之写文件 Java, Java培训, Java基础, Java学习, Java教程 11.3.1.4 写文件 如前所述,将程序内部的数据输出到程序外部的数据源,应该使用 ...
- ajax上传 java_使用Ajax进行文件与其他参数的上传功能(java开发)
文件上传: 记得前一段时间,为了研究Ajax文件上传,找了很多资料,在网上看到的大部分是form表单的方式提交文件,对于Ajax方式提交文件并且也要提交表单中其他数据,发现提及的并不是很多,后来在同事 ...
- 【Python】文件操作(单文件操作)
目录 一.文件操作概述: 二.文件基本操作: 文件操作步骤: 1.打开文件: 2.对文件进行读写操作: 3.关闭文件的输入输出流: demo: 文件访问模式: 基础访问模式特点: 读取操作: 1.re ...
- 上传excel文件到服务器,excel怎么上传到云服务器
excel怎么上传到云服务器 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分别安 ...
- 读取Java文件到byte数组的三种方式及Java文件操作大全(包括文件加密,String加密)
读取Java文件到byte数组的三种方式 package zs;import java.io.BufferedInputStream; import java.io.ByteArrayOutputSt ...
- C文件操作、读写文件 C++文件读写、文件操作
转自 飘羽随风 基于C的文件操作 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之. 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FI ...
- JavaScript上传大文件并支持中途取消上传
最近遇见一个需要上传超大大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...
- vba 文件操作服务器,VBA文件及文件夹操作
VBA文件及文件夹操作 1.VBA操作文件及文件夹 on error resume next下测试 A,在D:\下新建文件夹,命名为folder 方法1:MkDir "D:\folder&q ...
最新文章
- 近期上海面试总结(一)
- Spring Boot + Elasticsearch
- 穿过代理服务器取远程用户真实IP地址
- 项目分发系统-expect
- matlab九节点网络仿真问题,三机九节点电力系统仿真matlab.docx
- 大学c语言程序设计期末考试试卷,大学大一c语言程序设计期末考试试卷及答案.doc...
- 用Python做一个简单的翻译工具
- 应用容器Application container
- java 与 .net socket_java.net.ServerSocket和java.net.Socket
- ajax 传送很多html字符串到前台例子
- HFSS器件导入Altium 教程
- 百度文库免费下载方法
- magic,imagesc,drawnow
- SpringMVC文件上传和Jwt身份验证
- java控制小数位数_java中怎么控制double的小数位数?
- pandas写入excel指定行_使用pandas操作excel
- 2020年美容师(初级)多少钱及美容师(初级)模拟考试题库
- C语言习题:输入10个学生5门课的成绩,分别用函数求:①每个学生平均分;②每门课的平均分;③找出所有分数中最高分
- labelme_json_to_dataset报错: ModuleNotFoundError: No module named ‘labelme
- 北航计算机考博经验,北航考博经验总结和感受
热门文章
- 《计算机网络》笔记-第3章运输层
- UnityShader学习笔记 Unity的表面着色器
- spring事务失效了? @Transactional不管用了 ?看看这些@Transation的坑
- 经度从0-360更改为-180到180
- Duplicate class com.amap.api.fence.DistrictItem found in modules jetified-3dmap-9.3.1.jar (com.amap.
- hashmap hash冲突怎么解决_10个HashMap问题搞定面试官
- 3G单兵构建现代化应急指挥系统
- Python安装和运行
- 学习 Civil 3D二次开发从哪儿开始?
- 为什么插入HDMI线,电脑的音响就没有声音了