使用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作的文本留言本的例子(六)
Oct 09 PHP
PHP常用代码
Nov 23 PHP
ADODB类使用
Nov 25 PHP
将一维或多维的数组连接成一个字符串的php代码
Aug 08 PHP
PHP MySQL应用中使用XOR运算加密算法分享
Aug 28 PHP
PHP 转义使用详解
Jul 15 PHP
PHP如何将log信息写入服务器中的log文件
Jul 29 PHP
php 截取utf-8格式的字符串实例代码
Oct 30 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
Dec 09 PHP
PHP convert_cyr_string()函数讲解
Feb 13 PHP
php+ajax实现文件切割上传功能示例
Mar 03 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应用程序来获取Web服务器的状态信息
2006/10/09 PHP
PHP has encountered an Access Violation
2007/01/15 PHP
php5 pdo新改动加载注意事项
2008/09/11 PHP
php循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
2016/03/18 PHP
屏蔽PHP默认设置中的Notice警告的方法
2016/05/20 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
PHP实现简易图形计算器
2020/08/28 PHP
一个对于js this关键字的问题
2007/01/09 Javascript
工作中常用到的JS表单验证代码(包括例子)
2010/11/11 Javascript
JavaScript 更严格的相等 [译]
2012/09/20 Javascript
图片动画横条广告带上下滚动的JS代码
2013/10/25 Javascript
jquery+json实现数据列表分页示例代码
2013/11/15 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
JS在if中的强制类型转换方式
2018/07/15 Javascript
[04:19]DOTA2亚洲邀请赛 现场花絮
2015/03/11 DOTA
浅谈pycharm的xmx和xms设置方法
2018/12/03 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
python类中super() 的使用解析
2019/12/19 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
过滤器的用法
2013/10/08 面试题
怎样写好自我鉴定
2013/12/04 职场文书
中学家长会邀请函
2014/02/03 职场文书
预备党员政审材料
2014/02/04 职场文书
2014年公务员思想汇报范文:全心全意为人民服务
2014/03/06 职场文书
大学生活动总结怎么写
2014/04/29 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL
MySQL学习必备条件查询数据
2022/03/25 MySQL
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL
apache虚拟主机配置的三种方式(小结)
2022/07/23 Servers