> Tous les forumsForum des Webmasters

 Tester existence fichierSujet résolu
Statut du sujet : RESOLU Imprimer
 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

 Afficher le profil de BxGEnvoyer un message privé à BxG
 
 
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="">';

Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
 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
Afficher le profil de BxGEnvoyer un message privé à BxG
  Revenir en haut de la page
 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.'

Afficher le profil de tirikouEnvoyer un message privé à tirikou
 Revenir en haut de la page
 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 ...

Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
 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.

Afficher le profil de BxGEnvoyer un message privé à BxG
  Revenir en haut de la page
 tirikou  Posté le 12/10/2008 à 00:52  
Petit astucien


929 Messages
Afficher le profil de tirikouEnvoyer un message privé à tirikou
 Revenir en haut de la page
 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

Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
 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&eacute; ';}
}
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 } ?>

Afficher le profil de BxGEnvoyer un message privé à BxG
  Revenir en haut de la page
 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.

Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
 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 ?

Afficher le profil de BxGEnvoyer un message privé à BxG
  Revenir en haut de la page
 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

Afficher le profil de tirikouEnvoyer un message privé à tirikou
 Revenir en haut de la page
 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
Afficher le profil de BxGEnvoyer un message privé à BxG
  Revenir en haut de la page
 Malcolm  Posté le 13/10/2008 à 18:31  
  Astucien


7271 Messages

Effectivement, et tu as raison. Le type mime est le plus souvent utilisé, mais pas la solution ultime. Il existe un test un peu plus poussé basé sur la fonction Exif ...

http://fr.php.net/manual/fr/function.exif-imagetype.php

Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
 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.

Afficher le profil de BxGEnvoyer un message privé à BxG
  Revenir en haut de la page
 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.

Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
Haut de la page 
Inscrivez-vous !
- Posez vos questions

- Résolvez vos problèmes

- Aidez les autres

- Participez et créez vos discussions

- Dialoguez en privé avec d'autres membres

- Suivez vos sujets préférés

- Affichez les signatures des membres

TOUT EST GRATUIT !

Je crée mon compte




Vous avez besoin d'aide ?
Des centaines d'experts sont à votre disposition sur les forums PC Astuces pour vous aider gratuitement, 24h/24, 7j/7.

Les derniers sujets résolus !
 

 > Tous les forumsForum des Webmasters

 
Forum PC Astuces© 1997-2008 WebastucesAller en haut de la page