[PHP] Renommer une image génerée en PHP [Résolu/Fermé]

Signaler
Messages postés
45
Date d'inscription
dimanche 29 octobre 2006
Statut
Membre
Dernière intervention
4 avril 2013
-
 pr.nizar -
Bonjour,

J'ai un script PHP qui génère des images en utilisant la librairie GD, il marche à la perfection, le seul problème est que l'image affichée (appelée avec le code
<img src="image.php?blabla">
) a pour nom "image.php.jpg"
Comment pourrais-je nommer mon image pour qu'elle est un nom plus décent (et différent à chaque image générée) ?
Je sais que Facebook (facebook.com) fait ça, il génère des images PHP, il renomme l'image créée en fonction de l'id de l'image et de l'heure à laquelle elle est créée.

Une idée ?

Merci,
- Tibo -

7 réponses

Messages postés
1246
Date d'inscription
vendredi 8 octobre 2004
Statut
Contributeur
Dernière intervention
13 septembre 2019
257
A mon avis tu devrais regardé au niveau de la fonction php header() et voir si tu ne peux pas spécifier le nom du fichier, un peu comme lorsque tu envoie le type mime au début de image.php
Messages postés
2884
Date d'inscription
dimanche 30 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
816
Salut.

Je ne suis pas sur, mais je pense que l'une des seules solutions est l'url rewriting.
Je te conseille de faire un dossier /image, ou tu mettras ton script PHP de génération d'image.
Ensuite, tu peux générer plusieurs images différentes selon l'url qui est appelée.
Messages postés
45
Date d'inscription
dimanche 29 octobre 2006
Statut
Membre
Dernière intervention
4 avril 2013
5
Tu parles d'utiliser un .htaccess qui lit qqc du genre:
.../image/acces-image_mon-nom-d-image
et de le retranscrire en :
image.php?chemin=acces-image&nom=mon-nom-d-image

J'utilise ces informations pour créer mon image, puis comme ça le script appelé a l'air d'avoir un vrai nom d'image ?

Je vais essayer ça, ça pourrait marcher en effet!

Je vous tiens au courant
Messages postés
45
Date d'inscription
dimanche 29 octobre 2006
Statut
Membre
Dernière intervention
4 avril 2013
5
Salut!

Ça marche très bien!
Merci beaucoup pour l'idée!

Ça m'a prit pas mal de temps à le configurer, mais finalement c'est parfait!

Merci!
Messages postés
2884
Date d'inscription
dimanche 30 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
816
Salut !
Est-ce que tu peux expliquer ici ce que tu as fait (ou pourquoi pas dans les astuces, si tu es contributeur) ?
Ca servira sûrement à d'autres, et ça m'intéresse aussi.
Merci !
Messages postés
45
Date d'inscription
dimanche 29 octobre 2006
Statut
Membre
Dernière intervention
4 avril 2013
5
Bon alors voilà la solution au problème:
Comment renommer une image générée en PHP ?

Le problème étant que quand on créé une image en utilisant la librairie GD en PHP, l'image créée à pour nom le nom du fichier php utilisé, avec l'extension de l'image, ex:
image.php.jpg

Alors une solution au problème est d'utiliser l'URL Rewriting en utilisant un fichier ".htaccess".

Un fichier .htaccess est un fichier lu par le serveur et interprété avant d'exécuter les fichiers appelés, il peut servir entre (pleins d') autres à créer des URL statics, qui sont, eux, indexés par les moteurs de recherche (google, yahoo, ...) contrairement aux pages dont l'URL est du genre: fichier.php?a=3&e=5, car les moteurs de recherche coupent l'URL à partir du '?' (point d'interrogation).
ex:
l'url : www.site.com/2007/10/09
peut être interprété par:
www.site.com/index.php?annee=2007&mois=10&jour=09

Bon, dans mon cas, je donne le nom de l'image en URL, et c'est le fichier de création d'image qui est appelé en passant en paramètre le nom de l'image depuis laquelle il faut créer une nouvelle.

Plus précisément, j'écris dans le fichier .htaccess:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.+)__(.+)__(.+)__([0-9]+)__([0-9]+)$ image.php?a=$1&i=$2&e=$3&w=$4&h=$5

Pour les détails, il faudra lire les documents d'apprentissage.

Ce .htaccess est placé dans un sous-dossier nommé "image"
Dans ce sous-dossier, il n'y a que le fichier .htaccess et le fichier de création d'image, nommé "image.php"

comme on peut voir, image.php prend 5 arguments:
1 - le nom de l'album
2 - le nom de l'image (sans l'extension, pcq ca ferait trop laid)
3 - le type de l'image (un code pour déterminer l'extension: 0=jpeg, 1=jpg, 2=png, 3=gif)
4 - largeur que prendra l'image créée
5 - hauteur de l'image créée

