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开发文件系统实例讲解
Oct 09 PHP
PHP实现分页的一个示例
Oct 09 PHP
相对路径转化成绝对路径
Apr 10 PHP
PHP中操作ini配置文件的方法
Apr 25 PHP
php实现利用phpexcel导出数据
Aug 24 PHP
PHP随机生成随机个数的字母组合示例
Jan 14 PHP
兼容ie6浏览器的php下载文件代码分享
Jul 14 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
Sep 16 PHP
基于PHP生成简单的验证码
Jun 01 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
May 20 PHP
解决Laravel 不能创建 migration 的问题
Oct 09 PHP
laravel框架实现敏感词汇过滤功能示例
Feb 15 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中的闭包和匿名函数
2017/12/25 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
javascript将数组插入到另一个数组中的代码
2013/01/10 Javascript
php跨域调用json的例子
2013/11/13 Javascript
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
javascript实现复选框超过限制即弹出警告框的方法
2015/02/25 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
Javascript的console['']常用输入方法汇总
2018/04/26 Javascript
vue 取出v-for循环中的index值实例
2019/11/09 Javascript
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
[35:27]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第二场 10.29
2020/10/29 DOTA
Python随机生成信用卡卡号的实现方法
2015/05/14 Python
python中__slots__用法实例
2015/06/04 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
利用Python模拟登录pastebin.com的实现方法
2019/07/12 Python
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
css3弹性盒子flex实现三栏布局的实现
2020/11/12 HTML / CSS
html5教程调用绘图api画简单的圆形代码分享
2013/12/04 HTML / CSS
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
中国双语服务优势的在线购票及活动平台:247tickets
2018/10/26 全球购物
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
《庐山的云雾》教学反思
2014/04/22 职场文书
环保标语口号
2014/06/13 职场文书
心得体会该怎么写呢?
2019/06/27 职场文书