type = $type; } /** * Execute the job. * * @return void */ public function handle() { Log::info(sprintf('%s: Scanning [%s]',__METHOD__,$this->type)); // Go through DB and verify files exist $class = $this->getModelType($this->type); $good = $bad = $ugly = 0; $class::select('*')->each(function($o) use ($good,$bad,$ugly) { if (! file_exists($o->file_name_current(FALSE))) { Log::error(sprintf('Media doesnt exist: [%s] (%d:%s)',$this->type,$o->id,$o->file_name_current(FALSE))); $bad++; return; } if (($x=md5_file($o->file_name_current(FALSE))) !== $o->file_signature) { Log::error(sprintf('Media MD5 doesnt match DB: [%s] (%d:%s) [%s:%s]',$this->type,$o->id,$o->file_name_current(FALSE),$x,$o->file_signature)); $ugly++; return; } $good++; }); Log::info(sprintf('DB Media Verify Complete: [%s] Good: [%d], Missing: [%d], Changed: [%d]',$this->type,$good,$bad,$ugly)); // Go through filesystem and see that a record exists in the DB, if not add it. $parentdir = config($this->type.'.dir'); $good = $bad = 0; foreach ($this->dirlist($parentdir) as $dir) { foreach ($this->getFiles(['dir'=>$dir,'file'=>NULL],$this->type) as $file) { if (! $class::where('filename',$file)->count()) { $bad++; Log::error(sprintf('File not in DB: [%s] (%s)',$this->type,$file)); } else { $good++; } } } Log::info(sprintf('File Media Verify Complete: [%s] Good: [%d], Not In DB: [%d]',$this->type,$good,$bad)); } /** * Recursively get a list of dirs * @param $path * @return \Illuminate\Support\Collection */ private function dirlist($path) { $list = collect(); $list->push($path); foreach (glob($path.'/*',GLOB_ONLYDIR) as $dir) { foreach ($this->dirlist($dir) as $subdir) $list->push($subdir); } return $list; } }