[MOD] Hébergement sur plusieurs serveurs [MOD] Hébergement sur plusieurs serveurs
 

News:

cpg1.5.48 Security release - upgrade mandatory!
The Coppermine development team is releasing a security update for Coppermine in order to counter a recently discovered vulnerability. It is important that all users who run version cpg1.5.46 or older update to this latest version as soon as possible.
[more]

Main Menu

[MOD] Hébergement sur plusieurs serveurs

Started by Jaguar, June 21, 2006, 02:13:36 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Jaguar

Pourquoi tout simplement ne pas installer Coppermine et la base MySQL sur l'hébergeur pro de 300 Mo, et les photos sur un (ou plusieurs) site(s) Free ?
Pour ceci, il suffit de modifier ces lignes dans functions.inc.php :

$cheminsite1 = 'http://monsitefree1.free.fr/photos/albums/';
$cheminsite2 = 'http://monsitefree2.free.fr/photos/albums/';

if (    ($pic_row['filepath'] == 'album7/')        // Les photos de l'album 1 sur le Site 1.
     or ($pic_row['filepath'] == 'album3/')        // Les photos de Bruxelles sont sur Site 1.
     or ($pic_row['filepath'] == 'album5/')        // Les photos officielles de Bruxelles sont sur Site 1.
  { return $cheminsite1.path2url($pic_row['filepath']. $pic_prefix[$mode]. $pic_row['filename']);}
else
  { return $cheminsite2.path2url($pic_row['filepath']. $pic_prefix[$mode]. $pic_row['filename']);}

Titooy

Quote from: Jaguar on June 21, 2006, 02:13:36 PM
Pourquoi tout simplement ne pas installer Coppermine et la base MySQL sur l'hébergeur pro de 300 Mo, et les photos sur un (ou plusieurs) site(s) Free ?
Pour ceci, il suffit de modifier ces lignes dans functions.inc.php :

$cheminsite1 = 'http://monsitefree1.free.fr/photos/albums/';
$cheminsite2 = 'http://monsitefree2.free.fr/photos/albums/';

if (    ($pic_row['filepath'] == 'album7/')        // Les photos de l'album 1 sur le Site 1.
     or ($pic_row['filepath'] == 'album3/')        // Les photos de Bruxelles sont sur Site 1.
     or ($pic_row['filepath'] == 'album5/')        // Les photos officielles de Bruxelles sont sur Site 1.
  { return $cheminsite1.path2url($pic_row['filepath']. $pic_prefix[$mode]. $pic_row['filename']);}
else
  { return $cheminsite2.path2url($pic_row['filepath']. $pic_prefix[$mode]. $pic_row['filename']);}


Vous pouvez montrer un exemple de réalisation ? Comment faites-vous l'upload ? Comment faites-vous les miniatures ?

Jaguar

Il suffit de remplacer la ligne suivante (en gros vers la ligne numéro 1280) du fichier functions.inc.php :

        return $url_prefix[$pic_row['url_prefix']]. path2url($pic_row['filepath']. $pic_prefix[$mode]. $pic_row['filename']);

par mon morceau de code ci-dessus (en remplaçant les noms des sites et des albums par les votre).

Pour l'upload et les miniatures, voici comment je fais (il y aurait plus simple...) :

1 - En fait, je termine le morceau de code proposé par :
else
{ return $url_prefix[$pic_row['url_prefix']]. path2url($pic_row['filepath']. $pic_prefix[$mode]. $pic_row['filename']);}

Pour que si aucun test n'est positif, l'album sera local.

2 - Je faits l'upload et les miniatures sur un album local, normalement.

3 - Je copie l'album (le dossier qui contient les trois jpeg par image) sur le site externe.

4 - Je rajoute le test dans le morceau de code ci-dessus pour aiguiller les nouvelles photos sur le site externe.

J'ai un bel exemple de ce principe (un album à cheval, de façon transparente, sur trois sites), mais il est privé.

N'hésitez pas à me demander plus de détails...

Titooy

C'est pas mal mais la solution de flux donne le même résultat... et me semble demander moins de manipulations...

Mais merci quand-même... ça plaira peut-être plus à certains utilisateurs...

Jaguar

J'ai oublié l'étape 5 : j'efface les trois jpeg par image du site "local" (sans cette étape, tout ceci perdrait un peu de sens !).

Titooy

J'ai "splitté" cette discussion pour que ceux que ça intéressent puisse la retrouver plus facilement.

Jaguar

#6
J'ai eu un grand moment de doute... Je ne retrouvais plus notre discussion ???

La solution de Flux est rusée, mais elle me parait moins souple que la mienne :-X, qui a de plus un avantage (si j'ai bien compris comment Flux procédait...), c'est que plusieurs galeries Coppermine peuvent utiliser le même album sur un site "archive d'album". Ce qui est très pratique... Et j'ai l'impression que ceci n'est pas possible avec la méthode de Flux (j'ai d'ailleurs l'impression que les jpeg vignettes sont obligatoirement sur le site local (ce qui limiterait en fait la taille de l'album alors qu'avec la mienne, un particulier peut créer un seul album de 50000 photos 5M pixels sur 150 sites Free gratuits...).
[MAJ]Plus que 15 sites avec l'annonce de ce matin (les pages personnelles de Free passent à 10 Go) ;D .

En fait la mienne est vraiment très cool à maintenir dans mes cas où je rajoute souvent des nouveaux albums, mais très rarement des nouvelles photos dans un album déjà existant (ce serait par exemple le cas sur un site perso de photos de vacances).
Elle est très souple car elle me permet de déplacer chaque album en fonction du transit (sur des sites rapides mais chers pour ceux consultés souvent, et sur des sites lents et gratuits pour ceux consultés plus rarement).


sanlogik

Bonjour, j'avais une tite question :
j'ai une galerie Coppermine sur un hébergement pro de 5 Go mais celà ne suffira sans doute pas très longtemps et j'envisage de prendre un autre hébergeur (tout en gardant celui-là). Au passage, perso il est hors de question d'utiliser un espace Free pour héberger quoi que ce soit, pas envie de voir tous les fichiers supprimés du jour au lendemain sans aucun avertissement du jour au lendemain... n'oubliez pas qu'il est interdit de "stocker" sur les espaces Free.

Si j'utilise votre solution (bravo, au passage, lol), pourrais-je garder toutes les photos de mon hébergement actuel et utiliser en plus un autre hébergement sur la même galerie ?
En résumé, mon coppermine actuel pourra-t-il gérer les images situées sur le même hébergement que lui + d'autres images situées sur un autre hébergement ?
ou bien faudra-t-il tout déplacer vers le nouvel hébergement ? vaut mieux le savoir dès maintenant quand il y a encore peu d'images, lol
et concrètement celà a-t-il un impact quelconque sur la gestion des catégories, albums et images ?

merci d'avance  ;)

digimic

Peux tu faire un p"tit recap complet en fichier stp car j'ai pas tres bien compris comment procéder au juste et comment on s'en sert de ton mod..
merci d'avance

Flyz

Quote from: digimic on July 28, 2006, 05:51:42 PM
Peux tu faire un p"tit recap complet en fichier stp car j'ai pas tres bien compris comment procéder au juste et comment on s'en sert de ton mod..
merci d'avance

Oui sa serai sympa s'il vous plait. merci

arbrezhoneg

Idem, pourriez-vous faire un récapitulatif final des manipulations à faire.

Merci d'avance.

François Keller

La dernière visite de jaguar date du 21 Aout 2006. Esperons qu'il repasse par ici  pour vous répondre
Avez vous lu la DOC ? la FAQ ? et cherché sur le forum avant de poster ?
Did you read the DOC ? the FAQ ? and search the board before posting ?
Mon Blog

gandhi51

Le défaut de clarté m'a moi aussi handicapé. Je me suis alors jeté sur la solution de flux proposé par Titooy.
J'ai pu mettre en place facilement cette solution.

Quote from: Jaguar on June 22, 2006, 12:22:30 AM
Et j'ai l'impression que ceci n'est pas possible avec la méthode de Flux (j'ai d'ailleurs l'impression que les jpeg vignettes sont obligatoirement sur le site local (ce qui limiterait en fait la taille de l'album alors qu'avec la mienne, un particulier peut créer un seul album de 50000 photos 5M pixels sur 150 sites Free gratuits...

Effctivement, les jpeg sont en local avec la méthode de flux. Certe une limite technique apparaît. Je constate cependant que les miniatures et intermédiaires d'une cinquantaine de photo utilisent tout juste 1,5Mo d'espace (avec ma configuration). Avec mes 10Go d'espace, j'ai de la marge... Avis aux amateurs!
Sans douceur, pas de torture ?

arbrezhoneg

Quelqu'un pourrait-il m'aider pour revoir ce code pour la version 1.4.9, car j'ai cherché dans le fichier functions.inc.php et je n'ai pas trouvé :
return $url_prefix[$pic_row['url_prefix']]. path2url($pic_row['filepath']. $pic_prefix[$mode]. $pic_row['filename']);
mais :
$filepathname = $url_prefix[$pic_row['url_prefix']]. path2url($pic_row['filepath']. $pic_prefix[$mode]. $pic_row['filename']);

Je ne sais pas trop quoi faire, je n'y connais pas grand chose en PHP, j'ai bien des notions de programmation dans d'autres langages mais pas encore en PHP.

Il me semble que dans la version 1.4.9 la partie du code correspondante se situe plutot entre les lignes 1899 et 1993 (d'après une recherche de "$url_prefix" dans le fichier)

Merci d'avance à toute personne me venant en aide


arbrezhoneg

j'ai fait la modification pour la version 1.4.9.

Pour l'instant elle reste en phase de test, mais voici ce que j'ai fait :

dans le fichier functions.inc.php recherchez (vers les lignes 1890-1920):


function& get_pic_url(&$pic_row, $mode,$system_pic = false)
{
        global $CONFIG,$THEME_DIR;

        static $pic_prefix = array();
        static $url_prefix = array();

if (!count($pic_prefix)) {
                $pic_prefix = array(
                        'thumb' => $CONFIG['thumb_pfx'],
                        'normal' => $CONFIG['normal_pfx'],
                        'fullsize' => ''
                );

                $url_prefix = array(
                        0 => $CONFIG['fullpath'],
                );
        }

        $mime_content = cpg_get_type($pic_row['filename']);
        $pic_row = array_merge($pic_row,$mime_content);

        $filepathname = null;


à la suite je rajoute l'adresse des sites externes :

        $cheminsite1 = 'http://provostjulien.free.fr/albumtest/albums/';
$cheminsite2 = 'http://provostjulien.free.fr/albumtest/albums/';

(ici ce sont les mêmes, mais je ne me sers que du premier, mais comme ça le code est déjà prévu pour plusieurs serveurs externes.)

suivies du code :

if (    ($pic_row['filepath'] == '2005-10-08 Tour Eiffel/')        // ici c'est le nom du répertoire sur le ftp.
     or ($pic_row['filepath'] == 'Tour Eiffel/')         // ici le titre de l'album dans Coppermine.
     or ($pic_row['filepath'] == 'album7/')         // et comme lorsque je pointe sur cet album, l'adresse est ... album=7, je mets album7.
)
  { $filepathname = $cheminsite1.path2url($pic_row['filepath']. $pic_prefix[$mode]. $pic_row['filename']);}

elseif(   ($pic_row['filepath'] == 'album100/')        // ça ne sers à rien mais c'est pour prévoir l'utilisation de plusieurs serveurs externes
     or ($pic_row['filepath'] == 'album300/')         // ça ne sert toujours à rien
     or ($pic_row['filepath'] == 'album500/')         // et toujours pour rien
    )
  { $filepathname = $cheminsite2.path2url($pic_row['filepath']. $pic_prefix[$mode]. $pic_row['filename']);}

else
  { $filepathname = $url_prefix[$pic_row['url_prefix']]. path2url($pic_row['filepath']. $pic_prefix[$mode]. $pic_row['filename']);}

Pour l'instant, c'est ma première version, juste pour tester si les fichiers étaient bien lus sur le serveur externes.
C'est pour cela que je teste 3 fois le nom du répertoire, je verrai demain quel est le nom à mettre (soit le nom du dossier sur le ftp, soit le nom de l'album, soit album(i) avec i le nombre affiché dans la barre d'état lorsque l'on pointe sur l'album)

Toujours est-il que cela fonctionne à merveille.

Je terminerai donc ce code demain ou après-demain, et posterai un message plus détaillé avec un exemple bien concret.




Jaguar

Quote from: digimic on July 28, 2006, 05:51:42 PM
Peux tu faire un p"tit recap complet en fichier stp car j'ai pas tres bien compris comment procéder au juste et comment on s'en sert de ton mod..
merci d'avance
Bonjour, me voici de retour...
Je n'étais pas notifié par emails des nouveaux posts dans cette discussion. Je me demande si cela n'est pas du au fait que ce sujet a été créé en splitant le sujet initial...

Je vais détailler la procédure...

François Keller

Bonjour,

QuoteJe vais détailler la procédure...

Que voilà une idée qu'elle est bonne  :D :D :D
Avez vous lu la DOC ? la FAQ ? et cherché sur le forum avant de poster ?
Did you read the DOC ? the FAQ ? and search the board before posting ?
Mon Blog

arbrezhoneg

Quote from: Jaguar on October 12, 2006, 12:15:44 AM
Bonjour, me voici de retour...
Je n'étais pas notifié par emails des nouveaux posts dans cette discussion. Je me demande si cela n'est pas du au fait que ce sujet a été créé en splitant le sujet initial...

Je vais détailler la procédure...
Merci d'avoir répondu à ma demande (aux autres : suffisait de lui envoyer un message pour gentiment lui demander de revenir faire un tour sur ce forum ;-))

Sur quelle version travailles-tu? (pas la 1.4.9, il me semble, mais je peux me tromper)
Regarde ma proposition (3 posts en dessus) et dit moi si ça correpond à ce que tu avais fait. J'ai modifié car il me semble que ce que tu avais fait ne correspondait pas pour la version 1.4.9 (c'est juste une proposition en phase de test)
Aussi tu pourras sans doute me dire rapidement lequel des 3 test je dois faire (cf mon post précédent toujours).

arbrezhoneg

Voilà, j'ai fini mes tests.

Donc voici le résumé de la modification à faire (version 1.4.9).

Dans le fichier functions.inc.php recherchez (vers les lignes 1890-1920):


function& get_pic_url(&$pic_row, $mode,$system_pic = false)
{
        global $CONFIG,$THEME_DIR;

        static $pic_prefix = array();
        static $url_prefix = array();

if (!count($pic_prefix)) {
                $pic_prefix = array(
                        'thumb' => $CONFIG['thumb_pfx'],
                        'normal' => $CONFIG['normal_pfx'],
                        'fullsize' => ''
                );

                $url_prefix = array(
                        0 => $CONFIG['fullpath'],
                );
        }

        $mime_content = cpg_get_type($pic_row['filename']);
        $pic_row = array_merge($pic_row,$mime_content);

        $filepathname = null;


à la suite ajoutez l'adresse des sites externes :

        $cheminsite1 = 'http://provostjulien.free.fr/albumtest/albums/';
$cheminsite2 = 'http://www.unautresite.fr/unrepertoire/';

(ici ce sont les mêmes, mais je ne me sers que du premier, mais comme ça le code est déjà prévu pour plusieurs serveurs externes.)
Donc on rajoute ici autant de site que l'on veut en continuant la numérotation de cheminsite.

après les adresses des serveurs ajoutez le code permettant de faire les tests en fonction des nom d'albums :

if (    ($pic_row['filepath'] == '2005-10-08 Tour Eiffel/')        // ici c'est le nom du répertoire sur le ftp.
     or ($pic_row['filepath'] == 'blabla1/')         // ici c'est le nom d'un autre répertoire sur le ftp (il n'existe pas, mais c'est pour prévoir le cas avec plusieurs albums).
     or ($pic_row['filepath'] == 'blabla2/')         // et encore un autre (qui n'existe pas non plus).
)
  { $filepathname = $cheminsite1.path2url($pic_row['filepath']. $pic_prefix[$mode]. $pic_row['filename']);}

elseif(   ($pic_row['filepath'] == 'album100/')        // ça ne sers à rien mais c'est pour prévoir l'utilisation de plusieurs serveurs externes
     or ($pic_row['filepath'] == 'album200/')         // ça ne sert toujours à rien
     or ($pic_row['filepath'] == 'album300/')         // et toujours pour rien
    )
  { $filepathname = $cheminsite2.path2url($pic_row['filepath']. $pic_prefix[$mode]. $pic_row['filename']);}

else
  { $filepathname = $url_prefix[$pic_row['url_prefix']]. path2url($pic_row['filepath']. $pic_prefix[$mode]. $pic_row['filename']);}

Dans cette on fait un test en fonction du nom de répertoire qu va être appelé, et on affecte la valeur de filepathname en conséquence.
Le test se fait sur le nom du répertoire sur le serveur FTP, pas sur le nom de l'album dans Coppermine.
Il suffit donc de rajouter une ligne dans le test pour chaque album présent sur un serveur externe, et de rajouter un bloc "elseif" pour chaque nouveau serveur externe.
Le bloc else affecte la valeur par défaut à file pathname dans le cas où l'album se trouve en local. Donc si on n'utilise pas de serveurs externes, le code marche également sans problème, sans avoir à lui spécifier les albums en local.

Donc niveau utilisation, il faut donc rajouter l'ensemble du code ci dessus dans le fichier dessus et y déclarer les noms de vos albums et serveurs externes.
Pour mettre un album sur le serveur externe, il faut donc tout d'abord le mettre sur le serveur ou se trouve Coppermine, puis créer les vignettes et les images réduites. Ensuite, il suffit de coupier le dossier concerné depuis le serveur où se trouve Coppermine (dans mon cas .../Album2/albums/nomdu répertoire) et de le mettre sur le serveur externe (dans mon cas .../albumtest/albums).

L'avantage de cette solution est qu'elle nécessite peut de place sur le serveur ou est installé Coppermine (juste de quoi l'installer et de quoi mettre un répertoire de photo temporairement) et le reste des photos peut être stocké sur un autre serveur. Ainsi, on peut choisir un hébergeur de meilleure qualité pour la partie Coppermine, pour exécuter rapidement les commandes PHP et les requêtes SQL, sans avoir la nécessité d'un gros espace d'hébergement; et stocker les photos sur un hébergeur de plus grosse capacité mais de moins bonne qualité au niveau PHP et SQL. De plus, on peut y ajouter plusieurs serveurs et obtenir un espace de stockage confortable (10Go par site chez free par exemple).

Voici mon exemple http://provost.julien.free.fr/Album2/, la gelerie Tour Eiffel se trouve sur un autre site free (provostjulien.free.fr au lieu de provost.julien.free.fr, je précise car la différence n'est pas flagrante). La seule différence que l'on peut noter par rapport aux autres albums c'est l'adresse indiquée lorsque que l'on fait un clic droit sur la photos pour regarder leurs propriétés.

Je pense continuer à travailler un peu sur ce code pour simplifier l'ajout de serveur et d'albums. J'aimerai faire un code qui regarde sur les différents serveurs proposés (en commançant par le local) et qui choisit le serveur en fonction de l'endroit ou se trouve le dossier. Je pense que c'est faisable, mais je ne connait pas suffisament le langage PHP pour exécuter une recherche de répertoire sur un serveur FTP donné. Donc si il y a des personnes qui peuvent m'aider, nh'ésitez surtout pas, et envoyé moi un message privé.
Je pense voir ça ce week-end.

arbrezhoneg

Petite modification.
A la fin, au lieu d'écire :

else
  { $filepathname = $url_prefix[$pic_row['url_prefix']]. path2url($pic_row['filepath']. $pic_prefix[$mode]. $pic_row['filename']);}

Il faut écrire :

else
  { $filepathname = null;}


Comme ça c'est encore plus simple. Sinon il y avait un problème avec l'affichage de la vignette des albums vides (elle ne s'affichait pas, il y avait une barre noire à la place), et comme ça tout marche très bien.
En fait cela parait logique, avant la modification le code était : filepathname = null;

Maintenant je vais voir pour faire un test sur les noms de dossiers, comme indiqué dans le précédent post.
Bonne jounée à tous.