使用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获取http请求的头信息实现步骤
Dec 16 PHP
php顺序查找和二分查找示例
Mar 27 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
Apr 15 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
Dec 28 PHP
利用PHP如何写APP接口详解
Aug 23 PHP
php字符串操作常见问题小结
Oct 11 PHP
AJAX的使用方法详解
Apr 29 PHP
浅谈PHP中new self()和new static()的区别
Aug 11 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
PHP实现的支付宝支付功能示例
Mar 26 PHP
PHP标准库 (SPL)――Countable用法示例
Jun 05 PHP
让你的PHP,APACHE,NGINX支持大文件上传
Mar 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文章按日期(月日)SQL归档语句
2012/11/29 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
2015/10/10 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
PHP设计模式之建造者模式定义与用法简单示例
2018/08/13 PHP
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
node.js中的buffer.toString方法使用说明
2014/12/14 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
2015/11/02 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
全面解析Vue中的$nextTick
2020/12/24 Vue.js
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
[06:16]DOTA2守卫传承者——职业选手谈心路历程
2015/02/26 DOTA
[01:07:11]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
Python下载网络文本数据到本地内存的四种实现方法示例
2018/02/05 Python
详解Python_shutil模块
2019/03/15 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
IntelliJ 中配置 Anaconda的过程图解
2020/06/01 Python
Python就将所有的英文单词首字母变成大写
2021/02/12 Python
CSS3感应鼠标的背景闪烁和图片缩放动画效果
2014/05/14 HTML / CSS
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
Coggles美国/加拿大:高级国际时装零售商
2018/10/23 全球购物
美国牙科折扣计划:DentalPlans.com
2019/08/26 全球购物
出生公证委托书
2014/04/03 职场文书
供货协议书范本
2014/04/22 职场文书
验房委托书
2014/08/30 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
工作失职检讨书范文
2015/05/05 职场文书
预备党员群众意见
2015/06/01 职场文书
小学一年级语文教学反思
2016/03/03 职场文书
Go标准容器之Ring的使用说明
2021/05/05 Golang
Python中可变和不可变对象的深入讲解
2021/08/02 Python
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL