搜尋
首頁後端開發php教程【PHP 基础类库】Prototype 原形版教学文章

【PHP 基础类库】Prototype 原型版教学文章!

前言 大家好我是:石不易,今天我为大家带来了PHP基础类库原型版的教学文章,至此本人的作品线已分为三大类,分别是:JavaScript前端框架(封装库)、PHP模板引擎、以及PHP基础类库。该类库历时断断续续的开发了接近3个来月,期间有大段的空档时期没有开发,因此很惭愧一直拖到至今才算发布也了却了一桩心事。该类库主要分为5大模块,分别是:数据库操作模块分页模块文件上传模块缩略图模块 以及 验证码模块

 

获取 此文章为该类库的教学部分,会通过若干个实例源码讲解,来教大家学习使用本类库。在此之前学友们可以先访问我的个人官网进行类库源码的获取,以及查看与运行演示程序和阅读类库的API文档。访问以下链接即可传送至目标内容。本文也会分别发布至:博客园51CTOITeyeCSDN 等4大技术博客,供更多学友参阅!

本人官网:http://www.shibuyi.net

实例演示:http://www.shibuyi.net/demo/php/foundation_classes/prototype/

API 文档:http://www.shibuyi.net/api/php/foundation_classes/prototype/

 

运行环境 本次类库对 PHP 的运行环境也做出了诸多限制,目前只支持:PHP 5.25.3 以及 5.4,低于或高于此范围都将无法运行本类库;此外对于 PHP 的扩展也做出了严格的限制,以 Windows 平台为例,PHP 必须要同时开启:php_mysql.dllphp_mysqli.dllphp_mbstring.dllphp_gd2.dll 等 个扩展才能够完美运行。

 

目录结构 下面我们正式进入类库的教学正文,我讲解的次序依次为:数据库操作模块、分页模块、文件上传模块、缩略图模块以及验证码模块,在开始之前我们先对类库的文件目录结构做一个详细的介绍,以演示程序为准,大家可去官网下载。

上图为类库演示程序的文件目录结构,那么我逐一来讲解每一个目录与文件的含义,两外笔者使用的是 Windows 7 环境下的 ZendStudio 7.2.1 集成开发环境,因此大家如果采用的是其他环境下的开发平台,文件目录显示的方位和图标可能会略有差异。

Classes_Prototype :为整个类库演示程序的项目名称也是整个项目的根目录名称,大家下载的演示程序的根目录是中文名称,因此在运行之前请先更正为英文名称,中文名在一些平台下不支持。

/classes :为整个演示程序的核心目录,该目录存放了类库中所有的类文件,大家如果要自己开发项目或者学习类库,那么可以将 classes 目录中的类文件单独抽离出来移动到你自己的项目中即可。

  1. /classes/Database.class.php :该文件是数据库操作类的主文件。(入口文件,外部直接调用)
  2. /classes/FileUpload.class.php :该文件是文件上传类的主文件。(入口文件,外部直接调用)
  3. /classes/InterfaceDatabase.class.php :该文件是数据库操作类的接口文件。(接口文件,外部无法调用)
  4. /classes/NewDatabase.class.php :该文件是 MySQLi 数据库操作类文件。(非入口文件,不建议外部直接调用)
  5. /classes/OldDatabase.class.php :该文件是 MySQL 数据库操作类文件。(非入口文件,不建议外部直接调用)
  6. /classes/Page.class.php :该文件是分页类的主文件。(入口文件,外部直接调用)
  7. /classes/Thumbnail.class.php :该文件是缩略图类的主文件。(入口文件,外部直接调用)
  8. /classes/Tool.class.php :该文件是类库的公共工具类,类库文件均有继承该类方法。(抽象类文件,外部无法调用)
  9. /classes/ValidateCode.class.php :该文件是验证码类的主文件。(入口文件,外部直接调用)

/fonts :为演示程序的字体文件目录,主要提供给缩略图与验证码使用。

/includes :为演示程序的公共文件目录,主要存放初始化和公共文件。

/styles :为演示程序的 CSS 样式目录,包括分页类的分页样式。

/uploads :为文件上传类的根目录,大家可根据需求自行修改根目录名称,如果该目录不存在,文件上传类则会自动创建,详细操作再讲到文件上传类时在详细讲解。

/watermark :为演示程序的水印图片目录,存放供缩略图使用的水印图片文件。

/classes_prototype.sql :为演示程序的数据库文件,大家可直接通过数据库(MySQL)工具将其导入即可,否则数据库功能无法演示。

