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 中的面向对象编程:通向大型 PHP 工程的办法
Dec 03 PHP
php购物网站支付paypal使用方法
Nov 28 PHP
PHP读取数据库并按照中文名称进行排序实现代码
Jan 29 PHP
PHP图片上传代码
Nov 04 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
Feb 24 PHP
php表单提交与$_POST实例分析
Jan 26 PHP
php实现将字符串按照指定距离进行分割的方法
Mar 14 PHP
php中关于socket的系列函数总结
May 18 PHP
PHP响应post请求上传文件的方法
Dec 17 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
微信公众号之主动给用户发送消息功能
Jun 22 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
Oct 16 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中使用key,value,current,next和prev函数遍历数组的方法
2015/03/17 PHP
分享十款最出色的PHP安全开发库中文详细介绍
2015/03/22 PHP
PHP处理会话函数大总结
2015/08/05 PHP
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
html文本框提示效果的示例代码
2014/06/28 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
JavaScript实现的简单幂函数实例
2015/04/17 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
详解在Vue中通过自定义指令获取dom元素
2017/03/04 Javascript
jQuery设计思想
2017/03/07 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
JS实现手写 forEach算法示例
2020/04/29 Javascript
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
[49:08]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python使用random和tertools模块解一些经典概率问题
2015/01/28 Python
Python多进程机制实例详解
2015/07/02 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
Python基于opencv的图像压缩算法实例分析
2018/05/03 Python
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
用 Django 开发一个 Python Web API的方法步骤
2020/12/03 Python
澳大利亚最大的百货公司:Myer
2018/12/21 全球购物
幼儿园园长岗位职责
2013/11/26 职场文书
冰淇淋开店创业计划书
2014/02/01 职场文书
高一学生期末评语
2014/04/25 职场文书
清正廉洁演讲稿
2014/05/22 职场文书
2015年幼儿园教研活动总结
2015/03/25 职场文书
2015年公司行政后勤工作总结
2015/05/20 职场文书
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技
Vue ECharts实现机舱座位选择展示功能
2022/05/15 Vue.js