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运行环境配置的详解
Jun 04 PHP
php中如何同时使用session和cookie来保存用户登录信息
Jul 05 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
Mar 28 PHP
PHP使用xmllint命令处理xml与html的方法
Dec 15 PHP
smarty内置函数section的用法
Jan 22 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
PHP7 新特性详细介绍
Sep 06 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
PHP getName()函数讲解
Feb 03 PHP
phpQuery采集网页实现代码实例
Apr 02 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
服务器端解压缩zip的脚本
2006/12/22 PHP
PHP入门速成教程
2007/03/19 PHP
PHP+jQuery+Ajax实现用户登录与退出
2015/04/27 PHP
两种php实现图片上传的方法
2016/01/22 PHP
PHP生成制作验证码的简单实例
2016/06/12 PHP
不同浏览器的怪癖小结
2010/07/11 Javascript
为jQuery添加Webkit的触摸的方法分享
2014/02/02 Javascript
JavaScript中提前声明变量或函数例子
2014/11/12 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
2015/08/03 Javascript
基于jquery实现ajax无刷新评论
2020/08/19 Javascript
JS实现的四级密码强度检测功能示例
2017/05/11 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
vue.js评论发布信息可插入QQ表情功能
2017/08/08 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
小程序调用微信支付的方法
2019/09/26 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
[03:00]2014DOTA2国际邀请赛 Titan淘汰潸然泪下Ohaiyo专访
2014/07/15 DOTA
Python中replace方法实例分析
2014/08/20 Python
利用ctypes提高Python的执行速度
2016/09/09 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
苹果香港官方商城:Apple香港
2016/09/14 全球购物
《狮子和兔子》教学反思
2014/03/02 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
班组长竞聘书
2014/03/31 职场文书
银行求职信
2014/05/31 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
2016年基层党支部书记公开承诺书
2016/03/25 职场文书
详解Redis实现限流的三种方式
2021/04/27 Redis
Windows server 2012 R2 安装IIS服务器
2022/04/29 Servers