|
| BxG | Posté le 11/10/2008 @ 19:11 |
Astucien
1335 Messages
| Bonjour a tous, j'ai un petit problème de syntaxe.
Je voudrais savoir comment vérifier si un fichier existe bien, sachant que son nom est composé de variables?
<?php echo $vendeur,'_',$num_vente,'.gif' ; ?> J'ai réussi pour l'affichage, et voila ce que j'ai testé pour la verification:
<?php $filename = "/uploads/'$vendeur'_'$num_vente'.gif"; if (file_exists($filename)) { ?>
<?php $filename = "uploads/{$vendeur}_{$num_vente}.*"; if (file_exists($filename)) { ?>
Voila cela fonctionne avec ce code, mais j'ai un autre petit problème , comment afficher une image peut importe son extention ?
<img src="uploads/<?php echo $vendeur,'_',$num_vente,'.*' ; ?>" WIDTH=80 HEIGHT=80> <- Ne fonctionne pas
|
| |
| |
| Publicité |
|
|
| Malcolm | Posté le 11/10/2008 à 20:08 |
Astucien
7271 Messages
| pour le fichier, tu devrais passer par la concaténation ... Quand on a l'habitude dans les "echo" de ne pas fourrer de variables sans concaténer, on ne se plante pas, mais probablement ce n'est pas ta façon de travailler.
Concrètement :
$filename = $vendeur.'_'.$num_vente.'.gif';
if (file_exists($filename)) {
...
}
pour l'image, malheureusement à part connaitre l'extension, il n'y a pas d'autre alternative ...
Si tu formates tes extensions, tu ne devrais pas avoir de soucis, sinon tu dois lister les fichiers dans le dossier, puis récupérer celui qui t'intéresse ...
par exemple
$array_files = glob( $vendeur.'_'.$num_vente.'*); // liste tous les fichiers dont le nom est $vendeur.'_'.$num_vente
foreach($array_files as $filefound)
echo '<img src="uploads/'.$filefound.'" alt="" width="" height="">';
|
| |
|
| BxG | Posté le 11/10/2008 à 20:36 |
Astucien
1335 Messages
| Qu'entends tu par " formater les extensions " ?
Lors de l'enregistrement de l'image, il faudrait que toutes les images aient la même extension ? Modifié par BxG le 11/10/2008 20:44 |
| |
|
| tirikou | Posté le 11/10/2008 à 21:27 |
Petit astucien
929 Messages
| Bonjour,
Rapidos, si tu peux savoir si un fichier existe dans un dossier tu dois pouvoir ensuite tester son extention en testant son type MIME
$_FILES["nomInput"] ["type"] -> type MIME du fichier
Tu peux ensuite comparer si c'est un png ou un jpg ou un gif ou ... et l'attribuer à une variable $extend = 'extension''
Puis rassembler le tout avec des variables : upload/'.$nom_fichier.''.$extend.' |
| |
|
| Malcolm | Posté le 11/10/2008 à 23:21 |
Astucien
7271 Messages
| BxG a écrit :
Qu'entends tu par " formater les extensions " ?
Lors de l'enregistrement de l'image, il faudrait que toutes les images aient la même extension ?
Bin oui ... Ces fichiers doivent bien venir de qq part, je présume soit uploadés soit créés avec GD ou autre. Donc il suffit que tu forces une extension ainsi qu'un type mime (cas d'upload) et tu seras sûr de n'avoir qu'une extension ... |
| |
|
| BxG | Posté le 11/10/2008 à 23:26 |
Astucien
1335 Messages
| Oui ces images sont uploadés, par contre j'ai regardé un peu sur google et je n'ai pas trouvé grand chose sur ce qu'été le type Mime et son role.
Je veux bien quelques liens si vous en avait.
Merci d'avance. |
| |
|
| tirikou | Posté le 12/10/2008 à 00:52 |
Petit astucien
929 Messages
| |
| |
|
| Malcolm | Posté le 12/10/2008 à 09:20 |
Astucien
7271 Messages
| "si vous en avez."
quand tu uploades un fichier, fais un print_r($_FILES) tu auras plein de réponses  |
| |
|
| BxG | Posté le 12/10/2008 à 12:36 |
Astucien
1335 Messages
| Merci pour les infos, m'enfin je suis encore un peu perdu la, a quoi bon trouver le type de l'image si on les formate auparavant ?
Enregistrement de l'image:
if (isset($_FILES['monfichier']) && $_FILES['monfichier']['error'] == 0) { if ($_FILES['monfichier']['size'] <= 1000000) { $extention = pathinfo($_FILES['monfichier']['name']); $extension_upload = $extention['extension']; $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png', 'bmp'); if (in_array($extension_upload, $extensions_autorisees)) {$nom_image = 'uploads/'.$vendeur.'_'.$num_vente.'.gif'; // es-ce possible et correcte d'enregistrer n'importe quel type d'image en .gif ? move_uploaded_file($_FILES['monfichier']['tmp_name'], $nom_image );}
else{ $image_erreur= 'Le format de l\'image n\'est pas supporté ';} } else {$image_erreur='L\'image est trop lourde.';} }
Afficher l'image si elle existe:
<?php $filename = 'uploads/'.$vendeur.'_'.$num_vente.'.gif' ; if (file_exists($filename)) { ?> <img src="uploads/<?php echo $vendeur,'_',$num_vente,'.gif' ; ?>" WIDTH=80 HEIGHT=80></td><?php } else { ?><img src="uploads/aucune_image.jpg" WIDTH=80 HEIGHT=80><?php } ?>
|
| |
|
| Malcolm | Posté le 12/10/2008 à 13:56 |
Astucien
7271 Messages
| Ah non, tu ne pourras pas ...
si le type mime est image/png c'est pas pour avoir une extension .jpg ^^
Bien sûr au final ça marchera, mais c'est pas terrible.
Si tu veux petre sûr de ton coup, t'as 2 solutions :
- soit tu bloques à un seul type mime (une seule extension, sachant que pour une extension, il peut y avoir plusieurs type mime)
- soit tu recrées le fichier final, en un seul type mime.
par exemple, tu uploades un fichier dans un champ <input type="file" name="trucmuche" />
tu récupères donc
$_FILES['trucmuche']['size'] = 12345;
$_FILES['trucmuche']['tmp_name'] = 'tmp/xcvbn';
$_FILES['trucmuche']['name'] = 'bob_marley.jpg';
$_FILES['trucmuche']['type'] = 'image/jpeg';
Bin de là tu fais :
switch($_FILES['trucmuche']['type'])
{
case 'image/jpg':
case 'image/jpeg':
imagecreatefromjpeg(...)
case 'image/gif':
imagecreatefromgif(...)
etc.
}
et là tu enregistres en gif, gif que tu stockes sur ton serveur et qui sera l'image finale stockée en base de données si besoin. |
| |
|
| BxG | Posté le 12/10/2008 à 16:24 |
Astucien
1335 Messages
| Ok en faite imagecreatefromgif(...),imagecreatefromjpg(...),etc... me permet de récupérer les images et de les convertir " proprement " en gif ou autre ?
|
| |
|
| tirikou | Posté le 12/10/2008 à 21:31 |
Petit astucien
929 Messages
| Ce que je crois que Malcolm veut dire c'est que lors de l'upload tu bloques tout type MIME qui n'est pas celui demandé. Par exemple .jpg uniquement.
Tu peux aussi étendre aux types MIME gif, png et jpeg mais en testant leur MIME et non pas l'extension.
Il est possible pour n'importe qui de transformer un fichier .gif en .mp3 mais le type MIME restera toujours en .mp3 alors que l'extension testée sera valide en gif.
Une fois que tu es sûr que tes fichiers ont bien le bon type MIME en upload tu peux alors en tester juste l'extension pour l'affichage. Tu parcours ton fichier d'images avec les extensions admises et affiche celui qui existe.
Par contre si quelqu'un upload un fichier sur ton serveur il t'est indispensable de tester son MIME plutôt que son extension. Tu risques d'avoir n'importe quel type de fichier type php, asp, xml et d'autres bien plus ... assassins VB, Java ...
Bonjour les dégats lorsque tu voudras les afficher  |
| |
|
| BxG | Posté le 13/10/2008 à 10:23 |
Astucien
1335 Messages
| " Il est possible pour n'importe qui de transformer un fichier .gif en .mp3 mais le type MIME restera toujours en .mp3 alors que l'extension testée sera valide en gif. "
Euh ce n'est pas plutot l'inverse ?? --> "Il est possible pour n'importe qui de transformer un fichier .mp3 en .gif mais le type MIME restera toujours en .mp3"
J'ai pourtant testé de prendre un .exe et je l'ai renommé en .jpg, et pourtant lors du test mime, il m'affiche bien image/jpeg ...
Mon code:
$mime = ($_FILES['monfichier']['type']); echo $mime; Modifié par BxG le 13/10/2008 10:51 |
| |
|
| Malcolm | Posté le 13/10/2008 à 18:31 |
Astucien
7271 Messages
| |
| |
|
| BxG | Posté le 18/10/2008 à 14:51 |
Astucien
1335 Messages
| Finalement après avoir demander conseils a mon prof, il m'a dit de stocké le nom renommé de l'image dans l'entité article. |
| |
|
| Malcolm | Posté le 19/10/2008 à 09:51 |
Astucien
7271 Messages
| C'est aussi une bonne idée, ça évite de perdre du temps à vérifier l'existence du fichier. |
| |
|
|
| Haut de la page |