public function scanPicture($scandir) { $this->info(""); if (!is_dir($scandir)) { $this->info("skip scan {$scandir}[" . json_encode(is_dir($scandir)) . "]"); return 0; } $count = 0; $scanned_directorys = array_values(array_diff(scandir($scandir), array('..', '.'))); $picture_info_array = array(); foreach ($scanned_directorys as $key => $filepath) { $filepath = $scandir . self::PATH_SEPERATOR . $filepath; $filepath = str_replace('\\', '/', $filepath); $this->info("process {$filepath}"); if (is_dir($filepath)) { $count += $this->scanPicture($filepath); } else { if (!$this->isImage($filepath)) { $this->info("skip not image file! {$filepath} !"); } else { // ignore exif_read_data(CIMG0147_副本.jpg): Illegal IFD size: x016C + 2 + x03E8*12 = x304C > x0184 $exif_data = @exif_read_data($filepath); if (isset($exif_data['DateTimeOriginal'])) { $datetime_original = DateTime::createFromFormat('Y:m:d H:i:s', $exif_data['DateTimeOriginal']); $created_at = $datetime_original->format('Y-m-d H:i:s'); } else { $created_at = date("Y-m-d H:i:s", filectime($filepath)); } // Log::debug('create_time = '.json_encode($created_at)); // Log::debug('exif_data = '.json_encode($exif_data)); // die; $md5 = md5_file($filepath); $title = basename($filepath, '.' . pathinfo($filepath)['extension']); $path = substr($filepath, strlen(storage_path())); $caption = ""; $picture_info_array[] = array('id' => $md5, 'name' => $title, 'path' => $path, 'created_at' => $created_at); $count += 1; } } } $this->info("found {$count} pictures in directory {$scandir}!"); if (0 == count($picture_info_array)) { return 0; } $ablum_info = array('title' => basename($scandir), 'tips' => basename($scandir), 'picture_id' => $picture_info_array[0]['id']); $ablum_info_real = tb_ablums::updateOrCreate(array('title' => $ablum_info['title']), $ablum_info)->toArray(); tb_ablum_picture::where('ablum_id', $ablum_info_real['id'])->delete(); $this->info("updateOrCreate ablum_info: " . $this->grab_dump($ablum_info)); $this->info("updateOrCreate tb_ablums: " . $this->grab_dump($ablum_info_real)); foreach ($picture_info_array as $picture_info) { $id = $picture_info['id']; $picture_info_real = tb_pictures::updateOrCreate(array('id' => $id), $picture_info)->toArray(); $this->info("updateOrCreate tb_pictures: " . $this->grab_dump($picture_info_real)); $ablum_picture_info_real = tb_ablum_picture::create(array('ablum_id' => $ablum_info_real['id'], 'picture_id' => $picture_info_real['id']))->toArray(); // $this->info("create tb_ablum_picture: ".$this->grab_dump($ablum_picture_info_real)); } $this->info(""); return $count; }
public static function getPicturesOfAblum($ablum_id, $page, $rows) { $query_builder = tb_ablum_picture::select()->where('ablum_id', $ablum_id); $total = $query_builder->count(); $offset = ($page - 1) * $rows; $items = $query_builder->orderBy('tb_ablum_picture.updated_at', 'desc')->leftJoin('tb_pictures', 'tb_pictures.id', '=', 'tb_ablum_picture.picture_id')->skip($offset)->take($rows)->get()->toArray(); // ->lists('picture_id'); Util::log_debug("sql=" . $query_builder->toSql()); Util::log_debug("pictures_of_ablum=" . json_encode($items)); return array('rows' => $items, 'count' => $total); }