/code.php :为演示程序的验证码配置和输出文件。

/thumbnail.php :为演示程序的缩略图配置和输出文件。

 

数据库类 首先我们来看一下数据库模块的运用。数据库模块也是本类库最复杂的一个模块,其中包含了 个类文件与 1 个接口文件,我们在讲解之前先来看一下演示程序的执行效果图。

以上截图为演示程序的数据库与分页部分。在讲解数据库操作时,请大家参照 API 手册这样学习效果最佳。对类库讲解的顺序会按照 API 的接口排序依次讲解。下面我们就配合实际的代码进行讲解。

1. 数据库初始化

// 在开始之前,我们要先弄清楚数据库模块的 4 个类文件分别是用来做什么的。// 首先 Database 是数据库模块的外部调用类,所有数据库模块外部可调用的 API 均已集成在内,只需实例化后外部可直接操作。// 而 NewDatabase 与 OldDatabase 分别是 MySQLi 与 MySQL 数据库扩展的封装类,其功能已经集成到 Database 类中,因此无需分开调用,也不建议分开调用。// 最后的 InterfaceDatabase 接口类是解决前 3 个类库公共 API 的规范问题。// 那么在弄清楚了每个类文件的作用后,我们的下一步就是要配置数据库,并且要正确的配置,这样数据库模块才能够正常执行。所有的配置与操作均用 Database 类完成。// 设置数据库操作方式// true 为 MySQLi 扩展,false 为 MySQL 扩展,默认为:trueDatabase :: $type = ture;// 【必填】设置数据库地址,前后空格会被自动移除,默认为:localhostDatabase :: $host = 'localhost';// 【必填】设置数据库端口,默认为:3306Database :: $port = 3306;// 【必填】设置用户名称,前后空格会被自动移除,默认为:rootDatabase :: $username = 'louis';// 【必填】设置用户密码,默认为:空字符Database :: $password = 123456;// 设置数据库名称,前后空格会被自动移除,默认为:空字符Database :: $name = 'classes_prototype';// 设置字符编码,前后空格会被自动移除,默认为:utf8Database :: $charset = 'utf8';// 设置 SQL 语句转义开关// true 为打开转义开关,false 为关闭转义开关,默认为:trueDatabase :: $decodeSwitch = false;// 实例化数据库,之前配置信息全部生效$db = new Database();

以上代码为数据库的配置操作,只有将必填选项的配置都填写正确了,那么数据库在实例化时才能够被正常连接。接下来我们来运用一下 API 来对数据库数据进行:增、删、改、查等操作。

2. 选择数据库

// 指定数据库;如果 Database :: $name = '' 那么在数据库实例化时,就不会调用 set_name()// 只有 Database :: $name 被赋值了,那样才会调用 set_name() 选择该数据库// 重新设置数据库名称Database :: $name = 'classes_prototype';// 选择该名称的数据库$db -> set_name(); // 无返回值

3. 设置字符编码

// 指定字符编码;这里与指定数据库一样,如果 Database :: $charset = '' 那么 new Database() 时就不会调用 set_charset()// 当 Database :: $charset 被赋值了,那么才会调用 set_charset()// 重新设置字符编码Database :: $charset = 'utf8';// 选择该字符编码$db -> set_charset(); // 无返回值

4. 数据库查询

// 获取上一步插入操作 id$db -> get_id(); // 返回正整数值,如果没有执行任何 INSERT INTO 插入SQL 语句,那么将返回:0// 获取记录行总数,只需写入表名即可$tableName = 'cp_phone'; // $tableName 为表名$db -> get_total($tableName); // 返回正整数值,如果没有任何记录,则返回:0// 销毁结果集$db -> free_result(); // 无返回值// 获取记录行数$mode = false; // $mode 表示是否销毁当前查询结果集,true 为销毁,false 为忽略$db -> get_rows($mode); // 返回正整数值,如果没有任何记录,则返回:0// 获取操作行数$db -> get_affected(); // 返回正整数值,如果没有执行任何:增、删、改、查操作,那么则返回:0// 获取一条记录行// $sql 为单条 SQL 查询 SELECT 语句$sql = "SELECT `id`, `phone` FROM `cp_phone` WHERE `id` = 1 LIMIT 1;";$mode = false; // $mode 表示是否销毁当前查询结果集,true 为销毁,false 为忽略$db -> get_one($sql, $mode); // 返回对象// 获取多条记录行// $sql 为单条 SQL 查询 SELECT 语句$sql = "SELECT `id`, `phone` FROM `cp_phone` WHERE TRUE;";$mode = false; // $mode 表示是否销毁当前查询结果集,true 为销毁,false 为忽略$db -> get_all($sql, $mode); // 返回一维数组对象// 执行多条SQL查询// $sqls 为多条 SQL 查询 SELECT 语句,通过“;”号间隔 SQL 语句$sqls = '';$sqls .= "SELECT `id`, `phone` FROM `cp_phone` WHERE `id` = 1 LIMIT 1;";$sqls .= "SELECT `id`, `phone` FROM `cp_phone` WHERE `id` = 2 LIMIT 1;";$sqls .= "SELECT `id`, `phone` FROM `cp_phone` WHERE `id` = 3 LIMIT 1;";$db -> set_mutiple($sqls); // 返回二维数组对象

