Piwigo je open source PHP aplikace pro fotogalerii. Kromě fotografií umí uložit (a někdy i zobrazit) i jiné formáty. Poté, co byla zhybernovaná Menalto Gallery a prakticky ukončený její vývoj, Piwigo začíná nabírat stále více uživatelů. Oproti Menalto Gallery má Piwigo jednu výhodu. Její hlavní vývojář provozuje komerční službu piwigo.com, která běží na tomto opensource softwaru a nabízí provoz galerie jako službu.
Virtuální vs fyzická alba
Piwigo umí spravovat data ve dvou poměrně odlišných strukturách. První jsou virtuální alba (v adresáři /upload/), ve kterých adresářová hiearchie pro uložení souborů odpovídá datumu jejich pořízení a názvy souborů jsou odvozeny z timestampu a náhodného řetězce nebo možná sumy souboru (příklad: upload/2014/01/13/20140113180811-2c53fe2d.jpg). Alba u virtuálních alb se určují pouze záznamem v SQL databázi. Správa souborů - upload, přesun apod. je plně v kompetenci Piwiga.
Druhou možností jsou fyzická alba (adresář /galleries/), při kterých je na uživateli, aby sám vytvářel strukturu adresářů (=alb) a do nich nějakým způsobem (FTP, SCP, ...) zapisoval data. Piwigo v tomto případě neprovádí žádné změny v těchto souborech a adresářích. I o tom, že jste něco přidali, se Piwigo dozví, až když provedete ruční synchronizaci (Quick Sync z admin homepage nebo Synchronizace v admin menu). Při synchronizaci si Piwigo znovu ošahá soubory a adresáře a přidá nebo odebere položky z databáze.
Výhody fyzických alb: adresářová struktura kdykoliv exportovatelná (ovšem bez metadat) pouhým zkopírováním, možnost rsyncu s vlastním úložištěm jinde, upload více adresářů/alb najednou
Výhody virtuálních alb: ke správě stačí browser bez pluginů (formulář pro upload je poměrně zdařilý), bez synchronizačního kroku, obsáhlejší možnosti správy v Piwigo, zachování metadat souborů při přesunu či přejmenování alba, fotografie mohou být ve více albech zároveň
Z fyzických alb na virtuální lze zmigrovat poměrně jednoduše pomocí oficiálního Virtualize pluginu (jen pozor na práva souborů a adresářů v /galleries/).
Z virtuálních alb na fyzická je to o něco složitější, ale je to možné - viz fórum. Upravenou verzi skriptu najdete i tady.
Osobně by mi nejvíc vyhovoval nějaký hybridní systém, při kterém by bylo možné použít všechny (nebo většinu) možností virtuálních alb a zároveň mít souborovou strukturu založenou na jménech alb. Ale z uvedených možností mi více vyhovují virtuální alba, tudíž jsem vše zmigroval a zakázal synchronizaci.
Moje oblíbené moduly
- Admin tools
- Automatic Size
- Batch Downloader
- Exif View
- Extended Descriptions
- Fotorama
- gdThumb
- LocalFiles Editor
- Media Icon
- Reset Manual Order
- Rotate Image
- VideoJS
Jak na migraci z Gallery2
- zjistit oprávnění alb v G2 - modul pro migraci nepřevádí uživatele, skupiny ani oprávnění!
- základní konfigurace Piwigo
- zapnout synchronizaci v configu
- pokud se objeví PHP chyby s exifem, dočasně vypnout Exif View
- zapnout Menalto2Piwigo, Extended Descriptions a Virtualize moduly
- zkopírovat obsah G2 albums do /galleries/ (může být i část - vybrané adresáře)
- pokud jsou některé fotky špatně otočené, teď je nejlepší čas na opravu (viz níže)
- nastavit práva: cd galleries; find . -type d -exec chmod 777 {} \;; find . -type f -exec chmod 666 {} \;
- pokud je třeba, vyřešit import řazení alb - viz níže
- piwigo admin - quick sync (projdou se adresáře a soubory v galleries a naplní se databáze)
- piwigo admin - plugins - Menalto2Piwigo - import dat z G2 databáze
- piwigo admin - albums - manage - permissions
- piwigo admin - plugins - Virtualize a zkontrolovat, že v galleries nezůstal žádný soubor
- vypnout plugin Menalto2Piwigo a Virtualize
- případně vypnout synchronizaci v configu
- nastavit oprávnění pro jednotlivá alba
Jak na špatně otočené fotky
V rámci migrace jsem objevil větší množství fotografíí, které byly sice otočené (lossless), ale bez úpravy Orientation EXIF tagu. Většina softwaru fotky automaticky otáčí právě podle tohoto tagu, takže dojde k dalšímu otočení a fotografie jsou na bok. V rámci opravy fotek jsem si vyrobil dva skripty.
První skript (foto-copy-rotated.sh) projde adresář zadaný ve skriptu a všechny fotky, které nemají orientaci top-left (byly vyfoceny "jinak") zkopíruje do jiného adresáře (všechny do jednoho) a odstraní z nich Orientation tag. Fotografie v cílovém adresáři, které se zobrazují i s automatickým otočením správně, je potřeba editovat (což dělá druhý skript).
Druhý skript (foto-unrotate.sh) vezme soubor, který je mu zadán pomocí parametru, a změní v něm Orientation tag na top-left. Mění přímo zdrojové soubory, ale nešahá na ty, které mají standardní orientaci nebo které tag neobsahují. Pracuje vždy pouze s jediným souborem.
Nejjednodušší postup je pomocí prvního skriptu zjistit, ve kterých adresářích se nachází špatně otočené fotky, a na soubory v těchto adresářích poslat pomocí findu druhý skript:
find ADRESAR -type f -iname "*.jpg" -exec foto-unrotate.sh {} \;
případně hromadně pro více adresářů:
for I in ADRESAR1 ADRESAR2; do find $I -type f -iname "*.jpg" -exec foto-unrotate.sh {} \;; done
Řazení alb po migraci z G2
Plugin pro migraci do Piwiga přepisuje většinu informací. Týká se to i sloupce g2_ItemAttributesMap.g_orderWeight, který v G2 slouží k ručnímu řazení. Bohužel už se neimportují informace o automatickém řazení podalb, zčásti proto, že to Piwigo neumí (automaticky řadit lze pouze soubory v albech). Výsledkem je to, že podalba jsou po migraci do Piwigo řazena podle hodnot, které se v G2 nepoužívaly.
Jak jsem si s tím poradil:
1. Napsal jsem tento PHP skript, který projde adresářovou strukturu původně z G2 a změní mtime/ctime u jejích adresářů/alb na základě data z G2 databáze (= času nastaveného u alb).
2. Přepsal jsem Piwigo get_fs_directories funkci v admin/include/functions.php, která vytváří strukturu v databázi na základě adresářové struktury a která po opatchování respektuje mtime. Po importu s tímto patchem jsou tedy alba řazená podle mtime původních adresářů.
3. Zakomentoval jsem všechny čtyři řádky obsahující "rank" v piwigo/plugins/menalto2piwigo/admin.php, díky čemuž nedojde k importu (nepoužívaného ručního) řazení z G2. Naimportují se pouze ostatní metadata.
Cross-reference: Piwigo Forum - Migrating from gallery 2 to piwigo
Apache konfigurace a bezpečnost
Piwigo pro některá data (především originály) používá přístup přes vlastní "PHP proxy". Soubory v tomto případě načítá PHP a pak je zobrazuje uživateli - nemusí být přímo přístupné pomocí Apache. V tomto PHP kódu je pak možné zároveň ošetřit autentizaci. Naopak deriváty (náhledy) tímto způsobem chránit neumí, stejně jako třeba videa, která pro online překrávání také musí být přímo přístupné. V tomto případě pouze stačí znát URL adresu a uživatel si může tato data stáhnout i bez autentizace. Rozdíly v URL viz následující příklady:
- přímo přístupný náhled fotografie: http://jackc.teptin.net/galerie/_data/i/upload/2006/05/14/200605141234567-2ac57341-me.jpg
- originál fotografie servírovaný přes PHP kód s autentizací: http://jackc.teptin.net/galerie/action.php?id=12345678&part=e
Pomoci tomu můžeme následující Apache konfigurací:
<DirectoryMatch "/dir/to/piwigo/upload/.*/pwg_representative/.*"> Order deny,allow Allow from all </DirectoryMatch> <Directory "/dir/to/piwigo/upload"> Order Allow,Deny Deny from all SetEnvIfNoCase Request_URI \.(og[gv]|mp4|m4v|webm|avi)$ no-gzip dont-vary AddType video/ogg .ogv AddType video/mp4 .mp4 AddType video/webm .webm AddType video/x-msvideo .avi <FilesMatch "\.(?:mp4|m4v|avi|mov)$"> Order deny,allow Allow from all </FilesMatch> </Directory>
Náhledy alb
Pokud se z nějakého důvodu stane, že mají alba špatné (např. stejné) náhledy, lze je vyresetovat následujícím postupem:
- (případně) nastavit v cfg: $conf['allow_random_representative'] = true;
- SQL příkaz: UPDATE piwigo_categories SET representative_picture_id=NULL
- Admin - Tools - Maintenance: Update album information
Ostatní
- pro odstranění .php z URL bylo třeba upravit /etc/mime.types (odkomentovat application/x-httpd-php)
- blog o migraci z G2 na Piwigo: http://blog.dragonsoft.us/category/piwigo/
- něco o case sensitivity v picture_ext and file_ext
- VideoJS a srcnotfound v "clean URLs" konfiguraci (fixed)
- pro zjištění oprávnění pro jednotlivá alba je možné použít tento skript
- skript pro zobrazení náhodné fotky, např. pro externí web
- tento perl skript od plg umí hromadně generovat chybějící náhledy (parametry se nastavují v příkazové řádce: --url=... --username=... --password=...)
Moje konfigurace
Konfiguraci je možné měnit pomocí Piwigo admin - plugins - LocalFiles Editor.
<?php // clean URL $conf['question_mark_in_urls'] = false; $conf['php_extension_in_urls'] = false; $conf['category_url_style'] = 'id-name'; $conf['picture_url_style'] = 'id-file'; // other $conf['show_php_errors'] = ''; $conf['guest_access'] = false; $conf['original_url_protection'] = 'images'; $conf['sync_chars_regex'] = '/^[a-zA-Z0-9-_.&, !]+$/'; $conf['calendar_show_any'] = false; $conf['calendar_show_empty'] = false; $conf['newcat_default_commentable'] = false; $conf['newcat_default_status'] = 'private'; //$conf['allow_web_services'] = false; - po vypnuti nejde editovat uzivatele $conf['enable_synchronization'] = false; $conf['inheritance_by_default'] = true; $conf['upload_form_all_types'] = true; $conf['allow_random_representative'] = true; //$conf['display_fromto'] = true; $conf['picture_ext'] = array('jpg','JPG','jpeg','JPEG','png','PNG','gif','GIF'); $conf['file_ext'] = array_merge($conf['picture_ext'], array('tiff','TIFF','tif','TIF','mp3','MP3','mp4','MP4','zip','ZIP','pdf','PDF','doc','DOC','xls','XLS','odt','ODT')); $conf['my_url'] = 'http://www.myweb.net/foto'; $conf['links'] = array( $conf['my_url'].'/index/favorites' => array ('label' => 'Oblíbené', 'new_window' => false), $conf['my_url'].'/index/recent_cats' => array ('label' => 'Poslední alba', 'new_window' => false), $conf['my_url'].'/search.php' => array ('label' => 'Vyhledat', 'new_window' => false), ); $conf['show_exif_fields'] = array( 'Make', 'Model', 'ExifVersion', 'Software', 'DateTimeOriginal', 'FNumber', 'ExposureBiasValue', 'FILE;FileSize', 'ExposureTime', 'Flash', 'ISOSpeedRatings', 'FocalLength', 'FocalLengthIn35mmFilm', 'WhiteBalance', 'ExposureMode', 'MeteringMode', 'ExposureProgram', 'LightSource', 'Contrast', 'Saturation', 'Sharpness', 'channel', 'date_creation', 'display_aspect_ratio', 'duration', 'filesize', 'format', 'frame_rate', 'latitude', 'longitude', 'make', 'model', 'playtime_seconds', 'sampling_rate', 'type', 'resolution', ); ?>