Ce petit tutorial fait suite à la discussion sur le forum portant sur un patch permettant de faire fonctionner Menalto Gallery 2 cher Free.fr. Vous pouvez voir la discussion, télécharger le patch et le diff en vous rendant ici : http://galleryproject.org/node/64888.
Je vais essayer d'expliquer les modifications apportées par le patch en général.
Toutes les modifications ne sont pas de moi, lisez la discussion attachée au premier post, et consultez le fichier diff pour voir ce qui a été exactement modifié. Ces modifications sont essentiellement dûes au fait que les pages perso de Free fonctionnent en "safe mode on" et que certaines fonctions PHP sont interdites (cf. http://www.free.fr/assistance/947-acces-libre-php-fonctions-php-interdites.html).
"gallery2/.htaccess"
- Le fichier ".htaccess" à la racine de la galerie contient la ligne "php 1" pour utiliser le moteur PHP 5 de Free (Gallery utilise des fonctions non compatibles avec PHP 4). Il contient d'autres paramètres pour empêcher le listage des répertoires et protéger du téléchargement des fichiers sensibles.
"gallery2/modules/zipcart"
- J'ai ajouté une modification pour la fonction ZipCart (cf. http://galleryproject.org/node/41670) qui n'utilise pas l'exécutable "zip" (on ne peut pas chez Free) mais une bibliothèque PHP à la place. Je l'ai un peu améliorée.
"gallery2/modules/squarethumb" et
"gallery2/modules/squarethumb/classes/SquareThumbToolkit.class" en particulier
- Contient le patch de cbonar permettant d'économiser de la mémoire vive lors de la génération de vignettes carrées (la réduction de taille de l'image pour faire une vignette est faite avant le "crop").
set_time_limit()
- Un peu partout, j'ai rajouté "@" devant les appels à la fonction "set_time_limit()". Cette fonction est interdite chez Free et renvoie un warning. Elle permet normalement de dire que la page va être longue à charger lorsqu'il y a beaucoup de traitements à faire. Le fait de rajouter "@" devant permet de ne pas faire apparaître le warning et de continuer. Cela explique qu'il faut parfois charger plusieurs fois une page pour qu'elle fonctionne. La page n'a pas pu indiquer que son traitement était lourd.
"gallery2/gallery_remote2.php"
- J'ai ajouté un fichier "gallery_remote2.php" simulant une erreur 404 (fichier non trouvé) pour que Gallery Remote emploie le bon protocole pour communiquer avec la galerie si vous utilisez des messages d'erreur personnalisés. En effet, si vous renvoyez sur une autre page au lieu d'afficher l'erreur 404 lorsque Gallery Remote va chercher ce fichier, Gallery Remote va considérer le fichier existant et du coup tenter d'utiliser un ancien protocole de communication qui n'est plus utilisé avec Gallery 2.2. [1]
"gallery2/modules/core/classes/GalleryDataItem.class"
- J'ai enlevé la vérification qu'un appel à "$platform->copy()" s'était correctement déroulé. Cela posait problème à certaines implémentations du protocole de communication Gallery Remote.
"gallery2/install/steps/SystemChecksStep.class"
"gallery2/upgrade/steps/SystemChecksStep.class"
- J'ai forcé l'installation et l'upgrade à croire que le "safe mode" n'est pas activé. Il l'est chez Free et en principe, Gallery refuse de s'installer avec.
- J'ai supprimé lors de l'upgrade la vérification en écriture du répertoire de data. Sans que je l'explique, ça posait problème à certains utilisateurs.
"gallery2/modules/core/classes/GalleryPlatform.class"
- J'ai réécrit la fonction "tempnam()" et j'ai fait attention à appeler la fonction réécrite partout dans le fichier. La fonction fournie par le moteur PHP 5 de Free semble boguée.
- J'ai réécrit la fonction "rmdir()" car elle est interdite chez Free. A la place, je déplace les répertoires (il faut qu'ils soient vides) sur un répertoire temporaire quelconque (tout le temps le même), ça a le même effet qu'effacer les répertoires.
- J'ai rajouté "@" devant l'appel à la fonction "chmod()" et je force la fonction à toujours retourner "true" car elle est interdite chez Free et renvoie un warning. De cette façon, le warning n'apparaît pas et est ignoré.
"gallery2/modules/core/classes/GalleryTemplate.class"
- J'ai enlevé une vérification de fichier existant qui posait un problème de récursivité. Je ne me souviens plus de la cause exacte.
"gallery2/modules/core/classes/GalleryUrlGenerator.class"
"gallery2/modules/rewrite/classes/RewriteUrlGenerator.class"
- J'ai complété la fonction urlGenerator de façon à donner directement le chemin vers les images plutôt que de passer par une fonction PHP lourde qui les bufferise.
"gallery2/modules/core/DownloadItem.inc"
"gallery2/modules/watermark/DownloadItem.inc"
- J'ai réécrit la fonction "_sendFile()" pour envoyer directement les images et les films sans les bufferiser avec le PHP. Ca devrait être plus rapide sur les serveurs de Free.
"gallery2/install/index.php"
"gallery2/modules/core/CoreModuleExtras.inc"
- Lors de l'installation ou lors d'une mise à jour, aucun fichier ".htaccess" n'est créé dans le répertoire de stockage "g2data" et ses sous-répertoires afin de permettre l'accès direct à ce répertoire depuis le Web. Cette modification est nécessitée par la modification décrite précédemment.
"gallery2/lib/adodb/drivers/adodb-postgres7.inc.php"
"gallery2/lib/adodb/drivers/adodb-postgres64.inc.php"
"gallery2/modules/core/classes/GalleryStorage/PostgreSqlStorage.class"
- Lors des accès à la base de données, Gallery établit deux connexions, l'une pour les accès transactionnels et l'autre pour les accès non-transactionnels, si le pilote de base de données est transactionnel. Comme Free limite à une connexion simultanée par thread l'accès à la base de données PostgreSQL (mais curieusement ne limite pas le nombre d'accès simultanés en ce qui concerne MySQL), j'ai modifié les pilotes de Gallery pour utiliser la base de données en mode non transactionnel uniquement.
- A l'installation, une connexion supplémentaire à la base de données PostgreSQL était effectuée. J'ai fait en sorte d'utiliser la connexion déjà établie.
Barbrousse.