Laravel 5.4 fopen():文件名不能为空

The*_*M97 6 php laravel laravel-5

我想在laravel 5.4上传图片.这是代码:

if ($request->hasFile('image') && $request->image->isValid()) {
        $image = $request->image;

        $image_name = bcrypt($image->getClientOriginalName());

        Storage::disk('public')->putFileAs('images', $image, $image_name . '.' . $image->getClientOriginalExtension());

        $article->image($image_name);
    }
Run Code Online (Sandbox Code Playgroud)

在FilesystemAdapter.php中(第146行)

我检查了FileSystemAdapter.php,看到问题出在这一行:

$stream = fopen($file->getRealPath(), 'r+');
Run Code Online (Sandbox Code Playgroud)

当我转储$ file变量时,它会返回正确的信息,但是当我var_dump($file->getRealPath();说它bool(false)并且我无法上传图像时

Yev*_*yev 11

我们在Windows®Server的Internet信息服务(IIS)中遇到此问题.并且唯一需要的是 - 对C:\ Windows\temp的许可,因为它在php.ini中为php7设置为upload_tmp_dir.

  • 你的回答帮助我找出了我的问题,谢谢 (2认同)

vin*_*nsa 7

我在 Windows 10 上使用 Laragon 4.0.12 的情况。

问题是我的 php.ini 中的 upload_tmp_dir=... 没有设置所需的权限。

如果此设置被注释,则该值应该是默认的 Windows 临时目录(C:\Windows\Temp,您可以检查它的权限)。

解决方案 - 我将其更改为:

upload_tmp_dir = "C:\Users\{my_user}\AppData\Local\Temp" 
Run Code Online (Sandbox Code Playgroud)

为了避免搞乱更改权限。

修改生效后重启服务器。

php.ini 中要考虑的另一个设置:

upload_max_filesize = 
max_file_uploads = 
Run Code Online (Sandbox Code Playgroud)

还需要启用以下 php 扩展:exif、gd2