PHP的FTP学习(一)


Posted in PHP onOctober 09, 2006

By Vikram Vaswani
Melonfire
November 07, 2000
   我们是一群PHP的忠实FANS,我们因各种不同的原因使用它-WEB站点的开发,画图,数据库的联接等 -我们发现,它非常的友好,强大而且易于使用……  
你可能已经看到PHP是怎样被用于创建GIF和JPEG图像,从数据库中动态的获取信息等等,但这只是冰山的一角---最新版本的PHP拥有着强大的文件传输功能。
在这篇教程里,我将向你展示FTP怎样通过HTTP和FTP联接来传输文件,同时也会有一些简单的程序代码,跟我来吧!

首先,你应该知道PHP是通过HTTP和FTP联接来传输文件的。通过HTTP上传文件早在PHP3中就已经出现,现在,新的FTP函数已经在新的PHP版本中出现了!
开始之前,你需要确信你的PHP支持FTP,你可以通过以下代码查知:

--------------------------------------------------------------------------------
<?

phpinfo();

?>
--------------------------------------------------------------------------------
检查输出结果,有一“Additional Modules”区,这里列示了你的PHP支持的模块;如果你没发现FTP模块,你最好重新安装PHP,并添加FTP支持!

先让我们来看看一个典型的FTP任务是怎样完成的吧!
--------------------------------------------------------------------------------
$ ftp ftp.server.com
Connected to ftp.server.com
220 server.com FTP server ready.
Name (server:john): john
331 Password required for john.
Password:
230 User john logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
drwxr-xr-x  5 john   users        3072 Nov  2 11:03 .
drwxr-xr-x  88 root     root         2048 Nov  1 23:26 ..
drwxr--r--   2 john   users        1024 Oct  5 13:26 bin
drwx--x--x   8 john   users        1024 Nov  2 10:59 public_html
drwxr--r--   4 john   users        1024 Nov  2 11:26 tmp
-rw-r--r--   1 john   users     2941465 Oct  9 17:21 data.zip
226 Transfer complete.
ftp> bin
200 Type set to I.
ftp> get data.zip
local: data.zip remote: data.zip
200 PORT command successful.
150 Opening BINARY mode data connection for data.zip(2941465 bytes).
226 Transfer complete.
ftp> bye
221 Goodbye.
--------------------------------------------------------------------------------
你可以看到,进程明显被分为几段:联接(与FTP服务器建立联接)、验证(确定用户是否有权力进入系统)、传输(这里包括列目录,上传或下载文件)、取消联接。

使用PHP来FTP的步骤
建立一个PHP的FTP联接必须遵守以下基本步骤:打开一个联接 - 发出认证信息 - 使用PHP函数操纵目录和传输文件。
以下具体实现:
--------------------------------------------------------------------------------
<?

// 联接FTP服务器
$conn = ftp_connect("ftp.server.com");

// 使用username和password登录
ftp_login($conn, "john", "doe");

// 获取远端系统类型
ftp_systype($conn);

// 列示文件
$filelist = ftp_nlist($conn, ".");

// 下载文件
ftp_get($conn, "data.zip", "data.zip", FTP_BINARY);

// 关闭联接
ftp_quit($conn);

?>
--------------------------------------------------------------------------------
让我们一步步的来:
为了初结化一个FTP联接,PHP提供了ftp_connect()这个函数,它使用主机名称和端口作为参数。在上面的例子里,主机名字为“ftp.server.com”;如果端口没指定,PHP将会使用“21”作为缺省端口来建立联接。
联接成功后ftp_connect()传回一个handle句柄;这个handle将被以后使用的FTP函数使用。
--------------------------------------------------------------------------------
<?

// connect to FTP server
$conn = ftp_connect("ftp.server.com");

?>
--------------------------------------------------------------------------------
一旦建立联接,使用ftp_login()发送一个用户名称和用户密码。你可以看到,这个函数ftp_login()使用了ftp_connect()函数传来的handle,以确定用户名和密码能被提交到正确的服务器。
--------------------------------------------------------------------------------
<?

// log in with username and password
ftp_login($conn, "john", "doe");

?>
--------------------------------------------------------------------------------
这时,你就能够做你想做的事情了,具体在下一部分讲:

做完你想做的事后,千万要记住使用ftp_quit()函数关闭你的FTP联接

--------------------------------------------------------------------------------
<?

// close connection
ftp_quit($conn);

?>

PHP 相关文章推荐
杏林同学录(七)
Oct 09 PHP
一段php加密解密的代码
Jul 16 PHP
PHP file_get_contents 函数超时的几种解决方法
Jul 30 PHP
PHP 全角转半角实现代码
May 16 PHP
zf框架的registry(注册表)使用示例
Mar 13 PHP
摘自织梦CMS中的图片处理类
Aug 08 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
Apr 11 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
Mar 16 PHP
MAC下通过改apache配置文件切换php多版本的方法
Apr 26 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
php实现表单提交上传文件功能
May 28 PHP
laravel excel 上传文件保存到本地服务器功能
Nov 14 PHP
PHP VS ASP
Oct 09 #PHP
用PHP来写记数器(详细介绍)
Oct 09 #PHP
杏林同学录(三)
Oct 09 #PHP
福利彩票幸运号码自动生成器
Oct 09 #PHP
一个用php3编写的简单计数器
Oct 09 #PHP
php4的session功能评述(三)
Oct 09 #PHP
php4的session功能评述(一)
Oct 09 #PHP
You might like
PHP 缓存实现代码及详细注释
2010/05/16 PHP
PHP中的session安全吗?
2016/01/22 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
2019/10/09 PHP
javascript json2 使用方法
2010/03/16 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
2015/12/04 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
Bootstrap显示与隐藏简单实现代码
2017/03/06 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
10分钟上手vue-cli 3.0 入门介绍
2018/04/04 Javascript
layui switch 开关监听 弹出确定状态转换的例子
2019/09/21 Javascript
JavaScript随机数的组合问题案例分析
2020/05/16 Javascript
js+canvas实现五子棋小游戏
2020/08/02 Javascript
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
对Python中内置异常层次结构详解
2018/10/18 Python
解决python中 f.write写入中文出错的问题
2018/10/31 Python
Python Pywavelet 小波阈值实例
2019/01/09 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
瑞典最好的运动鞋专卖店:Sneakersnstuff
2016/08/29 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
优秀辅导员事迹材料
2014/02/16 职场文书
购房协议书范本
2014/10/02 职场文书
ROS系统将python包编译为可执行文件的简单步骤
2021/07/25 Python
python+pyhyper实现识别图片中的车牌号思路详解
2022/12/24 Python