Laravel文件系统SFTP缓存适配器

时间:2018-06-22 08:31:01

标签: php laravel sftp flysystem

我在这个问题上苦苦挣扎了一段时间。 我正在使用sftp适配器连接到另一台服务器,在该服务器上我经常读写文件。

为创建缩略图,我使用具有laravel Horizo​​n的后台作业从远程sftp服务器检索pdf内容,然后生成jpg并放置在本地文件系统中。

对于第一次设置,我需要制作约150k的缩略图。 当我在地平线上使用大量进程时,远程服务器无法处理此数量的连接。

此刻(非最佳时间)(10秒〜* 150k〜),我必须限制为最多2个进程。

我想缓存连接,因为我知道这是可能的,并且可能解决了我的问题,但无法使其正常工作:(

我能找到的唯一参考/教程/示例/文档是

https://medium.com/@poweredlocal/caching-s3-metadata-requests-in-laravel-bb2b651f18f3 https://flysystem.thephpleague.com/docs/advanced/caching/

当我使用示例中的代码时:

Storage::extend('sftp-cached', function ($app, $config) {
    $adapter = $app['filesystem']->createSftpAdapter($config);
    $store = new Memory();

    return new Filesystem(new CachedAdapter($adapter->getDriver()->getAdapter(), $store));
});

我收到错误消息:不支持驱动程序[]。

这里有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

似乎有必要调整您的配置:

在您的 config / filesystems.php 文件中,向存储中添加一个“缓存”键:

'default' => [
    'driver' => 'sftp-cached',

    // ...

    'cache' => [
        'store' => 'apc',
        'expire' => 600,
        'prefix' => 'laravel',
    ],
],

该示例基于官方文档(https://laravel.com/docs/5.6/filesystem#caching),但此处并未很好地描述如何使用“存储”键(此处为memcached),因此您需要更改驱动程序的实现为new Memcached($memcached);(带有要插入的实例)。

在您的情况下,由于 sftp-cached 驱动程序实现了$store = new Memory();,因此缓存配置必须使用'store' => 'apc'(基于RAM的缓存)反映出来。可用的'store'驱动程序可在 config / cache.php 中找到。

(如果您使用APC并收到错误消息Call to undefined function Illuminate\Cache\apc_fetch(),则必须安装此PHP扩展程序,请参见http://php.net/manual/en/apcu.installation.php

最后,我相信 config / filesystems.php 中的'prefix'键必须设置为与 config / cache.php 中的缓存键前缀相同(默认为'prefix' => 'cache'