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类
Jul 15 PHP
收集的php编写大型网站问题集
Mar 06 PHP
使用php 获取时间今天明天昨天时间戳的详解
Jun 20 PHP
深入Nginx + PHP 缓存详解
Jul 11 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
Nov 28 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
Jun 21 PHP
php实现两表合并成新表并且有序排列的方法
Dec 05 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
Apr 01 PHP
非常经典的PHP文件上传类分享
May 15 PHP
php版微信公众平台之微信网页登陆授权示例
Sep 23 PHP
php生成word并下载代码实例
Mar 15 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
Oct 08 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 UTF-8、Unicode和BOM问题
2010/05/18 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
40款非常有用的 jQuery 插件推荐(系列一)
2011/12/21 Javascript
JavaScript在多浏览器下for循环的使用方法
2012/11/07 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
纯js模拟div层弹性运动的方法
2015/07/27 Javascript
AngularJS表达式讲解及示例代码
2016/08/16 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
微信小程序 页面传参实例详解
2016/11/16 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
2017/09/21 Javascript
Node之简单的前后端交互(实例讲解)
2017/11/14 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
node中的密码安全(加密)
2018/09/17 Javascript
小程序数据通信方法大全(推荐)
2019/04/15 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
详解vue 组件注册
2020/11/20 Vue.js
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
Python图算法实例分析
2016/08/13 Python
python学习之matplotlib绘制散点图实例
2017/12/09 Python
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
详解python 破解网站反爬虫的两种简单方法
2020/02/09 Python
Python网页解析器使用实例详解
2020/05/30 Python
用html5的canvas画布绘制贝塞尔曲线完整代码
2013/08/14 HTML / CSS
J2EE是技术还是平台还是框架
2016/08/14 面试题
专科毕业生求职简历的自我评价
2013/10/12 职场文书
打造完美自荐信
2014/01/24 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
pytorch中的 .view()函数的用法介绍
2022/03/17 Python