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 相关文章推荐
风格模板初级不完全修改教程
Oct 09 PHP
PHP生成便于打印的网页
Oct 09 PHP
PHP 中英文混合排版中处理字符串常用的函数
Apr 12 PHP
介绍php设计模式中的工厂模式
Jun 12 PHP
php中实现简单的ACL 完结篇
Sep 07 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
Jul 22 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
May 27 PHP
php中的登陆login实例代码
Jun 20 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
Dec 15 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
实现php删除链表中重复的结点
Sep 27 PHP
Laravel中GraphQL接口请求频率实战记录
Sep 01 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在线生成ico文件的代码
2007/10/09 PHP
数据库查询记录php 多行多列显示
2009/08/15 PHP
CI框架开发新浪微博登录接口源码完整版
2014/05/28 PHP
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
php实现以只读方式打开文件的方法
2015/03/16 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
用js重建星际争霸
2006/12/22 Javascript
学习YUI.Ext基础第一天
2007/03/10 Javascript
List the Codec Files on a Computer
2007/06/11 Javascript
js函数获取html中className所在的内容并去除标签
2013/09/08 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
2014/10/10 Javascript
jQuery使用height()获取高度需要注意的地方
2014/12/13 Javascript
Javascript字符串拼接小技巧(推荐)
2016/06/02 Javascript
jQuery获取浏览器类型和版本号的方法
2016/07/05 Javascript
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
Bootstrap Table使用方法详解
2016/08/01 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
Angular.js通过自定义指令directive实现滑块滑动效果
2017/10/13 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
python默认参数调用方法解析
2020/02/09 Python
详解python方法之绑定方法与非绑定方法
2020/08/17 Python
CSS3 实现发光边框特效
2020/11/11 HTML / CSS
伦敦哈德森鞋:Hudson Shoes
2018/02/06 全球购物
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
十佳青年个人事迹材料
2014/01/28 职场文书
创建文明城市标语
2014/06/16 职场文书
企业安全生产月活动总结
2014/07/05 职场文书
孔繁森观后感
2015/06/10 职场文书
《画家和牧童》教学反思
2016/02/17 职场文书
该怎么书写道歉信?
2019/07/03 职场文书
Node实现搜索框进行模糊查询
2021/06/28 Javascript
Python必备技巧之字符数据操作详解
2022/03/23 Python
springboot实现string转json json里面带数组
2022/06/16 Java/Android