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 XML操作的各种方法解析(比较详细)
Jun 17 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
Jun 20 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
Apr 01 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
May 08 PHP
php生成zip文件类实例
Apr 07 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
Oct 08 PHP
2款PHP无限级分类实例代码
Nov 11 PHP
浅谈PHP值mysql操作类
Jun 29 PHP
Smarty日期时间操作方法示例
Nov 15 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
Dec 23 PHP
Centos7安装swoole扩展操作示例
Mar 26 PHP
如何利用PHP实现上传图片功能详解
Sep 24 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数组函数序列之array_splice() - 在数组任意位置插入元素
2011/11/07 PHP
解析关于wamp启动是80端口被占用的问题
2013/06/21 PHP
php页面防重复提交方法总结
2013/11/25 PHP
php检测url是否存在的方法
2015/04/14 PHP
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
显示、隐藏密码
2006/07/01 Javascript
ASP SQL防注入的方法
2008/12/25 Javascript
Prototype Template对象 学习
2009/07/19 Javascript
javascript 学习笔记(八)javascript对象
2011/04/12 Javascript
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
2013/08/07 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
JavaScript中for-in遍历方式示例介绍
2014/02/11 Javascript
js函数调用的方式
2014/05/06 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
js自定义瀑布流布局插件
2017/05/16 Javascript
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
angularJS自定义directive之带参方法传递详解
2018/10/09 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
[31:55]完美世界DOTA2联赛循环赛 IO vs GXR BO2第一场 11.04
2020/11/05 DOTA
python 从文件夹抽取图片另存的方法
2018/12/04 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
Python基于os.environ从windows获取环境变量
2020/06/09 Python
基于python实现音乐播放器代码实例
2020/07/01 Python
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
Oral-B荷兰:牙医最推荐的品牌
2020/02/25 全球购物
What is EJB
2016/07/22 面试题
机关单位人员学雷锋心得体会
2014/03/10 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
爱心募捐感谢信
2015/01/22 职场文书
顶岗实习协议书
2015/01/29 职场文书
食品卫生管理制度
2015/08/06 职场文书
JavaScript 去重和重复次数统计
2021/03/31 Javascript
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS