Php &引用;SplFileInfo::getSize():stat failed";执行文件上载时,Laravel 6.0上出现异常

Php &引用;SplFileInfo::getSize():stat failed";执行文件上载时,Laravel 6.0上出现异常,php,laravel,symfony,file-upload,xampp,Php,Laravel,Symfony,File Upload,Xampp,我正在使用Laravel6.0构建一个简单的图像上传系统 但出于某种奇怪的原因,我不断遇到“SplFileInfo::getSize():stat failed”异常,即使图像已成功上载到正确的文件夹。。。我能做些什么来1)跳过这个异常并隐藏它2)完全修复它吗 我确实看到了一个解决方案,将max_file_size和post_max_size等更改为更高的值,然后重新启动Apache。我试过了,但也没用。。。看起来没有任何明确的解决方案 这是我在控制器上的上传功能 public function

我正在使用Laravel6.0构建一个简单的图像上传系统

但出于某种奇怪的原因,我不断遇到“SplFileInfo::getSize():stat failed”异常,即使图像已成功上载到正确的文件夹。。。我能做些什么来1)跳过这个异常并隐藏它2)完全修复它吗

我确实看到了一个解决方案,将max_file_size和post_max_size等更改为更高的值,然后重新启动Apache。我试过了,但也没用。。。看起来没有任何明确的解决方案

这是我在控制器上的上传功能

public function fileUpload(Request $request) {
        $this->validate($request, [
            'img' => 'required|image|mimes:jpeg,png,jpg,',
        ]);

        if ($request->hasFile('img')) {
            $image = $request->file('img');
            $size = $image->getSize();
            $characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
            $charactersLength = strlen($characters);
            $randomString = '';
            for ($i = 0; $i < 5; $i++) {
                $randomString .= $characters[rand(0, $charactersLength - 1)]; // Generate random 5 character name...
            }
            $name = $randomString.'.'.$image->getClientOriginalExtension();
            $destinationPath = public_path('storage'.'\\'.$request->input('post'));

            // Store Image Information //
            $data = new Photo();
            // Get post number //
            $data->order = $request->input('post');
            $data->filename = $name;
            $data->location = $destinationPath;
            $data->save();

            // Now move to the destination path //
            $image->move($destinationPath, $name);

            return refresh();
        }
    }
公共函数文件上传(请求$Request){
$this->validate$请求[
“img”=>“必需|图像|模拟:jpeg、png、jpg,”,
]);
如果($request->hasFile('img')){
$image=$request->file('img');
$size=$image->getSize();
$characters='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength=strlen($characters);
$randomString='';
对于($i=0;$i<5;$i++){
$randomString.=$characters[rand(0,$charactersLength-1)];//生成随机的5个字符的名称。。。
}
$name=$randomString.。$image->getClientOriginalExtension();
$destinationPath=public\u路径('storage'.\\'.$request->input('post');
//存储图像信息//
$data=新照片();
//获取邮政编码//
$data->order=$request->input('post');
$data->filename=$name;
$data->location=$destinationPath;
$data->save();
//现在移动到目标路径//
$image->move($destinationPath,$name);
返回刷新();
}
}
我正在使用MySQL存储照片信息,例如图像与哪个帖子关联、控制器生成的文件名以及图像在机器中的存储位置。。。正如你所看到的,我正在为每个帖子创建单独的文件夹,用于组织目的


我们的目标是至少禁用异常,否则整个工作正常。。。理论上,我应该在上传完成后刷新页面。

U可以通过文件类获得大小

$size = File::size($pathFile);


伙计们,我想出来了…

可能需要在Laravel中进行一个小的更新来解决这个问题。。。因为这是一个奇怪的“错误”

显然,您必须执行
getSize(),在我的例子中是
$size=$image->getSize()并将该值存储在某个位置,无论它是否位于SQL数据库中。。。即使你不需要这些数据。。。简单地将其存储为变量将抛出错误

一旦我
返回$size
,错误就消失了,并返回了图像大小的字节值。。。当我将其作为mySQL值存储在列中时,问题不再出现


我希望这对某人有帮助。哈哈。如果你遇到这个问题,你不明白,我很乐意解释。:)

请先阅读文档,了解您在laravel 5.4中停止保存图像的方式。请使用laravel记录的最新版本

