返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >【PHP库】phpseclib - sftp远程文件操作
  • 531
分享到

【PHP库】phpseclib - sftp远程文件操作

php服务器开发语言 2023-08-31 12:08:04 531人浏览 薄情痞子
摘要

需求场景说明 对接的三方商家需要进行文件传输,并且对方提供的方式是 sftp 的服务器账号,我们需根据他们提供的目录进行下载和上传指定文件。 安装 composer require PHPseclib/phpseclib:~3.0 使用sf

需求场景说明

对接的三方商家需要进行文件传输,并且对方提供的方式是 sftp 的服务器账号,我们需根据他们提供的目录进行下载和上传指定文件。

安装

composer require PHPseclib/phpseclib:~3.0

使用sftp功能

新建并设置config/sftp.php文件

return [    'sftp' => [        'host'   => env('SFTP_HOST', '127.0.0.1'),        'port'   => env('SFTP_PORT', 22),        'user' => env('SFTP_USE', null),        'password' => env('SFTP_PASSWord', null),    ],];

配置.env文件

SFTP_HOST=127.0.0.1SFTP_PORT=22SFTP_USE=userSFTP_PASSWORD=password

封装 app/Utils/SftpHelper.php调用库文件,通过单例可设置不同的 sftp 服务器

namespace App\Utils;use phpseclib3\Net\SFTP;class SftpHelper{    private static $instance = [];    public static function getInstance($key='sftp')    {        if (!isset(self::$instance[$key])) {            $config = ConfigHelper::getInstance()->read('sftp.'.$key);            self::$instance[$key] = new SFTP($config['host'], $config['port']);            self::$instance[$key]->login($config['user'], $config['password']);        }        return self::$instance[$key];    }}

使用方法说明

  • nlist:获取指定目录下的文件列表,包括子目录,(默认不会递归子目录下的文件)
  • is_readable: 判断文件是否有读权限
  • chmod:修改文件/目录权限,默认不递归
  • get:获取文件,默认获取文件内容。
  • is_dir:是否存在该目录
  • mkdir:创建目录
  • rename: 将文件重命名
  • put:上传文件

访问 sftp 服务器并下载文件到本地

1 读取指定服务器下的文件,并循环处理每个文件

2 下载远程文件到当前服务器的指定位置,并创建待处理文件记录表

说明:创建文件处理表可使文件读取逻辑失败时,可重复处理,并且不需要多次访问 sftp 服务器,进行逻辑解耦

3 创建文件记录数据后将服务器上的文件移到归档目录,避免重复读取

// 连接sftp服务器并登录$sftp = SftpHelper::getInstance('sftp');// 获取目录下的文件列表(不递归)$file_list = $sftp->nlist($remote_dir);// 循环文件列表,获取处理数据foreach ($file_list as $file_name) {    // 跳过不处理的目录    if (in_array($file_name, ['.', '..', 'Archive'])) {        continue;    }    // 拼接完整的服务器文件路径    $remote_file = $remote_dir.$file_name;    // 设置本地存储的目录    $save_path = env('FILE_PATH', '/data/storage/sftp/')."{$file_type}/";    File::exists($save_path) or (File::makeDirectory($save_path, 0777, true) && @chmod($save_path, 0777));    // 完整的本地路径    $local_file = $save_path. $file_name;    // 拉取sftp文件到本地目录    if (!file_exists($local_file)) {        if (!$sftp->is_readable($remote_file)) {            $sftp->chmod('0777', $remote_file);        }        $sftp->get($remote_file, $local_file);    }    // 添加文件日志(同一个远程文件不重复拉取)    // 后续可单独增加文件读取逻辑,使文件内容处理失败时可重复处理,并且不需要重复访问 sftp 服务器去读取远程文件    SftpFile::updateOrCreate([        'remote_dir'  => $remote_file,    ], [        'action'     => $file_type, // 文件类型        'filename'   => $file_name, // 文件名        'filepath'   => $local_file, // 本地服务器路径    ]);        // 日志创建成功之后再将文件移到Archive目录下,避免重复读取    if (!$sftp->is_dir($remote_dir.'Archive/')) {        // 没有则创建Archive目录        $sftp->mkdir($remote_dir.'Archive/');    }    // 已读取的文件移到子目录Archive    $sftp->rename($remote_file, "ArcHive/{$remote_file}");}