5. 数据库增、删、改操作

// 转义字符串;如果 Database :: $decodeSwitch = true 那么每次执行 SQL 语句查询或操作时,则都会先将 SQL 语句进行一次转义// 反之如果为 false 那么则忽略对 SQL 语句的转义,而直接执行$string = "SET NAMES 'utf8';"; // $string 为需要被转义的字符串,大部分时候是 SQL 语句// 进行字符串的转义,例如:\、'、"等特殊字符前导会被加上反斜杠$db -> decode($string); // 返回转义后的字符串// 执行操作语句(新增、修改、删除)// $sql 为单条 SQL 增、删、改语句$sql = "UPDATE `cp_phone` SET `phone` = '13034567890' WHERE `id` = 1 LIMIT 1;"; $db -> set_operation($sql); // 返回执行后响应的记录行数为:正整数值// 执行多条SQL操作(新增、修改、删除)// $sqls 为多条 SQL 增、删、改语句$sqls = '';$sqls .= "UPDATE `cp_phone` SET `phone` = '13034567890' WHERE `id` = 1 LIMIT 1;";$sqls .= "UPDATE `cp_phone` SET `phone` = '13078903456' WHERE `id` = 2 LIMIT 1;";$sqls .= "UPDATE `cp_phone` SET `phone` = '15634560000' WHERE `id` = 3 LIMIT 1;";$db -> set_mutiple($sqls); // 返回执行后每条 SQL 语句响应的记录行数为:一维数组正整数值// 执行事务处理// $sqls 为多条 SQL 增、删、改语句$sqls = '';$sqls .= "DELETE FROM `cp_phone` WHERE `id` = 1 LIMIT 1;";$sqls .= "DELETE FROM `cp_phone` WHERE `id` = 2 LIMIT 1;";$sqls .= "DELETE FROM `cp_phone` WHERE `id` = 3 LIMIT 1;";$db -> transaction($sqls); // 返回布尔值,true 为执行成功,false 为执行失败

6. 关闭数据库

// 析构方法:关闭数据库// 关闭数据库的 API 无需手动调用,在执行页面脚本执行完毕后,该析构方法会自动被执行,因此关闭数据库操作完全是自动完成$db -> __destruct();

 

分页类 分页模块共 1 个类文件,下图为分页执行效果图,共有两种输出样式,分别为:数字分页、文本分页。

1. 分页初始化

// 【必填】设置每页显示条数,默认为:10Page :: $pageSize = 10;// 【必填】设置数据库记录总数,默认为:0Page :: $total = $db -> get_total('cp_phone');// 设置分页主键,前后空格会自动移除,默认为:pagePage :: $pageKey = 'page';// 设置分页锚点,前后空格会自动移除,默认为:pPage :: $pageAnchor = 'p';// 设置分页锚点开关,true 为开启锚点功能,false 为关闭锚点功能,默认为:falsePage :: $anchorSwitch = true;// 设置分页样式开关,true 为数字分页样式,false 为文本分页样式,默认为:truePage :: $styleSwitch = true;// 设置数字分页长度,默认为:2Page :: $bothLength = 4;// 实例化分页,之前配置信息全部生效$page = new Page();

2. 分页输出

// 输出当前页码$page -> get_page() // 返回真正数值// 输出 limit$page -> get_limit() // 返回 LIMIT 字符串,例如:LIMIT 0,10// 输出分页样式// 如果 Page :: $styleSwitch 为 true 则输出数字分页的 HTML 字符串// 反之为 false 则会输出文本分页的 HTML 字符串$page -> page_style() // 返回 HTML 样式字符串

 

文件上传类 文件上传模块共 1 个类文件。

1. 上传初始化

