Jump to content
Sign in to follow this  
jl83

Afficher images avec chemin serveur absolu ?

Rate this topic

Recommended Posts

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

De plus, un navigateur ne pourra jamais afficher un chemin serveur qui lui est caché : tes réglages serveur vont faire que ton domaine pointera sur "/home/SITE1/domains/site1.com/", et nulle part ailleurs.

Share this post


Link to post
Share on other sites

Merci pour vos réponses ! Il va donc falloir que je trouve autre chose pour réduire la charge...

Share this post


Link to post
Share on other sites

Qu'est-ce que tu fais précisément de ces images avant de les afficher ?

Si tu fais des traitements GD, tu pourrais envisager une solution de cache, non ?

Share this post


Link to post
Share on other 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 ?

Share this post


Link to post
Share on other sites

A moins de mettre en cache les photos sur les sites distants, tu n'en as pas, non.

Tu as combien d'appels/jour sur ces images ?

Share this post


Link to post
Share on other sites

Pas évident de le savoir précisément, mais plusieurs dizaines voire plusieurs centaines.

Share this post


Link to post
Share on other sites

Non non, c'est pour chaque image. Toutes images confondues ça doit faire plusieurs dizaines de milliers par jour.

Share this post


Link to post
Share on other sites

Après, ça dépend de comment est dimensionné ton serveur. C'est du dédié ou du mutualisé ?

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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 ?

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Ha, le filigrane peut être à l'origine de tout ça, si tu le fais à la volée !

Il ne te reste plus qu'à mettre les images générées par GD en cache, tu allègeras déjà pas mal ton serveur.

Share this post


Link to post
Share on other sites

Oui, il est effectivement fait à la volée :(

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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 ?

Share this post


Link to post
Share on other 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à !

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Les sites qui affichent les images sont tous les tiens ?

Parce que malgré tout, ça va impliquer pas mal de changements de leur côté aussi, non ?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...