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 相关文章推荐
模拟xcopy的函数
Oct 09 PHP
php adodb操作mysql数据库
Mar 19 PHP
php空间不支持socket但支持curl时recaptcha的用法
Nov 07 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
May 06 PHP
PHP递归复制、移动目录的自定义函数分享
Nov 18 PHP
php关联数组快速排序的方法
Apr 17 PHP
PHP传参之传值与传址的区别
Apr 24 PHP
PHP时间和日期函数详解
May 08 PHP
Thinkphp无限级分类代码
Nov 11 PHP
php实现在线通讯录功能(附源码)
May 13 PHP
PHP实现的DES加密解密封装类完整实例
Apr 29 PHP
在laravel中实现事务回滚的方法
Oct 10 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
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
详解PHP中的状态模式编程
2015/08/11 PHP
php打包网站并在线压缩为zip
2016/02/13 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
2019/05/13 PHP
js 日期比较相关天数代码
2014/04/02 Javascript
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
向JavaScript的数组中添加元素的方法小结
2015/10/24 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
使用SVG基本操作API的实例讲解
2017/09/14 Javascript
vue实现页面加载动画效果
2017/09/19 Javascript
你应该知道的几类npm依赖包管理详解
2017/10/06 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
2018/06/14 jQuery
js如何实现元素曝光上报
2019/08/07 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
解决echarts数据二次渲染不成功的问题
2020/07/20 Javascript
python实现逆波兰计算表达式实例详解
2015/05/06 Python
解决Python 使用h5py加载文件,看不到keys()的问题
2019/02/08 Python
详解Python3 pickle模块用法
2019/09/16 Python
Django REST框架创建一个简单的Api实例讲解
2019/11/05 Python
PYQT5 vscode联合操作qtdesigner的方法
2020/03/24 Python
django自带的权限管理Permission用法说明
2020/05/13 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
会计系个人求职信范文分享
2013/12/20 职场文书
法律专业应届生自荐信范文
2014/01/06 职场文书
粗加工管理制度
2014/02/04 职场文书
建筑工地质量标语
2014/06/12 职场文书
2015年度物流工作总结
2015/04/30 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书
2019新员工心得体会
2019/06/25 职场文书
六年级上册《闻官军收河南河北》的教学设计
2019/11/15 职场文书
pytorch实现ResNet结构的实例代码
2021/05/17 Python
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python