上传文件到 sftp 服务器的指定位置

// 读取待处理的文件列表$file_list = SftpFile::where([    'action' => $file_type,    'state'  => 1])->get();if (count($file_list) <= 0) {    return;}// 连接sftp服务器并登录$mk_sftp = SftpHelper::getInstance('sftp');foreach ($file_list as $file) {    // 校验推送的文件是否存在    if (!file_exists($file->filepath)) {        throw new ParamsException('推送的文件不存在');    }    $file_path = $file->filepath;    $remote_file = $file->remote_dir;    // 推送文件到sftp服务器    // SFTP::SOURCE_LOCAL_FILE 表示以文件的形式,不设置时表示是按字符串形式上传    $put_res = $mk_sftp->put($remote_file, $file_path, SFTP::SOURCE_LOCAL_FILE);    if ($put_res) {        $file->state = 1;        $file->save();    }}

读取文件内容

// 当前php.ini配置的是128Mini_set('memory_limit', '300M');$local_file = $file_info['filepath'];$remote_file = $file_info['remote_dir'];// 读取文件数据$fp = fopen($local_file, 'r');$file_data = [];while (!feof($fp)) {    $row_str = fgets($fp); // 逐行读取。如果fgets不写length参数,默认是读取1k。    $item = explode(',', trim($row_str));        // 跳过表头       // 将行数据转成指定的键值对}return $file_data;

来源地址:https://blog.csdn.net/jh035/article/details/128062059

--结束END--

本文标题: 【PHP库】phpseclib - sftp远程文件操作

