Laravel getimagesize崩溃并带有完整URL

时间:2018-12-22 13:33:52

标签: laravel

如果我这样做:

$image = '/storage/images/image.jpg';
list($width, $height) = getimagesize($image);

我得到:getimagesize(/storage/images/image.jpg): failed to open stream: No such file or directory,这是有道理的,因为它没有完整的URL。

但是,如果我这样做:

$image = url('/').'/storage/images/image.jpg'; // Added url('/')
list($width, $height) = getimagesize($image);

页面永远处于加载状态...

一些其他信息

  • 公共文件夹,存储文件夹和图像文件夹均具有755权限
  • 图像本身有644个,并显示在前端
  • 我正在使用Spatie Media Library,而我试图从中获取尺寸的图像来自一次转换。但是,由于它们在前端完美显示,我不明白为什么这会导致脚本使服务器崩溃
  • 这是在本地主机上

更新

服务器好像崩溃了,我以为不会有错误日志,但是有:

getimagesize(http://127.0.0.1:8000/storage/images/image.jpg): failed to open stream: HTTP request failed!  {"exception":"[object] (ErrorException(code: 0): getimagesize(http://127.0.0.1:8000/storage/images/image.jpg): failed to open stream: HTTP request failed!  at /Users/username/Documents/dev/test/app/Http/Controllers/PagesController.php:50)

PagesController中的第50行是

list($width, $height) = getimagesize($image);

并按照指示$image = url('/').'/storage/images/image.jpg';

如果我在浏览器中输入URL http://127.0.0.1:8000/storage/images/image.jpg,它将显示图像。

更新2

file_get_contents($image)具有相同的行为,因此可能与Laravel的路由或脚本请求与浏览器请求不同的事实有关?

更新3

在config / filesystems.php

'images' => [
            'driver' => 'local',
            'root' => storage_path('app/public/images'),
            'url' => env('APP_URL').'/storage/images',
            'visibility' => 'public',
        ],

public创建的php artisan storage:link文件夹中有一个符号链接

1 个答案:

答案 0 :(得分:0)

您正在尝试访问/storage/images/image.jpg。您的真实路径是这样的:/var/www/laravel.app/storage/app/public/images/image.jpg

您应该使用Storage Facade及其path()方法来检索完整的绝对路径:

$image = Storage::path('public/images/image.jpg');
list($width, $height) = getimagesize($image);

storage_path()助手:

$image = storage_path('app/public/images/image.jpg');