使用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 相关文章推荐
用ADODB来让PHP操作ACCESS数据库的方法
Dec 31 PHP
PHP 中英文混合排版中处理字符串常用的函数
Apr 12 PHP
PHP Stream_*系列函数
Aug 01 PHP
php文件上传表单摘自drupal的代码
Feb 15 PHP
php设计模式 Observer(观察者模式)
Jun 26 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
Jan 06 PHP
PHP加Nginx实现动态裁剪图片方案
Mar 10 PHP
PHP使用数组依次替换字符串中匹配项
Jan 08 PHP
使用php实现从身份证中提取生日
May 09 PHP
一个简单安全的PHP验证码类、PHP验证码
Sep 24 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
Oct 18 PHP
PHP与Web页面交互操作实例分析
Jun 02 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开发文件系统实例讲解
2006/10/09 PHP
PHP连接MongoDB示例代码
2012/09/06 PHP
深入phpMyAdmin的安装与配置的详细步骤
2013/05/07 PHP
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
laravel学习教程之关联模型
2016/07/30 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
setAttribute 与 class冲突解决
2008/02/17 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
jQuery级联操作绑定事件实例
2014/09/02 Javascript
Vue.js系列之项目结构说明(2)
2017/01/03 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
react native带索引的城市列表组件的实例代码
2017/08/08 Javascript
js使用generator函数同步执行ajax任务
2017/09/05 Javascript
JS实现方形抽奖效果
2018/08/27 Javascript
详解微信小程序中组件通讯
2018/10/30 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
[59:00]OG vs TNC 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python出现segfault错误解决方法
2016/04/16 Python
学习Python selenium自动化网页抓取器
2018/01/20 Python
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
python 多线程对post请求服务器测试并发的方法
2019/06/13 Python
使用Matplotlib 绘制精美的数学图形例子
2019/12/13 Python
牦牛毛户外探险服装:Kora
2019/02/08 全球购物
北大青鸟学生求职信
2013/09/24 职场文书
外贸公司实习自我鉴定
2013/09/24 职场文书
房地产端午节活动方案
2014/08/24 职场文书
法人授权委托书公证范本
2014/09/14 职场文书
医院2014国庆节活动策划方案
2014/09/21 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
2014乡党委副书记党建工作汇报材料
2014/11/02 职场文书
低端且暴利的线上线下创业项目分享
2019/09/03 职场文书
Python的这些库,你知道多少?
2021/06/09 Python