SSL问题- Laravel 9使用Flysystem 3.x获取无法检查存在时,调用AWS S3的Storage exists()方法?

kx5bkwkv  于 2023-04-12  发布在  其他
关注(0)|答案(3)|浏览(208)

我有一个laravel项目,我刚刚从8.x升级到最新的9.x。作为升级的一部分,它需要许多其他组件,如文件系统(我猜称为flysystem)也从1.x升级到3.x。我有一行代码,现在导致我的系统崩溃:

if (Storage::disk($disk)->exists($avatarFilename)) {

这一点以前一直有效,但现在又回来了:

ERROR: Unable to check existence for: avatars/31-feea15debc.png
[stacktrace]
#0 D:\\vhosts\\vendor\\league\\flysystem-aws-s3-v3\\AwsS3V3Adapter.php(157): League\\Flysystem\\UnableToCheckExistence::forLocation('avatars/31-feea...', Object(Aws\\S3\\Exception\\S3Exception))
#1 D:\\vhosts\\vendor\\league\\flysystem\\src\\Filesystem.php(48): League\\Flysystem\\AwsS3V3\\AwsS3V3Adapter->directoryExists('avatars/31-feea...')
#2 D:\\vhosts\\vendor\\laravel\\framework\\src\\Illuminate\\Filesystem\\FilesystemAdapter.php(174): League\\Flysystem\\Filesystem->has('avatars/31-feea...')
#3 D:\\vhosts\\app\\Models\\User.php(1120): Illuminate\\Filesystem\\FilesystemAdapter->exists('avatars/31-feea...')
#4 D:\\vhosts\\scoutek.com\\storage\\framework\\views\\eb5469bb9d755dff931d80dd79d9a76a9a7a2a21.php(10): App\\Models\\User->getAvatar()

在深入挖掘了我的Laravel日志文件中报告的数千行之后,我发现了以下内容,看起来像是异常的原因:

(Aws\\S3\\Exception\\S3Exception(code: 0): Error executing 
\"ListObjects\" on 
\"https://scoutek-development.s3.amazonaws.com/?prefix=avatars%2F31-feea15debc.png%2F&max-keys=1&delimiter=%2F&encoding-type=url\"; 
AWS HTTP error: cURL error 60: SSL certificate problem: 
unable to get local issuer certificate 
(see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for

我已经使用了OpenSSL并创建了我的密钥和证书文件,并在apache conf文件中引用了它们,当我运行phpinfo()时,我可以看到我在创建证书时输入的所有本地主机证书数据,因此看起来php知道证书。

alen0pnh

alen0pnh1#

事实证明,我需要做以下事情:

  • https://curl.se/docs/caextract.html下载最新的cacert.pem文件
  • 将cacert.pem文件复制到我的php8.1.5/extras/ssl文件夹
  • 更新php.ini和phpForApache.ini以添加以下内容:

casert. pem-----------------------

cbjzeqam

cbjzeqam2#

如果其他人也有同样的问题,但上述解决方案并没有为您解决:
我在升级到Laravel 9后也遇到了同样的错误。原来我们传递了$variable = falseResource::cloud()->exists($variable)检查,在最新版本中不再支持。所以一件好事是仔细检查你是否将支持的值传递到这个函数中。

mwngjboj

mwngjboj3#

在我的dockerfile中,我添加了这一行:

RUN echo culr.cainfo="/etc/cacert.pem" >> /usr/local/etc/php/conf.d/docker-php-curl-ca-cert.ini

相关问题