如果我这样做:
$image = '/storage/images/image.jpg';
list($width, $height) = getimagesize($image);
Run Code Online (Sandbox Code Playgroud)
我明白了: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);
Run Code Online (Sandbox Code Playgroud)
页面永远停留在加载状态...
一些附加信息
更新
由于看起来服务器崩溃了,我以为不会有错误日志,但有:
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)
Run Code Online (Sandbox Code Playgroud)
PagesController 中的第 50 行是
list($width, $height) = getimagesize($image);
Run Code Online (Sandbox Code Playgroud)
并如图所示$image = url('/').'/storage/images/image.jpg';
如果我在浏览器中输入 URL,http://127.0.0.1:8000/storage/images/image.jpg它就会显示图像。
更新2
file_get_contents($image)给出相同的行为,所以它可能与 Laravel 的路由有关,或者与脚本请求与浏览器请求不同这一事实有关?
更新3
在配置/文件系统.php
'images' => [
'driver' => 'local',
'root' => storage_path('app/public/images'),
'url' => env('APP_URL').'/storage/images',
'visibility' => 'public',
],
Run Code Online (Sandbox Code Playgroud)
public并且在创建的文件夹中有一个符号链接php artisan storage:link
您正在尝试访问/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);
Run Code Online (Sandbox Code Playgroud)
或者storage_path()帮手:
$image = storage_path('app/public/images/image.jpg');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3363 次 |
| 最近记录: |