Aller au contenu

Afficher images avec chemin serveur absolu ?


jl83

Sujets conseillés

Bonjour à tous,

Je suis confronté au problème suivant (je précise que je suis sur un serveur dédié qui héberge de nombreux sites) :

Sur un site, j'ai besoin d'afficher des images qui se trouvent dans un répertoire correspondant à un autre site (donc au-dessus de la racine du site). En clair, mon image se trouve dans le répertoire

/home/SITE1/domains/site1.com/public_html/images/image.png

et je dois afficher cette image sur une page qui se trouve dans le répertoire

/home/SITE2/domains/site2.com/public_html/index.php

Pour exécuter des fonctions PHP sur le fichier image (comme getimagesize), ça ne pose pas de problème d'utiliser le chemin absolu (/home/...)

Par contre, pour afficher l'image avec

<img src="/home/SITE1/domains/site1.com/public_html/images/image.png">

ça ne marche pas !

Je sais que je pourrais utiliser le chemin HTTP en faisant

<img src="http://www.site1.com/images/image.png">

mais l'objectif est précisément de ne pas surcharger Apache, car ce type d'opération est effectué des milliers de fois sur un grand nombre de sites, et du coup mon serveur rame complètement. Je souhaiterais donc pouvoir faire un accès direct au fichier, sans passer par HTTP.

J'ai tourné le problème dans tous les sens, ça refuse de fonctionner !

Merci d'avance de vos pistes !

Jean-Luc

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Par contre, pour afficher l'image avec

<img src="/home/SITE1/domains/site1.com/public_html/images/image.png">

ça ne marche pas !

Je sais que je pourrais utiliser le chemin HTTP en faisant

<img src="http://www.site1.com/images/image.png">

mais l'objectif est précisément de ne pas surcharger Apache, car ce type d'opération est effectué des milliers de fois sur un grand nombre de sites, et du coup mon serveur rame complètement. Je souhaiterais donc pouvoir faire un accès direct au fichier, sans passer par HTTP.

Il n'y a aucune différence de charge serveur entre les deux types d'affichage. La conversion de /images/image.png en http://www.ton_site.com/images/image.png est faite par le navigateur et non par le serveur.

Jean-Luc

Lien vers le commentaire
Partager sur d’autres sites

En fait, je n'en fais pas grand chose si ce n'est les afficher, et éventuellement en déterminer la taille.

Par contre, une même photo est affichée sur de nombreux sites distincts, alors qu'elle est stockée dans un seul répertoire.

J'imagine donc qu'il doit y avoir des solutions pour réduire la charge de mon serveur ?

Lien vers le commentaire
Partager sur d’autres sites

C'est un dédié 4 coeurs et 8 Go de RAM. Mais c'est vrai qu'il y a beaucoup de sites dessus (plus de 1000). Et vu que le contenu de la plupart des sites utilise une base de données partagées, ainsi que des images partagées, je me dis qu'il y a quelque chose à faire pour réduire la charge, qui devient critique depuis quelques semaines.

Lien vers le commentaire
Partager sur d’autres sites

Tu es certain que ce sont les appels images qui sont responsables de ta charge serveur ?

Parce qu'à priori ça ne devrait impacter que la bande passante.

Tu peux me donner plus de précisions sur les traitements que tu fais pour déterminer leurs tailles ?

Lien vers le commentaire
Partager sur d’autres sites

A vrai dire, je ne suis certain de rien...

Pour la taille, j'utilise un filesize. Par contre il y a aussi une fonction de création d'un filigrane (donc des getimagesize, imagecreatefromjpeg, imagettftext et imagejpeg).

Maintenant je ne certifie pas que les images soient la cause principale de la charge, par contre c'est vrai qu'il y a énormément d'images qui s'affichent en permanence.

Lien vers le commentaire
Partager sur d’autres sites

A vrai dire, je ne suis certain de rien...
Utiliser des fonctions qui traitent des images est beaucoup plus lourd pour le serveur que le simple affichage de ces images.

Pour le reste, si tu veux optimiser les choses, il faut commencer par comprendre. Sans cela, ce n'est pas de l'optimisation, mais un jeu de hasard. :whistling:

Jean-Luc

Lien vers le commentaire
Partager sur d’autres sites

Pour la mise en cache, ça se fait via un module Apache spécifique ?

Pas nécessairement, mais faudra mettre un peu les mains dans le cambouis.

Personnellement, si tes images sont toutes dans le même répertoire, je ferais une règle de redirection qui les renverrait toutes vers un fichier unique.

Ce fichier vérifierait l'existence d'une image retravaillée dans son répertoire de cache.

Si elle n'est pas présente, il la crée avec le filigrane et m'enregistre.

Ensuite, il affiche le contenu de l'image du cache.

A part la règle de réécriture, qui dépendra vraiment de l'organisation de tes répertoires, ça n'a rien de sorcier.

Lien vers le commentaire
Partager sur d’autres sites

Je suis d'accord avec toi, mais même si on sait que telle ou telle fonction utilise davantage de ressources, il n'est pas évident de déterminer, à partir d'une charge serveur donnée, quelle est l'origine exacte d'une surcharge, d'autant que les paramètres sont nombreux et évolutifs...

Et tant que tout va bien, on se pose moins de questions... notamment dans l'utilisation des fonctions dont on a besoin.

Lien vers le commentaire
Partager sur d’autres sites

Pas de problème pour le cambouis...

Je vais étudier cela, sachant que les images ne sont pas toutes dans un même répertoire, loin de là même ! C'est du genre clients/1234/annonce/123456/... donc en gros des milliers de répertoires. Le plus simple serait donc peut-être de créer l'image "filigranée" en même temps que l'upload de l'image... et ce serait uniquement cette image qui serait utilisée ?

Lien vers le commentaire
Partager sur d’autres sites

Salut Jean-Luc,

Tu ne m'avais nullement cité le fait que tu créais un filigrane à la volée :)

Ne cherche pas plus loin... ton problème vient de là !

Lien vers le commentaire
Partager sur d’autres sites

En effet, j'avais complètement oublié... et en effet, la mise en place correspond à peu près à l'augmentation plus régulière de la charge !

Je suis en train de faire une modif, afin que le filigrane ne soit créé qu'une seule fois, lors du premier affichage de chaque photo. La contrepartie, c'est que ça va augmenter sensiblement l'espace disque, car j'enregistre les photos filigranées... et j'ai un filigrane pour chaque langue, donc en tout 7 photos à la place d'une seule ! Mais bon, j'ai de la marge donc ça va.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...