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实现密保卡功能实现代码&amp;lt;打包下载直接运行&amp;gt;
Oct 09 PHP
简单介绍win7下搭建apache+php+mysql开发环境
Aug 06 PHP
学习php设计模式 php实现访问者模式(Visitor)
Dec 07 PHP
Yii中实现处理前后台登录的新方法
Dec 28 PHP
PHP树-不需要递归的实现方法
Jun 21 PHP
php投票系统之增加与删除投票(管理员篇)
Jul 01 PHP
Yii 2中的load()和save()示例详解
Aug 03 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
May 21 PHP
PHP的JSON封装、转变及输出操作示例
Sep 27 PHP
php多进程中的阻塞与非阻塞操作实例分析
Mar 04 PHP
thinkphp5.1 框架钩子和行为用法实例分析
May 25 PHP
PHP实现rar解压读取扩展包小结
Jun 03 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
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
php中时间函数date及常用的时间计算
2017/05/12 PHP
php实现mysql连接池效果实现代码
2018/01/25 PHP
javascript 函数使用说明
2010/04/07 Javascript
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
jquery怎样实现ajax联动框(一)
2013/03/08 Javascript
验证手机号码的JS方法分享
2013/09/10 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
js实现索引图片切换效果
2015/11/21 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
javascript html5实现表单验证
2016/03/01 Javascript
js实现获取鼠标当前的位置
2016/12/14 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
2017/08/31 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
2017/09/01 jQuery
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
Vue SPA单页应用首屏优化实践
2018/06/28 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
vue draggable resizable gorkys与v-chart使用与总结
2019/09/05 Javascript
解决ant Design中Select设置initialValue时的大坑
2020/10/29 Javascript
vue二选一tab栏切换新做法实现
2021/01/19 Vue.js
python脚本监控Tomcat服务器的方法
2018/07/06 Python
人工神经网络算法知识点总结
2019/06/11 Python
python实现的Iou与Giou代码
2020/01/18 Python
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
自我介绍演讲稿
2014/01/15 职场文书
银行内勤岗位职责
2014/04/09 职场文书
护理专业毕业生自荐书
2014/05/24 职场文书
八荣八耻的活动方案
2014/08/16 职场文书
工程安全生产协议书
2014/11/21 职场文书
2015小学教育教学工作总结
2015/07/21 职场文书
2015年三好一满意工作总结
2015/07/24 职场文书
Python实现Hash算法
2022/03/18 Python