// 【必填】设置上传主键,两边空格会自动移除,默认为:空字符FileUpload :: $uploadKey = 'up_img';// 设置新文件名称,两边空格会自动移除,默认为:空字符// 如果为空字符,那么文件名称将以日期时间代替FileUpload :: $fileName = '';// 设置上传根目录,两边空格会自动移除,默认为:'/uploads/'// 目录两边的正反斜杠,加或不加,上传类都加自动补齐FileUpload :: $rootDir = 'uploads';// 设置上传子目录,两边空格会自动移除,默认为:空字符// 目录两边的正反斜杠,加或不加,上传类都加自动补齐// 如果为空字符,那么子目录将以日期时间代替FileUpload :: $childDir = 'images';// 设置合法容量,默认为:0FileUpload :: $fileSize = 1;// 设置容量单位,默认为:'B'// 该容量单位不区分大小写,分别是:B(字节)、K/KB(千字节)、M/MB(兆字节)、G/GB(吉字节)、T/TB(太字节)FileUpload :: $sizeUnit = 'M';// 设置合法类型,默认为:空字符// 类型分为两种格式,一种是字符串格式,一种是数组格式FileUpload :: $fileType = array('image/jpeg', 'image/pjpeg', 'image/jpg', 'image/png', 'image/x-png', 'image/gif');// 保持原名开关,默认为:false// true 为开启原名,false 为关闭原名FileUpload :: $sourceSwitch = false;// 执行上传,之前设置全部生效$fileUpload = new FileUpload();

2. 获取路径

// 获取上传文件路径$fileUpload -> get_path(); // 返回上传的文件路径为:字符串

 

缩略图类 缩略图模块共 1 个类文件,下图为缩略图执行效果图。

1. 缩略图初始化

// 【必填】设置图片路径,两边空格会自动移除,默认为:空字符Thumbnail :: $path = 'uploads/images/201504162043361429188216.jpg';// 设置白色背景开关,true 为白色背景,false 为黑色背景,默认为:falseThumbnail :: $whiteSwitch = false;、// 设置输出方式开关,true 为文件输出,false 为浏览器输出,默认为:falseThumbnail :: $exportSwitch = false;// 设置统一类型开关,true 为开启统一类型,false 为关闭统一类型,默认为:trueThumbnail :: $typeSwitch = true;// 设置统一图片类型,两边空格会自动移除,默认为:'png'// 目前仅支持:png、jpeg、gif 三种格式图片Thumbnail :: $imageType = 'png';// 设置缩略方式,两边空格会自动移除,默认为:'%'// 缩略方式一共有三种:%(百分比缩略)、=(等比例缩略)、==(固定宽高等比例缩略)Thumbnail :: $thumbnailType = '==';// 设置百分比例,默认为:50Thumbnail :: $percent = 50;// 设置等比例,默认为:100Thumbnail :: $proportion = 100;// 设置固定宽度,默认为:100Thumbnail :: $fixedWidth = 280;// 设置固定高度,默认为:100Thumbnail :: $fixedHeight = 160;// 设置水印开关,true 为开启水印,false 为关闭水印,默认为:falseThumbnail :: $watermarkSwitch = true;// 设置文本水印开关,true 为文本水印,false 为图片水印,默认为:falseThumbnail :: $watermarkText = false;// 设置水印文本,两边空格会自动移除,默认为:'缩略图水印'Thumbnail :: $text = 'PHP基础类库';// 设置水印字体路径,两边空格会自动移除,默认为:空字符// 字体文件必须为:TTF 格式Thumbnail :: $fontPath = 'fonts/MSYHBD.TTF';// 设置水印图片路径,两边空格会自动移除,默认为:空字符// 水印图片宽度必须小于缩略图的二分之一,高度必须小于缩略图的四分之一,才会被显示Thumbnail :: $watermarkPath = 'watermark/watermark.png';// 设置水印字体大小,默认为:15Thumbnail :: $fontSize = 15;// 设置边框,true 为开启边框,false 为关闭边框,默认为:falseThumbnail :: $borderSwitch = true;// 实例化缩略图,之前设置全部生效new Thumbnail();

 

验证码类 验证码模块共 1 个类文件,下图为验证码执行效果图。

1. 验证码初始化