本文链接: https://lsjlt.com/news/385688.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 【PHP库】phpseclib - sftp远程文件操作
    需求场景说明 对接的三方商家需要进行文件传输,并且对方提供的方式是 sftp 的服务器账号,我们需根据他们提供的目录进行下载和上传指定文件。 安装 composer require phpseclib/phpseclib:~3.0 使用sf...
    99+
    2023-08-31
    php 服务器 开发语言
  • python通过sftp远程传输文件
    python提供了一个第三方模块paramiko,通过这个模块可以实现两台机器之间的网络连接,sftp是paramiko的一个方法,使用sftp可以在两台机器之间互相传输拷贝文件。然而paramiko的sftp只能拷贝文件,...
    99+
    2023-01-31
    传输文件 python sftp
  • PHP文件操作
    预计更新 第一章:入门 1.1 环境搭建1.2 变量和数据类型1.3 控制流程 第二章:函数 2.1 函数的定义和调用2.2 函数的参数和返回值2.3 匿名函数和闭包 第三章:数组 3.1 数组的基本...
    99+
    2023-09-05
    php 开发语言
  • JSch教程使用sftp协议实现服务器文件载操作
    目录Jsch是什么?怎么使用?添加jar依赖Jsch是什么? JSch 是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。你...
    99+
    2024-04-02
  • PHP文件的操作示例
    小编给大家分享一下PHP文件的操作示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!fopen() 函数用于在 PHP 中打开文件。 打开文件 fopen() 函...
    99+
    2023-06-15
  • python基于paramiko库远程执行 SSH命令如何实现sftp下载文件
    小编给大家分享一下python基于paramiko库远程执行 SSH命令如何实现sftp下载文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!楔子我们使用 Pyt...
    99+
    2023-06-07
  • PHP文件操作教程:如何实时修改、保存文件?
    PHP是一种服务器端脚本语言,广泛用于Web应用程序开发。在Web应用程序开发中,文件操作是必不可少的一部分。本文将介绍如何在PHP中实时修改、保存文件。 首先,我们需要了解PHP中文件操作的基本函数。PHP中提供了一些函数来操作文件,包...
    99+
    2023-10-10
    文件 教程 实时
  • php关闭文件怎么操作
    本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑资源类型属于 PHP 的基本类型之一,一旦完成资源的处理,一定要将其关闭,否则可能会出现一些意料不到的错误。函数 fclose() 可以关闭一个已打开的文件指针,成功时...
    99+
    2018-08-28
    php 关闭文件
  • PHP文件操作常用函数
    PHP文件操作常用函数 在Web开发中,文件操作是非常重要的一部分。PHP提供了很多常用的文件操作函数,下面对其中的十个函数进行详细解释。 1. fopen()函数 fopen()函数用于打开一个文件,并返回一个文件指针。这个指针可以用于读...
    99+
    2023-08-31
    php 开发语言
  • PHP中的文件操作指南
    PHP是一种服务器端编程语言,开发人员可以使用它来开发各种类型的Web应用程序。在开发Web应用程序时,文件操作可能是一个经常需要用到的功能。在本篇文章中,我们将深入介绍PHP中的文件操作指南。一、创建文件在PHP中创建一个文件很简单,只需...
    99+
    2023-05-22
    PHP 文件操作 文件读取 文件写入
  • PHP入门指南:文件操作
    作为一名初学者,PHP 文件操作可能是你需要掌握的基础操作之一。文件操作能使你进行多种操作,包括读取和写入文件,创建和删除文件,以及更重要的是,处理上传文件。在本篇文章中,我们将探讨PHP文件操作的基础知识。检查文件是否存在在进行文件操作之...
    99+
    2023-05-20
    PHP 文件操作 入门指南
  • Python远程SSH库Paramiko详细操作
    目录核心组件SSHClient常用方法SFTPClient常用方法使用示例SSH私钥创建SSHClient运行命令SFTPClient下载文件paramiko是用python语言写的...
    99+
    2024-04-02
  • python教程(八)·文件操作
    由于离高考越来越近,博主打算本篇文章过后,暂停本系列教程的更新,等到高考完后再继续本系列教程,请谅解! 这次我们学习用python操作文件,包括文件的读、写等…… 操作文件第一步——打开文件 要想操作文件,我们首先应该打开一个文件。当然...
    99+
    2023-01-31
    操作 文件 教程
  • 怎么操作mongodb数据库文件
    要操作MongoDB数据库文件,可以按照以下步骤进行操作:1. 安装MongoDB:首先,需要安装MongoDB数据库。你可以从Mo...
    99+
    2023-08-31
    mongodb数据库
  • Python 文件操作:访问和修改远程服务器上的文件
    ...
    99+
    2024-04-02
  • PHP中怎么实现目录操作和文件操作
    今天就跟大家聊聊有关PHP中怎么实现目录操作和文件操作,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、目录操作首先介绍的是一个从目录读取的函数,opendir(),readdir(...
    99+
    2023-06-17
  • 异步编程:PHP和NumPy的文件操作实践。
    异步编程是现代计算机编程领域的一个重要议题,它可以大大提高程序运行效率和响应速度。在本文中,我们将探讨PHP和NumPy两个编程语言下异步编程在文件操作方面的实践。 一、PHP异步文件操作 PHP是一种广泛使用的服务器端脚本语言,它具有易学...
    99+
    2023-10-05
    numpy 异步编程 文件
  • PHP操作文件的命令总结
    本篇内容主要讲解“PHP操作文件的命令总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP操作文件的命令总结”吧!PHP 包含文件PHP include 和 require 语句在 PHP ...
    99+
    2023-06-04
  • 详解Java目录操作与文件操作教程
    目录目录操作创建目录判断这个文件或目录是否存在判断是否是目录读取目录删除目录文件操作创建文件删除文件File对象常用函数目录操作 创建目录 File类中有两个方法可以用来创建文件夹:...
    99+
    2024-04-02
  • Python Paramiko上传下载sftp文件及远程执行命令详解
    目录一、简介安装模块二、上传文件三、下载文件四、远程执行命令五、错误集锦原因解决一、简介 Paramiko模块是基于Python实现的SSH远程安全连接,用于SSH远程执行命令、文件...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作