php使用ftp实现文件上传与下载功能


Posted in PHP onJuly 21, 2017

本文实例为大家分享了php ftp文件上传与下载的具体代码,供大家参考,具体内容如下

ftp文件上传

php自带有ftp操作的函数包,一个比较简单实现的ftp文件上传操作可以通过以下几个步骤来完成:

1、确认ftp server的ip地址与port端口信息(如果使用的是默认端口则可以不关心);
2、进行ftp_connect操作,连接到ftp server(需要注意一下是否设置了port参数);
3、进行ftp_login操作,使用ftp用户名和密码进行登录;
4、这里开始区分,如果只需要把文件上传上去,没有其它要求的话,那在这里就可以进行文件上传的ftp_put操作了;如果对上传文件有按照目录存放的需求,那就继续向下进行;
5、使用ftp_nlist获取到给定的ftp目录下的目录与文件名称,检查一下需要的目录是否存在,若不存在则需要进行ftp_mkdir创建目录;
6、 切换到目标目录中ftp_chdir;
7、进行ftp_put操作上传文件;
8、进行ftp_close关闭ftp连接。

以在ftp中按照日期格式目录来进行上传文件的需求,做一个简单的代码实现:

<?php
$host = '10.0.0.42';
$user = 'uftp';
$pwd = 'uftp';

// 进行ftp连接,根据port是否设置,传递的参数会不同
if(empty($port)){
    $f_conn = ftp_connect($host);
}else{
    $f_conn = ftp_connect($host, $port);
}
if(!$f_conn){
    echo "connect fail\n";
    exit(1);
}
echo "connect success\n";

// 进行ftp登录,使用给定的ftp登录用户名和密码进行login
$f_login = ftp_login($f_conn,$user,$pwd);
if(!$f_login){
    echo "login fail\n";
    exit(1);
}
echo "login success\n";

// 获取当前所在的ftp目录
$in_dir = ftp_pwd($f_conn);
if(!$in_dir){
    echo "get dir info fail\n";
    exit(1);
}
echo "$in_dir\n";

// 获取当前所在ftp目录下包含的目录与文件
$exist_dir = ftp_nlist($f_conn, ftp_pwd($f_conn));
print_r($exist_dir);

// 要求是按照日期在ftp目录下创建文件夹作为文件上传存放目录
echo date("Ymd")."\n";
$dir_name = date("Ymd");
// 检查ftp目录下是否已存在当前日期的文件夹,如不存在则进行创建
if(!in_array("$in_dir/$dir_name", $exist_dir)){
    if(!ftp_mkdir($f_conn, $dir_name)){
        echo "mkdir fail\n";
        exit(1);
    }else{
        echo "mkdir $dir_name success\n";
    }
}
// 切换目录
if(!ftp_chdir($f_conn, $dir_name)){
    echo "chdir fail\n";
    exit(1);
}else{
    echo "chdir $dir_name success\n";
}
// 进行文件上传
$result = ftp_put($f_conn, 'bbb.mp3', '/root/liang/ftp/bbb.mp3', FTP_BINARY);
if(!$result){
    echo "upload file fail\n";
    exit(1);
}else{
    echo "upload file success\n";
    exit(0);
}

打印:

root@webdevelop232:~/liang/ftp# php ftp.php 
connect success
login success
/home/uftp
Array
(
  [0] => /home/uftp/Kalimba.mp3
  [1] => /home/uftp/test.txt
)
20170721
mkdir 20170721 success
chdir 20170721 success
upload file success

可以看到打印的操作成功了,这时候去ftp server的目录下,就能够看到上传的文件了。

ftp文件下载

相对于文件上传来讲,使用php来进行ftp文件下载的实在是不多见,但既然有这个功能,就说明总可能会有人使用,所以也做一个简单的示例。

就以上面上传的bbb.mp3文件为下载目标来进行操作,把它下载到当前目录,命名为1.mp3:

<?php
$host = '10.0.0.42';
$uname = 'uftp';
$upwd = 'uftp';

// 进行ftp连接
if(empty($port)){
  $f_conn = ftp_connect($host);
}else{
  $f_conn = ftp_connect($host, $port);
}
if(!$f_conn){
  echo "ftp connect fail\n";
  exit(1);
}
// 进行ftp登录
if(!ftp_login($f_conn, $uname, $upwd)){
  echo "ftp login fail\n";
  exit(1);
}
// 进行ftp下载
if(!ftp_get($f_conn, './1.mp3', ftp_pwd($f_conn).'/'.date('Ymd').'/bbb.mp3', FTP_BINARY)){
  echo "ftp download fail\n";
  exit(1);
}else{
  echo "ftp download success\n";
  exit(0);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
基于mysql的论坛(1)
Oct 09 PHP
php 获取当前访问的url文件名的方法小结
Feb 08 PHP
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
Jul 14 PHP
开启PHP Static 关键字之旅模式
Nov 13 PHP
PHP简单实现生成txt文件到指定目录的方法
Apr 25 PHP
php数据访问之增删改查操作
May 09 PHP
PHP 数组基本操作小结(推荐)
Jun 13 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
Aug 29 PHP
PHP对象实例化单例方法
Jan 19 PHP
php文件上传类的分享
Jul 06 PHP
PHP连续签到功能实现方法详解
Dec 04 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
May 12 PHP
YII2框架中excel表格导出的方法详解
Jul 21 #PHP
实例讲解YII2中多表关联的使用方法
Jul 21 #PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
Jul 21 #PHP
php实现基于pdo的事务处理方法示例
Jul 21 #PHP
php基于自定义函数记录log日志方法
Jul 21 #PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 #PHP
PHP实现的redis主从数据库状态检测功能示例
Jul 20 #PHP
You might like
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
一周让你学会PHP 不错的学习资料
2009/02/06 PHP
PHP 文件缓存的性能测试
2010/04/25 PHP
php生成带logo二维码方法小结
2016/04/08 PHP
使用php实现网站验证码功能【推荐】
2017/02/09 PHP
PHP实现的敏感词过滤方法示例
2019/03/06 PHP
jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
2013/06/04 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
2016/03/18 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
解决vue路由后界面没有变化,但是链接有的问题
2018/09/01 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
2020/12/24 Javascript
在Python中处理XML的教程
2015/04/29 Python
Python+OpenCV人脸检测原理及示例详解
2020/10/19 Python
pywinauto自动化操作记事本
2019/08/26 Python
查看端口并杀进程python脚本代码
2019/12/17 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
利用CSS3实现进度条的两种姿势详解
2017/03/21 HTML / CSS
深入剖析HTML5 内联框架iFrame
2016/05/04 HTML / CSS
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
美国肌肉和力量商店:Muscle & Strength
2019/06/22 全球购物
法国最大的在线眼镜店:EasyLunettes
2019/08/26 全球购物
给领导的检讨书
2014/02/16 职场文书
促销活动总结范文
2014/04/30 职场文书
小学优秀教育工作者事迹材料
2014/05/09 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
餐厅感恩节活动策划方案
2014/10/11 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android