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 相关文章推荐
3.从实例开始
Oct 09 PHP
php json转换成数组形式代码分享
Nov 10 PHP
php缓冲输出实例分析
Jan 05 PHP
symfony表单与页面实现技巧
Jan 26 PHP
PHP遍历数组的方法汇总
Apr 30 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
Mar 14 PHP
Redis在Laravel项目中的应用实例详解
Aug 11 PHP
php之可变变量的实例详解
Sep 12 PHP
Yii框架getter与setter方法功能与用法分析
Oct 22 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
Apr 14 PHP
Thinkphp集成抖音SDK的实现方法
Apr 28 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 checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
php时区转换转换函数
2014/01/07 PHP
一个js写的日历(代码部分网摘)
2009/09/20 Javascript
原生javascript获取元素样式属性值的方法
2010/12/25 Javascript
使用Math.floor与Math.random取随机整数的方法详解
2013/05/07 Javascript
如何用JavaScript定义一个类
2014/09/12 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
jquery实现文本框textarea自适应高度
2016/03/09 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
详解Javascript百度地图接口开发文档中的类和方法
2017/02/07 Javascript
jQuery Chosen通用初始化
2017/03/07 Javascript
详解Node.js串行化流程控制
2017/05/04 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
初学者AngularJS的环境搭建过程
2017/10/27 Javascript
React中的refs的使用教程
2018/02/13 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
VueJs组件之父子通讯的方式
2018/05/06 Javascript
详解Webpack多环境代码打包的方法
2018/08/03 Javascript
JS实现可针对算术表达式求值的计算器功能示例
2018/09/04 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
用实例分析Python中method的参数传递过程
2015/04/02 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
PyTorch-GPU加速实例
2020/06/23 Python
Django中Q查询及Q()对象 F查询及F()对象用法
2020/07/09 Python
python修改微信和支付宝步数的示例代码
2020/10/12 Python
CSS3实现网站商品展示效果图
2020/01/18 HTML / CSS
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
电子商务专业实习生自我鉴定
2013/09/24 职场文书
自行车广告词大全
2014/03/21 职场文书
管理人员岗位职责
2015/02/14 职场文书
2016年全国爱牙日宣传活动总结
2016/04/05 职场文书