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 相关文章推荐
PHP CURL模拟GET及POST函数代码
Apr 25 PHP
Windows7下PHP开发环境安装配置图文方法
May 20 PHP
使用迭代器 遍历文件信息的详解
Jun 08 PHP
smarty内置函数foreach用法实例
Jan 22 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
May 12 PHP
php实现的http请求封装示例
Nov 08 PHP
PHP精确计算功能示例
Nov 29 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
Nov 13 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 PHP
Yii1.1框架实现PHP极光推送消息通知功能
Sep 06 PHP
Laravel5框架自定义错误页面配置操作示例
Apr 17 PHP
PHP论坛实现积分系统的思路代码详解
Jun 01 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
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
PHP入门教程之上传文件实例详解
2016/09/11 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
网易JS面试题与Javascript词法作用域说明
2010/11/09 Javascript
JavaScript栏目列表隐藏/显示简单实现
2013/04/03 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
jQuery中hover方法和toggle方法使用指南
2015/02/27 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
JQuery和PHP结合实现动态进度条上传显示
2016/11/23 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
2017/01/23 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
关于vue-resource报错450的解决方案
2017/07/24 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
利用Node.js检测端口是否被占用的方法
2017/12/07 Javascript
ES6 Generator基本使用方法示例
2020/06/06 Javascript
vue等两个接口都返回结果再执行下一步的实例
2020/09/08 Javascript
[01:00:12]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第一场
2018/04/09 DOTA
Eclipse + Python 的安装与配置流程
2013/03/05 Python
浅析Python中将单词首字母大写的capitalize()方法
2015/05/18 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
2017/04/27 Python
Python 私有函数的实例详解
2017/09/11 Python
详解python中asyncio模块
2018/03/03 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
优衣库英国官网:UNIQLO英国
2016/12/25 全球购物
大学生专科学习生活的自我评价
2013/12/07 职场文书
社区端午节活动方案
2014/01/28 职场文书
幼儿园门卫制度
2014/01/29 职场文书
经营目标管理责任书
2014/07/25 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
汽车转让协议书
2015/01/29 职场文书
求职导师推荐信范文
2015/03/27 职场文书