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与ASP
Oct 09 PHP
基于OpenCV的PHP图像人脸识别技术
Oct 11 PHP
php 面向对象的一个例子
Apr 12 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
Jun 07 PHP
PHP与javascript实现变量交互的示例代码
Jul 23 PHP
php使用Imagick生成图片的方法
Jul 31 PHP
基于php实现随机合并数组并排序(原排序)
Nov 26 PHP
给WordPress中的留言加上楼层号的PHP代码实例
Dec 14 PHP
php学习笔记之mb_strstr的基本使用
Feb 03 PHP
PHPUnit + Laravel单元测试常用技能
Nov 06 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 PHP
通过实例解析PHP数据类型转换方法
Jul 11 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
php curl 获取https请求的2种方法
2015/04/27 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
2017/08/11 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
动态刷新 dorado树的js代码
2009/06/12 Javascript
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
新老版本juqery获取radio对象的方法
2010/03/01 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
2013/01/10 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
js鼠标滑过图片震动特效的方法
2015/02/17 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
2015/04/06 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
2016/07/09 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
2016/07/24 Javascript
React中ES5与ES6写法的区别总结
2017/04/21 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
2018/02/09 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
vue el-tree 默认展开第一个节点的实现代码
2020/05/15 Javascript
Python的Flask框架中实现简单的登录功能的教程
2015/04/20 Python
HTML中使用python屏蔽一些基本功能的方法
2017/07/07 Python
详解Python中如何写控制台进度条的整理
2018/03/07 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
对Python之gzip文件读写的方法详解
2019/02/08 Python
Python发展简史 Python来历
2019/05/14 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
Python 实现使用空值进行赋值 None
2020/03/12 Python
Pygame的程序开始示例代码
2020/05/07 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
2020/05/12 Python
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
家乐福台湾线上购物网:Carrefour台湾
2020/09/15 全球购物
写一个用矩形法求定积分的通用函数
2012/11/08 面试题
Ruby如何定义一个类
2012/10/08 面试题
制药工程专业职业生涯规划范文
2014/03/10 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书
社区宣传标语口号
2015/12/26 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python