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