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 相关文章推荐
windows xp下安装pear
Dec 02 PHP
PHP 各种排序算法实现代码
Aug 20 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
Jan 10 PHP
php中如何防止表单的重复提交
Aug 02 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
Jun 12 PHP
分享一个Laravel好用的Cache宏
Mar 02 PHP
Php-Redis安装测试笔记
Mar 05 PHP
php中的异常和错误浅析
May 03 PHP
PHP实现的MD5结合RSA签名算法实例
Oct 07 PHP
实例讲解php实现多线程
Jan 27 PHP
php无限极分类实现方法分析
Jul 04 PHP
php面向对象重点知识分享
Sep 27 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
discuz 首页四格:最新话题+最新回复+热门话题+精华文章插件
2007/08/19 PHP
解决php表单重复提交实现方法
2015/09/29 PHP
HTML页面如何象ASP一样接受参数
2007/02/07 Javascript
jquery 必填项判断表单是否为空的方法
2008/09/14 Javascript
Javascript 网页黑白效果实现代码(兼容IE/FF等)
2010/04/23 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
JavaScript中json对象和string对象之间相互转化
2012/12/26 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
wap图片滚动特效无css3元素纯js脚本编写
2014/08/22 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
JavaScript制作简单的框选图表
2017/05/15 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
浅谈React前后端同构防止重复渲染
2018/01/05 Javascript
JS中常用的消息框总结
2018/02/24 Javascript
js传递数组参数到后台controller的方法
2018/03/29 Javascript
记一次用vue做的活动页的方法步骤
2019/04/11 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
微信小程序单选框自定义赋值
2020/05/26 Javascript
python cookielib 登录人人网的实现代码
2012/12/19 Python
如何解决django配置settings时遇到Could not import settings 'conf.local'
2014/11/18 Python
解析Python中的异常处理
2015/04/28 Python
python中函数传参详解
2016/07/03 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
员工年终演讲稿
2014/01/03 职场文书
Python机器学习之PCA降维算法详解
2021/05/19 Python
Spring Boot 实现 WebSocket
2022/04/30 Java/Android