Au final, dans le dossier parent, quand on affiche une image, on utilise:
<img src="image/nom-dossier__nom-image__code-type__largeur__hauter" />
ex:
<img src="image/divers__chien__2__250__120" />
Ce qui crééra une image de type png de largeur 250, de hauteur 120 qui s'appelle chien.png et qui se trouve dans le dossier divers, et le nom de l'image créée (quand on fait: clic-droit->Enregistrer l'image sous) est: diver__chien__2__250__120.png

L'URL rewriting utilisant un masque, ce qui est entre parenthèse est un élément qui va devenir un attribut, ".+" signifie n'importe quel caractère et "[0-9]" n'importe quel nombre, j'utilise donc un double '_' ("underscore") car certains de mes noms de dossiers ou d'images contiennent le caractère '_' ("underscore").

Mais selon vos besoins, si vous êtes sûr de pouvoir utiliser un caractère unique séparant vos attributs (nom de dossier, d'image, etc...), vous pouvez obtenir quelquechose de plus propre, tel que:
dossier-image-type-largeur-hauteur.

Une autre solution est d'utiliser une base de donnée qui associe un ID unique à une image.
Ainsi, en appelant l'URL: www.site.com/ID-de-mon-image
le fichier image.php appellera l'image dont l'ID correspond dans la table.
(c'est d'après moi ce qu'utilise Facebook, mais je veux écrire un script plus portable, donc pas de base de données).


Pour toute question, n'hésitez surtout pas à la poster! Je reçois les nouveaux posts par mail, donc je répondrai au plus tôt!

Bon courage!

- Thibaud -
Messages postés
2884
Date d'inscription
dimanche 30 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
816
Salut !

Merci pour ton explication.
Avec quel hébergeur est-tu ?

Juste une ramrque :
""
Un fichier .htaccess est un fichier lu par le serveur et interprété avant d'exécuter les fichiers appelés, il peut servir entre (pleins d') autres à créer des URL statics, qui sont, eux, indexés par les moteurs de recherche (google, yahoo, ...) contrairement aux pages dont l'URL est du genre: fichier.php?a=3&e=5, car les moteurs de recherche coupent l'URL à partir du '?' (point d'interrogation).
""

Maintenant, les liens avec des variables (?truc=machin&toto=tata&foo) sont bien vérifiés par les moteurs de recherche. Mais de toute façon, c'est plus propre comme ça (et puis certains moteurs suivant des urls font EXPRES de ne pas suivre les urls de ce type, pour différentes raisons).
Messages postés
45
Date d'inscription
dimanche 29 octobre 2006
Statut
Membre
Dernière intervention
4 avril 2013
5
Salut,

Ah, merci pour la précision, je ne savais pas! :)

Je suis sur deux hébergeurs: ixwebhosting: https://www.bluehost.com/?ixref=%2F

et d'un autre côté, un ami m'héberge sur dreamhost: https://signup.dreamhost.com/shared/email/

Le premier étant pour le boulot, le deuxième est perso.
Les deux sont très bien, bien que dreamhost a connut plus de "down", plus de moment de lag ou même de non accessibilité que ix.
Pour un usage perso, dreamhost est très bon car pas cher.
Sur les deux, il y a énormément d'espace disque et de bande passante disponibles.

Voilà,

Au plaisir d'avoir aidé quelques-uns et d'en avoir appris beaucoup!

- Thibaud -