$path = $request->photo->store('images');
$path = $request->photo->storeAs('images', 'filename.jpg');
其中,
images
是指定路径,
filename.jpg
是名称,如果您不希望自动生成具有路径的唯一id


如果您正在使用古老的方法来处理文件,希望它有助于

也要记住,例如:

 $request->pdf_file->move(storage_path(self::DIRECTORY), $fileName);
您应该使用更现代的:

 $file = $request->file('pdf_file');

因为此不推荐的方法本身会导致错误。(从5.5更新到6.0)

通过阅读laravel 6的文档。*您可以查看上传文件的信息,您可以使用
存储方法。
如果要在第一次运行时将文件存储在public或public_html中,请运行
php artisan供应商:publish
并在
config->filesystems.php
中定义新磁盘,例如名称为
public_local
,并将此磁盘的根目录设置为public address:

'public_local' => [
            'driver' => 'local',
            'root' => public_path(),
        ],
然后,为了将文件存储在此磁盘中,您可以使用为文件设置唯一名称的store方法,或使用自定义名称的storeas: 使用存储方法:

$path = $request->file('image_url')->store($imagePath, 'public_local');
我收到以下错误“SplFileInfo::getSize():C:\xampp\tmp\phpE84D.tmp的stat失败”

我是怎么解决的-

因为我将原始文件名保存在DB中,但我的DB列的大小为varchar 30,并且我上载的文件的文件名太长。因此,当我用较短的名称重命名文件时。上传了。然后我增加了我的专栏大小,我得到的是,这个错误消失了


因此,如果有人在文件上载代码中使用函数$image->getClientOriginalName()并将其保存到数据库中,则必须验证文件名或增加数据库列大小。

无法使其工作,因此我使用了Laravel 5.5中的旧方法,它仍然可以工作:

   $filenameWithExt = $request->file('image')->getClientOriginalName();
   $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
   $extension = $request->file('image')->getClientOriginalExtension();
   $fileNameToStore = $filename . '_' . time() . '.' . $extension;
   $path = $request->file('image')->storeAs('public/profile_images', 
   $fileNameToStore);
   $user->profile_image = $fileNameToStore;
   $user->save();

我也有同样的问题发生。作为一种解决方案,我只是将可为null的函数添加到表中

public function up()
{
    Schema::create('logos', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('favicon')->nullable();
        $table->string('homepage_logo')->nullable();
        $table->string('otherpage_logo')->nullable();
        $table->string('preloader')->nullable();
        $table->timestamps();
    });
}
LogoController.php

public function store(Request $request)
{
    $input = $request->all();
    if($request->has('favicon') || $request->has('homepage_logo') || $request->has('otherpage_logo') || $request->has('preloader')){

        $favicon = $request->file('favicon');

        $favicon_name =  time().'.'.$favicon->getClientOriginalName();

        $folder = 'empathy/adminpanel/assets/img/icon/';

        $favicon->move($folder, $favicon_name);

        $input['favicon']= $favicon_name;
    }
    Logo::create($input);
}

使用
extension()
方法而不是
getClientOriginalName()

SplFileInfo::getSize():stat对C:\xampp\tmp\phpC266失败。tmp
我仍然收到此错误。即使代码中不再有
getSize()
,请尝试使用本机php代码。$spl=new SplFileInfo($\u FILES['img']['name']);echo$spl->getSize();如果没有权限,则可能需要权限。可能会出现错误。
SplFileInfo::getSize():C:\xampp\tmp\php8009的stat失败。tmp
仍然存在相同的错误。我想知道是否有办法关闭此异常…您是否尝试增加php.ini文件中的upload_max_大小?嗨,为什么我们甚至需要getSize();我们不需要大小。不上传文件就无法上传。我试过了。我在寻找答案,发现如果你在
php.ini
文件中增加
upload\u max\u size
。这个错误将
public function store(Request $request)
{
    $input = $request->all();
    if($request->has('favicon') || $request->has('homepage_logo') || $request->has('otherpage_logo') || $request->has('preloader')){

        $favicon = $request->file('favicon');

        $favicon_name =  time().'.'.$favicon->getClientOriginalName();

        $folder = 'empathy/adminpanel/assets/img/icon/';

        $favicon->move($folder, $favicon_name);

        $input['favicon']= $favicon_name;
    }
    Logo::create($input);
}