[PHP] Renommer une image génerée en PHP

Résolu/Fermé
Bussy14 Messages postés 45 Date d'inscription dimanche 29 octobre 2006 Statut Membre Dernière intervention 4 avril 2013 - 6 oct. 2007 à 06:06
 pr.nizar - 9 déc. 2008 à 21:51
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 -
A voir également:

7 réponses

vignemail1 Messages postés 1246 Date d'inscription vendredi 8 octobre 2004 Statut Contributeur Dernière intervention 13 septembre 2019 259
6 oct. 2007 à 10:19
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
0
Ssylvainsab Messages postés 2884 Date d'inscription samedi 29 juillet 2006 Statut Modérateur Dernière intervention 15 août 2020 825
6 oct. 2007 à 10:35
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.
0
Bussy14 Messages postés 45 Date d'inscription dimanche 29 octobre 2006 Statut Membre Dernière intervention 4 avril 2013 5
6 oct. 2007 à 16:09
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
0
Bussy14 Messages postés 45 Date d'inscription dimanche 29 octobre 2006 Statut Membre Dernière intervention 4 avril 2013 5
8 oct. 2007 à 20:52
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!
0
Ssylvainsab Messages postés 2884 Date d'inscription samedi 29 juillet 2006 Statut Modérateur Dernière intervention 15 août 2020 825
9 oct. 2007 à 19:48
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 !
0
Bussy14 Messages postés 45 Date d'inscription dimanche 29 octobre 2006 Statut Membre Dernière intervention 4 avril 2013 5
10 oct. 2007 à 01:51
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 -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ssylvainsab Messages postés 2884 Date d'inscription samedi 29 juillet 2006 Statut Modérateur Dernière intervention 15 août 2020 825
10 oct. 2007 à 08:36
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).
0
Bussy14 Messages postés 45 Date d'inscription dimanche 29 octobre 2006 Statut Membre Dernière intervention 4 avril 2013 5
10 oct. 2007 à 18:15
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 -
0
0