使用PHP如何实现高效安全的ftp服务器(一)


Posted in PHP onDecember 20, 2015

FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。 FTP是File Transfer Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。简单地说,支持FTP协议的服务器就是FTP服务器。

摘要:

本文主要阐述使用PHP的swoole扩展实现ftp服务器,同时扩展ftp服务器个性化功能和安全性。真正实现一个自己完全掌控的ftp服务器,可以个性化定制的ftp服务器。

正文:

FTP服务器想必大家都不陌生,使用起来,现成的软件也很多。不过免费的软件功能有时候并不符合自己需求,又无法二次开发,付费软件价格又比较高昂。PHP的swoole扩展,是PHP语言的高性能网络通信框架,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。

Swoole可以广泛应用于互联网、移动通信、企业软件、网络游戏、物联网、车联网、智能家庭等领域。 使用PHP+Swoole作为网络通信框架,可以使企业IT研发团队的效率大大提升,更加专注于开发创新产品。

 

Swoole底层内置了异步非阻塞、多线程的网络IO服务器。PHP程序员仅需处理事件回调即可,无需关心底层。与Nginx/Tornado/Node.js等全异步的框架不同,Swoole既支持全异步,也支持同步。

有了这个基础,基于TCP/IP协议的服务器开发就变得容易了。或许大家会问,C#等其他语言同样可以实现啊,为什么用PHP呢?我想主要考虑的还是开发效率。PHP是无需编译的脚本语言,开发部署速度快。

无需赘言,这里列出步骤:

00

准备平台,我这里使用的CentOS7;

01

安装php和swoole扩展,请参考http://wiki.swoole.com/wiki/page/6.html;

02

设置字符集,由于ftp处理文件名容易出现乱码,建议将操作系统的字符集设置成GB18030,这样与Windows保持一致,目前大部分ftp客户端虽然也支持utf8文件名编码,但是,使用起来比不如意。如何好的解决方案请不吝告知,非常感谢;

03

开始编写php程序,测试php程序;

04

部署php版的ftp服务器。

本文要实现ftp服务器的功能目标有:

 

* 用户,组管理;

* 密码自助修改与重置;

* 文件夹权限管理;

* IP访问控制;

* 在线用户查看;

* 磁盘空间使用查看;

* SSL支持,保护密码及文件的传输安全;

* 内置web管理页面,方便进行远程管理。

项目目录:

FtpServer

|

+-conf


|

|

+-config.php

//FTP配置文件

|

+-ssl.crt

//ssl证书

|

+-ssl.key

//ssl密钥

|

+-inc

|

|

|

+-CSmtp.php

//smtp发邮件类,用于FTP密码发送和重置

|

+-ShareMemory.php //共享内存操作类

|

+-User.php

 //用户管理、文件权限管理、IP访问控制

|

+-logs

//日志文件

|

+-reference //参考文档

|

+-web

|

|

|

+-wwwroot

//FTP Web管理网站

|

+-CWebServer.php //FTP内置http服务器

|

+-CFtpServer.php  //FTP服务器主程序

+-MyFtpServer.php  //FTP入口程序 

此篇文章先给大家介绍到这里,后续还会持续更新。关于使用PHP如何实现高效安全的ftp服务器(二),可以点击了解详情。

PHP 相关文章推荐
以文本方式上传二进制文件的PHP程序
Oct 09 PHP
php下过滤html代码的函数 提高程序安全性
Mar 02 PHP
php 获取SWF动画截图示例代码
Feb 10 PHP
PHP远程采集图片详细教程
Jul 01 PHP
PHP生成网站桌面快捷方式代码分享
Oct 11 PHP
PHP中使用正则表达式提取中文实现笔记
Jan 20 PHP
smarty内置函数capture用法分析
Jan 22 PHP
ThinkPHP实现递归无级分类――代码少
Jul 29 PHP
PHP MVC框架路由学习笔记
Mar 02 PHP
Yii2 批量插入、更新数据实例
Mar 15 PHP
thinkPHP5.0框架自动加载机制分析
Mar 18 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
Jun 09 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
Dec 20 #PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
Dec 19 #PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
Dec 19 #PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
Dec 19 #PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
Dec 19 #PHP
PHP程序中使用adodb连接不同数据库的代码实例
Dec 19 #PHP
php实现面包屑导航例子分享
Dec 19 #PHP
You might like
发布一个用PHP fsockopen写的HTTP下载的类
2007/02/22 PHP
php win下Socket方式发邮件类
2009/08/21 PHP
解析php中获取系统信息的方法
2013/06/25 PHP
详解php中 === 的使用
2016/10/24 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
php插入mysql数据返回id的方法
2018/05/31 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
html a标签-超链接中confirm方法使用介绍
2013/01/04 Javascript
关于JavaScript与HTML的交互事件
2013/04/12 Javascript
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
JQuery实现绚丽的横向下拉菜单
2013/12/19 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
2015/11/18 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
Js查找字符串中出现次数最多的字符及个数实例解析
2016/09/05 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
angular4+百分比进度显示插件用法示例
2019/05/05 Javascript
基于Fixed定位的框选功能的实现代码
2019/05/13 Javascript
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
Vue调用后端java接口的实例代码
2019/10/28 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
2019/11/01 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
2020/11/12 Javascript
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
深入讲解Python中面向对象编程的相关知识
2015/05/25 Python
Python读写Json涉及到中文的处理方法
2016/09/12 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
用CSS禁用输入法(CSS3 UI规范)实例解析
2012/12/04 HTML / CSS
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
儿子满月酒致辞
2015/07/29 职场文书
初中运动会闭幕词范本3篇
2019/12/09 职场文书
OpenCV-Python实现轮廓拟合
2021/06/08 Python