【问题标题】:How can I configure an SCP/SFTP file storage?如何配置 SCP/SFTP 文件存储?
【发布时间】:2018-03-07 20:19:10
【问题描述】:

我的 Laravel 应用程序应该将文件复制到另一个远程主机。远程主机只能通过带有私钥的 SCP 访问。我想配置一个新的file storagesimilarly as FTP),但是没有找到如何定义SCP驱动的信息。

【问题讨论】:

    标签: php laravel laravel-5 scp laravel-5.5


    【解决方案1】:

    您需要为 Flysystem 安装 SFTP driver,这是 Laravel 用于其文件系统服务的库:

    composer require league/flysystem-sftp
    

    这是一个您可以调整的示例配置。添加到 config/filesystems.php 中的disks 数组:

    'sftp' => [
        'driver' => 'sftp',
        'host' => 'example.com',
        'port' => 21,
        'username' => 'username',
        'password' => 'password',
        'privateKey' => 'path/to/or/contents/of/privatekey',
        'root' => '/path/to/root',
        'timeout' => 10,
    ]
    

    通过将以下代码添加到AppServiceProvider(或其他适当的服务提供者)的boot()方法中,使用新驱动扩展Laravel的文件系统:

    use Storage;
    use League\Flysystem\Filesystem;
    use League\Flysystem\Sftp\SftpAdapter;
    ...
    public function boot()
    {
        Storage::extend('sftp', function ($app, $config) {
            return new Filesystem(new SftpAdapter($config));
        });
    }
    

    然后你可以像使用本地文件系统一样使用 Laravel 的 API:

    Storage::disk('sftp')->put('path/filename.txt', $fileContents);
    

    【讨论】:

    • 谢谢。看起来很有希望。我安装了 SFTP 驱动程序并添加了配置,但收到以下错误消息:'[InvalidArgumentException] Driver [sftp] is not supported.'
    • 我尝试了如下所述的配置:github.com/thephpleague/flysystem-sftp 它运行良好。我不能使用 Storage 门面,但对我来说没问题。
    • SFTP 进入并列出文件大约需要 8-10 秒。难道我做错了什么 ?或者这对于 SFTP 进入服务器并访问文件是否正常?
    • @cyber8200 这取决于目录列表中的文件数量和网络状况。当然,在不同区域的服务器上包含数千个文件的目录将比位于同一建筑物中只有少数文件的目录花费更长的时间。如果您遇到来自 SFTP 的延迟问题,并且您需要经常列出目录的内容,您可以尝试获取列表 via SSH。您可能还想检查它是否正在执行递归目录列表。
    • 如果我运行SCP命令,它会立即下载,所以网络连接非常快。
    【解决方案2】:

    现在,官方文档中有关于 SFTP 连接的说明: https://laravel.com/docs/8.x/filesystem#sftp-driver-configuration

    SFTP:composer require league/flysystem-sftp "~1.0"

    SFTP 驱动程序配置 Laravel 的 Flysystem 集成效果很好 使用 SFTP;但是,示例配置不包含在 框架的默认 filesystems.php 配置文件。如果你需要 配置 SFTP 文件系统,您可以使用配置示例 下面:

    'sftp' => [
            'driver' => 'sftp',
            'host' => 'example.com',
            'username' => 'your-username',
            'password' => 'your-password',
        
            // Settings for SSH key based authentication...
            'privateKey' => '/path/to/privateKey',
            'password' => 'encryption-password',
        
            // Optional SFTP Settings...
            // 'port' => 22,
            // 'root' => '',
            // 'timeout' => 30,
        ],
    

    【讨论】:

      猜你喜欢
      • 2014-08-18
      • 2020-05-31
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 2019-07-10
      • 2021-06-21
      • 2012-05-04
      • 1970-01-01
      相关资源
      最近更新 更多