使用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代码DOS造成用光网络带宽
Mar 01 PHP
PHP时间格式控制符对照表分享
Jul 23 PHP
PHP反射使用实例和PHP反射API的中文说明
Jul 02 PHP
php画图实例
Nov 05 PHP
学习php设计模式 php实现适配器模式
Dec 07 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
Jun 20 PHP
微信公众号开发之文本消息自动回复php代码
Aug 08 PHP
PHP7常量数组用法分析
Sep 26 PHP
PHP读MYSQL中文乱码的快速解决方法
Oct 01 PHP
thinkPHP数据库增删改查操作方法实例详解
Dec 06 PHP
ecshop添加菜单及权限分配问题
Nov 21 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 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.MVC的模板标签系统(一)
2006/09/05 PHP
第十节--抽象方法和抽象类
2006/11/16 PHP
Linux系统下使用XHProf和XHGui分析PHP运行性能
2015/12/08 PHP
THINKPHP在添加数据的时候获取主键id的值方法
2017/04/03 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
基于JQuery实现相同内容合并单元格的代码
2011/01/12 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
获取鼠标在div中的相对位置的实现代码
2013/12/30 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
详解AngularJS中的表格使用
2015/06/16 Javascript
浅析jquery unbind()方法移除元素绑定的事件
2016/05/24 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
详谈JS中数组的迭代方法和归并方法
2017/08/11 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
nodejs简单访问及操作mysql数据库的方法示例
2018/03/15 NodeJs
模块化react-router配置方法详解
2019/06/03 Javascript
基于python批量处理dat文件及科学计算方法详解
2018/05/08 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
2018/10/14 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
学生信息管理系统Python面向对象版
2019/01/30 Python
通过pycharm使用git的步骤(图文详解)
2019/06/13 Python
python写日志文件操作类与应用示例
2019/07/01 Python
Application Cache未缓存文件无法访问无法加载问题
2014/05/31 HTML / CSS
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
测控技术自荐信
2014/06/05 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
小孩不笨观后感
2015/06/03 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书