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脚本中include文件出错解决方法
Nov 20 PHP
PHP 网页过期时间的控制代码
Jun 29 PHP
php文章内容分页并生成相应的htm静态页面代码
Jun 07 PHP
mac下使用brew配置环境的步骤分享
May 23 PHP
如何用C语言编写PHP扩展的详解
Jun 13 PHP
php函数实现判断是否移动端访问
Mar 03 PHP
php将字符串随机分割成不同长度数组的方法
Jun 01 PHP
php实现XSS安全过滤的方法
Jul 29 PHP
PHP如何通过AJAX方式实现登录功能
Nov 23 PHP
学习php设计模式 php实现桥梁模式(bridge)
Dec 07 PHP
学习PHP session的传递方式
Jun 15 PHP
php接口实现拖拽排序功能
Apr 23 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使用range协议实现输出文件断点续传代码实例
2014/07/04 PHP
wamp安装后自定义配置的方法
2014/08/23 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
详解jquery uploadify 上传文件
2013/11/09 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
JS回调函数的应用简单实例
2014/09/17 Javascript
基于replaceChild制作简单的吞噬特效
2015/09/21 Javascript
js实现四舍五入完全保留两位小数的方法
2016/08/02 Javascript
Angular页面间切换及传值的4种方法
2016/11/04 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
2016/12/12 Javascript
深入理解JavaScript中的尾调用(Tail Call)
2017/02/07 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
详解webpack介绍&amp;安装&amp;常用命令
2017/06/29 Javascript
jQuery 动画与停止动画效果实例详解
2020/05/19 jQuery
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
简单谈谈Python中函数的可变参数
2016/09/02 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
python主线程捕获子线程的方法
2018/06/17 Python
python 除法保留两位小数点的方法
2018/07/16 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
Django uwsgi Nginx 的生产环境部署详解
2019/02/02 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
如何从csv文件构建Tensorflow的数据集
2020/09/21 Python
简述Html5 IphoneX 适配方法
2018/02/08 HTML / CSS
俄罗斯最大的灯具网站:Fandeco
2020/03/14 全球购物
致铅球运动员加油稿
2014/02/13 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
2015年中学校长工作总结
2015/05/19 职场文书
与死神共舞观后感
2015/06/15 职场文书
默认网关不可用修复后过一会又不好使了解决方法
2022/04/08 数码科技
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python