// 设置因子类型,两边空格会自动移除,默认为:'en-num'// 目前共支持三种类型,分别为:en(字母)、cn(汉字)、num(数字)// 如果为多种格式,那么需要在两种不同格式之间加上“-”用来分割ValidateCode :: $characterType = 'cn-en-num';// 设置输出方式,true 为文件输出,false 为浏览器输出,默认为:falseValidateCode :: $exportSwitch = false;// 设置输出路径,两边空格会自动移除,默认为:空字符ValidateCode :: $path = './';// 设置验证码图片名称,两边空格会自动移除,默认为:'code'ValidateCode :: $name = 'code';// 设置验证码字符个数,默认为:4ValidateCode :: $codeLength = 6;// 设置验证码图片类型,两边空格会自动移除,默认为:'png'// 目前仅支持三种格式:png、jpeg、gifValidateCode :: $imageType = 'png';// 设置验证码图片宽度,默认为:ValidateCode :: $width = 200;// 设置验证码图片高度,默认为:50ValidateCode :: $height = 50;// 设置噪点开关,true 为开启噪点,false 为关闭噪点,默认为:trueValidateCode :: $snowSwitch = true;// 设置噪点个数,默认为:100ValidateCode :: $snowTotal = 100;// 设置干扰线开关,true 为开启干扰线,false 为关闭干扰线,默认为:trueValidateCode :: $lineSwitch = true;// 设置干扰线个数,默认为:10ValidateCode :: $lineTotal = 10;// 设置字体路径,两边空格会自动移除,默认为:空字符// 字符文件必须为:TTF 格式ValidateCode :: $fontPath = 'fonts/MSYHBD.TTF';// 设置字体大小,默认为:20ValidateCode :: $fontSize = 20;// 设置边框开关,true 为开启边框,false 为关闭边框,默认为:falseValidateCode :: $borderSwitch = true;// 实例化验证码类,以上设置全部生效$validateCode = new ValidateCode();

2. 获取验证码

// 输出验证码字符$validateCode -> get_code(); // 返回生成后的验证码字符串,区分字母大小写

 

结语 经过几天断断续续的打磨,本类库的教学文章终于到了尾声。在最后我想给大家预告一下接下来的类库版本中将会新增哪些功能。首先数据库模块会专门针对 SQL 语句的增、删、改、查进行集成封装,外部调用更加简单;分页模块则会增加表单页码跳转功能,在数据量很大的时候即使是数字分页,想要跳转至中间某一页码并不是很方便,而表单页码则很好的解决了这一问题;文件上传模块会在细分出图片上传,并且针对图片上传做出更加具体的功能,比如:限制图片上传的尺寸大小;缩略图模块则会针对水印做出进一步的改进,例如用户可以自定义水印的方位,目前只能显示在缩略图的右下角;验证码模块会新增自定义背景图功能,用户可以插入多张背景图作为验证码的背景,每次刷新后会随机更换背景图。

 

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
使用數據庫存儲會話的優點是什麼?使用數據庫存儲會話的優點是什麼?Apr 24, 2025 am 12:16 AM

使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

您如何在PHP中實現自定義會話處理?您如何在PHP中實現自定義會話處理?Apr 24, 2025 am 12:16 AM

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

什麼是會話ID?什麼是會話ID?Apr 24, 2025 am 12:13 AM

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

您如何在無狀態環境(例如API)中處理會議?您如何在無狀態環境(例如API)中處理會議?Apr 24, 2025 am 12:12 AM

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。

您如何防止與會議有關的跨站點腳本(XSS)攻擊?您如何防止與會議有關的跨站點腳本(XSS)攻擊?Apr 23, 2025 am 12:16 AM

要保護應用免受與會話相關的XSS攻擊,需採取以下措施:1.設置HttpOnly和Secure標誌保護會話cookie。 2.對所有用戶輸入進行輸出編碼。 3.實施內容安全策略(CSP)限制腳本來源。通過這些策略,可以有效防護會話相關的XSS攻擊,確保用戶數據安全。

您如何優化PHP會話性能?您如何優化PHP會話性能?Apr 23, 2025 am 12:13 AM

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显著提升应用在高并发环境下的效率。

什麼是session.gc_maxlifetime配置設置?什麼是session.gc_maxlifetime配置設置?Apr 23, 2025 am 12:10 AM

theSession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceisesneededeededeedeedeededto toavoidperformance andunununununexpectedLogOgouts.3)

您如何在PHP中配置會話名?您如何在PHP中配置會話名?Apr 23, 2025 am 12:08 AM

在PHP中,可以使用session_name()函數配置會話名稱。具體步驟如下:1.使用session_name()函數設置會話名稱,例如session_name("my_session")。 2.在設置會話名稱後,調用session_start()啟動會話。配置會話名稱可以避免多應用間的會話數據衝突,並增強安全性,但需注意會話名稱的唯一性、安全性、長度和設置時機。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)