Rob*_*ema 5 php sftp laravel flysystem
我在这个问题上挣扎了一段时间。我正在使用 sftp 适配器连接到另一台我经常读/写文件的服务器。
对于缩略图创建,我使用 Laravel Horizon 的后台作业从远程 sftp 服务器检索 pdf 内容,然后生成 jpg 并放置在本地文件系统中。
对于第一次设置,我需要制作大约 150k 的缩略图。当我在 Horizon 中使用大量进程时,远程服务器无法处理这么多的连接。
我目前必须限制最多 2 个进程(10 秒~ * 150k~),这不是最佳选择。
我想缓存连接,因为我知道这是可能的,并且可能解决我的问题,但无法让它工作:(
我能找到的唯一参考/教程/示例/文档是
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));
});
Run Code Online (Sandbox Code Playgroud)
我收到错误:不支持驱动程序 []。
这里有人可以在这方面进一步帮助我吗?
看来有必要调整您的配置:
在您的config/filesystems.php文件中,将“缓存”键添加到您的存储中:
'default' => [
'driver' => 'sftp-cached',
// ...
'cache' => [
'store' => 'apc',
'expire' => 600,
'prefix' => 'laravel',
],
],
Run Code Online (Sandbox Code Playgroud)
此示例基于官方文档(https://laravel.com/docs/5.6/filesystem#caching),但没有很好地描述此处如何使用“store”密钥(memcached示例在哪里),您会需要将驱动程序的实现更改为new Memcached($memcached);(使用要注入的实例)。
在您的情况下,由于sftp-cached驱动程序实现了$store = new Memory();,因此缓存配置必须反映这一点'store' => 'apc'(这是基于 RAM 的缓存)。可用的驱动程序可在config/cache.php'store'中找到。
(如果您使用 APC 并收到错误消息Call to undefined function Illuminate\Cache\apc_fetch(),则必须安装此 PHP 扩展,请参见http://php.net/manual/en/apcu.installation.php)
最后,我相信config/filesystems.php中的“前缀”键必须设置为与config/cache.php中的缓存键前缀相同('prefix' => 'cache'默认情况下)。
| 归档时间: |
|
| 查看次数: |
2087 次 |
| 最近记录: |