1.操作类

<?php
class FtpService
{
protected $connect = 0;
public function __construct()
{
$this->connect = $this->openServer();
if(($this->connect === 0) || ($this->connect === 1)) return $this->connect;
}

/**
* 打开并登录服务器
*
* @return mixed
* 0:服务器连接失败
* 1:服务器登录失败
* resource 连接标识
*/
public function openServer(){
//选择服务器
$config = config('ftp.'); //ftp配置

//连接服务器
$connect = ftp_connect($config['host'], $config['port']);
if($connect == false) return false;

//登录服务器
if(!ftp_login($connect, $config['user'], $config['pwd'])){
return false;
}else{
echo "connect success!"; echo "<br>";
}

//打开被动模式,数据的传送由客户机启动,而不是由服务器开始
ftp_pasv($connect, false);

//返回连接标识
return $connect;
}

/**
* 创建目录并将目录定位到当请目录
*
* @param resource $connect 连接标识
* @param string $dirPath 目录路径
* @return mixed
* 2:创建目录失败
* true:创建目录成功
*/
public function makeDir($dirPath){
$dirPath = '/' . trim($dirPath, '/');
$dirPath = explode('/', $dirPath);
foreach ($dirPath as $dir){
if($dir == '') $dir = '/';
//判断目录是否存在

if(!@ftp_chdir($this->connect, $dir)){
//判断目录是否创建成功
if(@ftp_mkDir($this->connect, $dir) == false){
return false;
}
@ftp_chdir($this->connect, $dir);
}
}

//关闭服务器
$this->closeServer($this->connect);
return true;
}

/**
* 关闭服务器
*
* @param resource $connect 连接标识
*/
public function closeServer($connect){
if(!empty($connect)) ftp_close($connect);
}

/**
* 上传文件
*
* @param string $flag 服务器标识
* @param string $local 上传文件的本地路径
* @param string $remote 上传文件的远程路径
* @return int
*/
public function upload($local, $remote){
//上传文件目录处理
$mdr = $this->makeDir(dirname($remote));
if($mdr === false) return false;

if (!file_exists($local)){
return false;
}

$connect = $this->openServer();
//上传文件
$result = ftp_put($connect, $remote, $local, FTP_BINARY);
//关闭服务器
$this->closeServer($connect);

//返回结果
return (!$result) ? false : true;
}

/**
* 删除文件
*
* @param string $flag 服务器标识
* @param string $remote 文件的远程路径
* @return int
*/
public function delete($remote){
//删除
$result = ftp_delete($this->connect, $remote);
//关闭服务器
$this->closeServer($this->connect);

//返回结果
return (!$result) ? false : true;
}

/**
* 读取文件
*
* @param string $flag 服务器标识
* @param string $remote 文件的远程路径
* @return mixed
*/
public function read($remote){
//读取
$result = ftp_nlist($this->connect, $remote);

//关闭服务器
$this->closeServer($this->connect);

echo "<pre>";
print_r($result);exit;
//返回结果
foreach ($result as $key => $value){
if(in_array($value, array('.', '..'))) unset($result[$key]);
}
return array_values($result);
}

/**
* 下载文件
*/
public function down($local,$remote){
$result = ftp_get($this->connect,$local,$remote,FTP_BINARY);
$this->closeServer($this->connect);
return $result;
}
}

2.ftp连接配置:
<?php
return [
'host' => 'IP',
'port' => 21,
'user' => '账号',
'pwd' => '密码'
];
3.ftp操作调用测试: ftp目录结构(IP/homes/,下面是在homes目录下测试)
    public function ftp_test(){
$path = iconv('UTF-8','GB2312',$_SERVER['DOCUMENT_ROOT']."/uploads/photos/test.txt");
$ftp = new FtpService();

// $result = $ftp->delete("homes/test.txt"); //删除操作
// $result = $ftp->read("homes"); //读操作
// $result = $ftp->down("test.txt",'/homes/test.txt'); //下载操作
// $result = $ftp->makeDir('/homes/testdir/'); //创建文件夹

$result = $ftp->upload($path,'/homes/test1.txt'); //上传操作

echo $result;
}
添加ftp扩展:php.ini文件添加:extension=php_ftp.dll



PHP中ftp的连接与操作的更多相关文章

  1. golang中使用gorm连接mysql操作

    一.代码 package main import ( "fmt" "github.com/jinzhu/gorm" _ "github.com/go- ...

  2. php大力力 [024节]PHP中的字符串连接操作(2015-08-27)

    2015-08-27 php大力力024.PHP中的字符串连接操作 PHP中的字符串连接操作  阅读:次   时间:2012-03-25 PHP字符串的连接的简单实例 时间:2013-12-30 很多 ...

  3. JNDI和在tomcat中配置DBCP连接池 元数据的使用 DBUtils框架的使用 多表操作

    1 JNDI和在tomcat中配置DBCP连接池 JNDI(Java Naming and Directory Interface),Java命名和目录接口,它对应于J2SE中的javax.namin ...

  4. 数据库和linq中的 join(连接)操作

    sql中的连接 sql中的表连接有inner join,left join(left outer join),right join(right outer join),full join(full o ...

  5. 通过cmd完成FTP上传文件操作

    一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...

  6. Android中FTP服务器、客户端搭建以及SwiFTP、ftp4j介绍

    本文主要内容: 1.FTP服务端部署---- 基于Android中SwiFTP开源软件介绍: 2.FTP客户端部署 --- 基于ftp4j开源jar包的客户端开发 : 3.使用步骤 --- 如何测试我 ...

  7. FTP服务器搭建及操作(一)

    FTP服务器搭建及操作(一) FTP搭建 PHP FTP操作 搭建方法参照(windows):http://www.cnblogs.com/lidan/archive/2012/06/04/25351 ...

  8. Linux中ftp的常用命令

    转自:https://www.jb51.net/article/103904.htm FTP命令 ftp> ascii # 设定以ASCII方式传送文件(缺省值) ftp> bell # ...

  9. FTP-Linux中ftp服务器搭建

    一.FTP工作原理 (1)FTP使用端口 [root@localhost ~]# cat /etc/services | grep ftp ftp-data 20/tcp #数据链路:端口20 ftp ...

随机推荐

  1. 如何在 C# 中使用 ArrayPool 和 MemoryPool

    对资源的可复用是提升应用程序性能的一个非常重要的手段,比如本篇要分享的 ArrayPool 和 MemoryPool,它们就有效的减少了内存使用和对GC的压力,从而提升应用程序性能. 什么是 Arra ...

  2. 小技巧!CSS 整块文本溢出省略特性探究

    今天的文章很有意思,讲一讲整块文本溢出省略打点的一些有意思的细节. 文本超长打点 我们都知道,到今天(2020/03/06),CSS 提供了两种方式便于我们进行文本超长的打点省略. 对于单行文本,使用 ...

  3. addEventListener的第三个参数详解

    示例代码 element.addEventListener("mousedown", func, { passive: true });  element.addEventList ...

  4. go-echarts 入门安装和使用

    在 Golang 这门语言中,目前数据可视化的第三方库还是特别少,go-echarts的开发就是为了填补这部分的空隙.Echarts是百度开源的非常优秀的可视化图表库,凭借着良好的交互性,精巧的图表设 ...

  5. Harry And Magic Box HDU - 5155

    题目链接:https://vjudge.net/problem/HDU-5155#author=0 题意:在一个n*m的方格中要满足每一行每一列至少有一个珠宝,问总共有多少种方案. 思路:利用递推的思 ...

  6. 【安全研究】Domain fronting域名前置网络攻击技术

    出品|MS08067实验室(www.ms08067.com) 千里百科 Domain Fronting基于HTTPS通用规避技术,也被称为域前端网络攻击技术.这是一种用来隐藏Metasploit,Co ...

  7. FFmpeg API的简单实践应用

    0. 前言 利用 FFmpeg 编译链接生成的可执行程序本身可以实现很多特定的功能,但如果我们有自己的个性化需求,想要在自己开发的项目中使用 ffmpeg 的一些功能,就需要理解并应用其已经实现好的A ...

  8. 经典变长指令SIB

    前言 ModR/M字段是用来进行内存寻址的,可当地址形如DS:[EAX + ECX*2 + 12345678]时,仅仅靠ModR/M字段,是描述不出来的. 这时就在ModR/M后面增加一个SIB字节, ...

  9. OO第三单元个人总结

    OO第三单元个人总结 JML理论与基础与应用工具链 JML是什么? Java建模语言(JML)是一种行为接口规范语言,可用于指定Java模块的行为 .它结合了Eiffel的契约设计方法 和Larch ...

  10. 简单模拟实现javascript中的call、apply、bind方法

    目录 引子 隐式丢失 硬绑定 实现及原理分析 总体实现(纯净版/没有注释) 写在最后 引子 读完<你不知道的JavaScript--上卷>中关于this的介绍和深入的章节后,对于this的 ...