php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)_php技巧

php使用ftp实现文件上传代码片段:

<?php
  /**
   * ftp上传文件类
   */
  class Ftp { 

    /**
     * 测试服务器
     *
     * @var array
     */
    private $testServer = array(
      'host' => 'ip',
      'port' => 21,
      'user' => 'userName',
      'pwd' => 'password'
    ); 

    /**
     * 打开并登录服务器
     *
     * @param string $flag 服务器标识test
     * @return mixed
     *       0:服务器连接失败
     *       1:服务器登录失败
     *       resource 连接标识
     */
    public function openServer($flag = 'test'){
      //选择服务器
      $config = $this->getServerConfig($flag); 

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

      //登录服务器
      if(!ftp_login($connect, $config['user'], $config['pwd'])) return 1; 

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

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

    /**
     * 创建目录并将目录定位到当请目录
     *
     * @param resource $connect 连接标识
     * @param string $dirPath 目录路径
     * @return mixed
     *       2:创建目录失败
     *       true:创建目录成功
     */
    public function makeDir($connect, $dirPath){
      //处理目录
      $dirPath = '/' . trim($dirPath, '/');
      $dirPath = explode('/', $dirPath);
      foreach ($dirPath as $dir){
        if($dir == '') $dir = '/';
        //判断目录是否存在
        if(@ftp_chdir($connect, $dir) == false){
          //判断目录是否创建成功
          if(@ftp_mkDir($connect, $dir) == false){
            return 2;
          }
          @ftp_chdir($connect, $dir);
        }
      }
      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
     *       0:服务器连接失败
     *       1:服务器登录失败
     *       2:创建目录失败
     *       3:上传文件失败
     *       4:上传成功
     */
    public function upload($flag = 'test', $local, $remote){
      //连接并登录服务器
      $connect = $this->openServer($flag);
      if(($connect === 0) || ($connect === 1)) return $connect; 

      //上传文件目录处理
      $mdr = $this->makeDir($connect, dirname($remote));
      if($mdr === 2) return 2; 

      //上传文件
      $result = ftp_put($connect, basename($remote), $local, FTP_BINARY); 

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

      //返回结果
      return (!$result) ? 3 : 4;
    } 

    /**
     * 删除文件
     *
     * @param string $flag 服务器标识
     * @param string $remote 文件的远程路径
     * @return int
     *       0:服务器连接失败
     *       1:服务器登录失败
     *       2:删除失败
     *       3:删除成功
     */
    public function delete($flag = 'test', $remote){
      //连接并登录服务器
      $connect = $this->openServer($flag);
      if(($connect === 0) || ($connect === 1)) return $connect; 

      //删除
      $result = ftp_delete($connect, $remote); 

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

      //返回结果
      return (!$result) ? 2 : 3;
    } 

    /**
     * 读取文件
     *
     * @param string $flag 服务器标识
     * @param string $remote 文件的远程路径
     * @return mixed
     *       0:服务器连接失败
     *       1:服务器登录失败
     */
    public function read($flag, $remote){
      //连接并登录服务器
      $connect = $this->openServer($flag);
      if(($connect === 0) || ($connect === 1)) return $connect; 

      //读取
      $result = ftp_nlist($connect, $remote); 

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

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

    /**
     * 获取ftp服务器配置
     *
     * @param string $flag 服务器标识test
     * @return array ftp服务器连接配置
     */
    private function getServerConfig($flag = 'test'){
      $flag = strtolower($flag);
      //测试服务器
      if($flag == 'test') return $this->testServer;
      //默认返回测试服务器
      return $this->testServer;
    }
  }
  ?>

以上就是小编为大家带来的php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)的全部内容了,希望对大家有所帮助,多多支持~

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php
ftp上传文件
ftp远程主机关闭连接、ftp远程登录、远程ftp服务器、ftp远程路径、远程访问ftp服务器,以便于您获取更多的相关知识。

时间: 2024-10-31 15:27:02

php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)_php技巧的相关文章

php遍历、读取文件夹中图片并分页显示图片的方法_php技巧

本文实例讲述了php遍历.读取文件夹中图片并分页显示图片的方法.分享给大家供大家参考,具体如下: 引子:我的网站图片目录images下有若干图片如1.jpg.2.jpg.3.jpg.--.n.jpg.1.gif.2.gif.3.gif.--.n.gif,要求在该images目录下建一个index.php文件,使得该文件分页显示images目录下的所有图片. 下面是我想到的办法.不知道有没有更好的办法.呵呵...在图片文件夹images下面建一个index.php文件,内容如下: <?php ec

php自定义类fsocket模拟post或get请求的方法_php技巧

本文实例讲述了php自定义类fsocket模拟post或get请求的方法.分享给大家供大家参考.具体如下: zsocket.class.php文件如下: <?php class ZSocket { /* * Init */ private function _fsockopen($host, $port, &$errno, &$errstr, $timeout){ $ip = @gethostbyname($host); $s = @socket_create(AF_INET, SO

php获取CSS文件中图片地址并下载到本地的方法_php技巧

本文实例讲述了php获取CSS文件中图片地址并下载到本地的方法.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: /**  * 获取CSS中图片地址,并且保存到本地  */ class getInCssImage {            /**           *  图片保存下来          * @param $cssUrl css的url地址          * @param $dir 保存图片的目录          * @return void        

如何在命令行中使用 ftp 命令上传和下载文件

如何在命令行中使用 ftp 命令上传和下载文件 本文中,介绍在 Linux shell 中如何使用 ftp 命令.包括如何连接 FTP 服务器,上传或下载文件以及创建文件夹.尽管现在有许多不错的 FTP 桌面应用,但是在服务器.SSH.远程会话中命令行 ftp 命令还是有很多应用的.比如.需要服务器从 ftp 仓库拉取备份. 步骤 1: 建立 FTP 连接 想要连接 FTP 服务器,在命令上中先输入ftp然后空格跟上 FTP 服务器的域名 'domain.com' 或者 IP 地址 例如: ft

ftp服务器上传文件-FTP上传时出现out空指针

问题描述 FTP上传时出现out空指针 OutputStream out = ftpClient.appendFileStream(new String(remoteFile.getBytes("GBK"), "iso-8859-1")); 我使用ftp断点上传两份文件,第一份全英文的通过,第二份在文件名中存在中文,上面这句话就会出现out空指针,求大神指点 解决方案 可能是编码,换成utf-8试试

ftp服务器上传文件-ftp服务器上传没错误,,但ftp服务器相应目录下没有找到上传文件

问题描述 ftp服务器上传没错误,,但ftp服务器相应目录下没有找到上传文件 public void remoteUpload()throws Exception{ FTPClient f = new FTPClient(); f.connect("***.***.***.***", 21); f.login("intf","intf"); System.out.println(f.isConnected()); f.setControlEnco

ftp服务器上传没错误,,但ftp服务器相应目录下没有找到上传文件

问题描述 ftp服务器上传没错误,,但ftp服务器相应目录下没有找到上传文件 public void remoteUpload()throws Exception{ FTPClient f = new FTPClient(); f.connect("***.***.***.***", 21); f.login("intf","intf"); System.out.println(f.isConnected()); f.setControlEnco

ftp并发上传文件至服务器

问题描述 ftp并发上传文件至服务器 使用普通电脑配置的FTP服务器,大概会出现十几个同时上传或者下载文件吧,能在服务器端或者客户端程序进行限制,防止不用用户同时上传同一文件吗?

Java通过FTP服务器上传下载文件的方法_java

对于使用文件进行交换数据的应用来说,使用FTP 服务器是一个很不错的解决方案. 关于FileZilla Server服务器的详细搭建配置过程,详情请见FileZilla Server安装配置教程.之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲测上传2G的文件到FileZilla Server都没有该问题,朋友们可以放心使用该代码. FavFTPUtil.Java package com.favccxx.favsoft.util; import jav