使用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二分法在IP地址查询中的应用
Aug 12 PHP
php实现utf-8和GB2312编码相互转换函数代码
Feb 07 PHP
php curl的深入解析
Jun 02 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
Jun 13 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
Jun 25 PHP
PHP将字符分解为多个字符串的方法
Nov 22 PHP
PHP的Yii框架中过滤器相关的使用总结
Mar 29 PHP
php反射类ReflectionClass用法分析
May 12 PHP
PHP编写文件多服务器同步程序
Jul 02 PHP
PHP bin2hex()函数基础实例讲解
Feb 11 PHP
laravel框架实现去掉URL中index.php的方法
Oct 12 PHP
Laravel基础-关于引入公共文件的两种方式
Oct 18 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对MongoDB[NoSQL]数据库的操作
2013/03/01 PHP
LotusPhp笔记之:Logger组件的使用方法
2013/05/06 PHP
php限制文件下载速度的代码
2015/10/20 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
尝试在让script的type属性等于text/html
2013/01/15 Javascript
js substring从右边获取指定长度字符串(示例代码)
2013/12/23 Javascript
jquery 新建的元素事件绑定问题解决方案
2014/06/12 Javascript
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
js实现网页随机切换背景图片的方法
2014/11/01 Javascript
jQuery中:hidden选择器用法实例
2014/12/30 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
详解vue中使用微信jssdk
2019/04/19 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
JS+Canvas实现五子棋游戏
2020/08/26 Javascript
Vue实现随机验证码功能
2020/12/29 Vue.js
python类定义的讲解
2013/11/01 Python
详细介绍Python函数中的默认参数
2015/03/30 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
Python中的单继承与多继承实例分析
2018/05/10 Python
flask-restful使用总结
2018/12/04 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
详解Django 时间与时区设置问题
2019/07/23 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
eBay加拿大站:eBay.ca
2019/06/20 全球购物
美国主要的特色咖啡和茶公司:Peet’s Coffee
2020/02/14 全球购物
党支部书记先进事迹
2014/01/17 职场文书
大学生实习鉴定评语
2014/04/25 职场文书
宣传标语大全
2014/07/01 职场文书
军训新闻稿范文
2015/07/17 职场文书
python numpy中setdiff1d的用法说明
2021/04/22 Python
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS