#!/usr/bin/env php sizing->ideal_size)) { throw new RuntimeException('Piwigo-Galeriederivat ist nicht konfiguriert.'); } $gallery_params = clone $standard_gallery; $gallery_params->sizing = new SizingParams( array( (int)$standard_gallery->sizing->ideal_size[0], (int)$standard_gallery->sizing->ideal_size[1], ), 0, null ); $gallery_params->type = IMG_THUMB; $gallery_params->use_watermark = false; $images = 0; $generated_or_ready = 0; $identity = 0; $metadata_repaired = 0; $legacy_derivatives_rebuilt = 0; $errors = 0; $error_lines = array(); $result = pwg_query('SELECT * FROM '.IMAGES_TABLE.' ORDER BY id'); while ($row = pwg_db_fetch_assoc($result)) { $image_id = (int)$row['id']; $info = bratonien_tools_webdav_image_source_info($image_id); if (!$info || (int)$info['connection_id'] !== $connection_id) continue; $images++; $preview = bratonien_tools_webdav_preview_path($info); if (!$preview) { $errors++; $error_lines[] = 'Bild #'.$image_id.': vorbereitetes WebDAV-Preview fehlt.'; continue; } $preview_ext = strtolower(pathinfo($preview, PATHINFO_EXTENSION)); if (!in_array($preview_ext, array('jpg', 'jpeg', 'png', 'gif'), true)) { $errors++; $error_lines[] = 'Bild #'.$image_id.': Preview-Format '.$preview_ext.' ist nicht Piwigo-kompatibel; Precache muss neu erzeugt werden.'; continue; } $size = @getimagesize($preview); if (!is_array($size) || empty($size[0]) || empty($size[1])) { $errors++; $error_lines[] = 'Bild #'.$image_id.': Preview ist kein lesbares Bild: '.$preview; continue; } $preview_width = (int)$size[0]; $preview_height = (int)$size[1]; if ((int)($row['width'] ?? 0) !== $preview_width || (int)($row['height'] ?? 0) !== $preview_height || (int)($row['rotation'] ?? 0) !== 0) { pwg_query( 'UPDATE '.IMAGES_TABLE. ' SET width='.$preview_width.', height='.$preview_height.', rotation=0'. ' WHERE id='.$image_id ); $row['width'] = $preview_width; $row['height'] = $preview_height; $row['rotation'] = 0; $metadata_repaired++; } $src = new SrcImage($row); try { $probe = new DerivativeImage($gallery_params, $src); if ($probe->same_as_source()) { $identity++; continue; } $target = $probe->get_path(); if ($target !== '' && is_file($target) && is_readable($target)) { $expected_size = $gallery_params->compute_final_size(array($preview_width, $preview_height)); $existing_size = @getimagesize($target); if ( is_array($expected_size) && isset($expected_size[0], $expected_size[1]) && is_array($existing_size) && isset($existing_size[0], $existing_size[1]) && ((int)$existing_size[0] !== (int)$expected_size[0] || (int)$existing_size[1] !== (int)$expected_size[1]) ) { if (!@unlink($target)) { $errors++; $error_lines[] = 'Bild #'.$image_id.' Galerie: falsches Alt-Derivat konnte nicht entfernt werden: '.$target; continue; } $legacy_derivatives_rebuilt++; } } $detail = ''; if (bratonien_tools_webdav_generate_derivative($gallery_params, $src, $detail)) { $generated_or_ready++; } else { $errors++; $error_lines[] = 'Bild #'.$image_id.' Galerie: '.($detail !== '' ? $detail : 'Galeriederivat konnte nicht erzeugt werden.'); } } catch (Throwable $e) { $errors++; $error_lines[] = 'Bild #'.$image_id.' Galerie: '.get_class($e).': '.$e->getMessage(); } } if ($metadata_repaired > 0) { update_category('all'); invalidate_user_cache(true); } if ($errors > 0) { foreach (array_slice($error_lines, 0, 30) as $line) { fwrite(STDERR, $line."\n"); } if (count($error_lines) > 30) { fwrite(STDERR, 'Weitere Fehler: '.(count($error_lines) - 30)."\n"); } } echo 'WebDAV-Derivative-Builder: version='.BRATONIEN_WEBDAV_DERIVATIVE_BUILDER_VERSION. ' bilder='.$images. ' varianten=1'. ' bereit='.$generated_or_ready. ' identisch='.$identity. ' metadaten_repariert='.$metadata_repaired. ' alt_derivate_neu='.$legacy_derivatives_rebuilt. ' fehler='.$errors."\n"; exit($errors > 0 ? 1 : 0); } catch (Throwable $e) { fwrite(STDERR, 'WebDAV-Derivate: '.get_class($e).': '.$e->getMessage()."\n"); exit(1); }