Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1688 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Mes conditions ne fonctionnent pas...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Mes conditions ne fonctionnent pas...

n°1840695
absot77
Posté le 20-01-2009 à 19:55:31  profilanswer
 

Slt, j'ai un dernier problème, mes conditions ne fonctionnent pas... :/  
 
Je ne devrais voir que les fichiers au format "txt", "csv" ou "jpg" et il m'affiche tout comme un fichier "avi" ou "png"...  
 
 

Code :
  1. if ( ! isset($_REQUEST['fichier'] ) )
  2. {
  3. echo "Paramètre non renseigné";
  4. }
  5. else{
  6. $nomFichier=$_REQUEST['fichier'];
  7. if ( ! is_file($nomFichier) )
  8. {
  9. echo "Pas un fichier";
  10. }
  11. else{
  12. if ( ! ((getExtension($nomFichier)=="txt" ) or (getExtension($nomFichier)=="csv" ) or (getExtension($nomFichier)=="jpg" )))
  13. {
  14. echo "Pas un fichier";
  15. }
  16. else{
  17. if ( getExtension($nomFichier)=="txt" )
  18. {
  19. afficheFichierText( $nomFichier );
  20. }
  21. else{
  22. if (getExtension($nomFichier)=="csv" )
  23. {
  24. afficheFichierCSV( $nomFichier );
  25. }
  26. else{
  27. if (getExtension($nomFichier)=="jpg" )
  28. {
  29. afficheFichierImage($nomImage);
  30. }
  31. }
  32. }
  33. }
  34. }
  35. }
  36. function afficheFichierCSV( $nomFichier ){
  37. $lesenregistrements=array();
  38. $lesenregistrements= file($nomFichier);
  39. echo ("<table border=1>" );
  40. for ($i=0; $i< sizeof($lesenregistrements); $i++){
  41. echo ("<tr>" );
  42. $unenregistrement=array();
  43. //Range chaque champ de l'enregistrement dans un tableau (Le caractère de troncature est ";" ou ":" )  
  44. $unenregistrement= split('[;:]' ,$lesenregistrements[$i]);
  45. for ($j=0; $j< sizeof($unenregistrement); $j++){
  46. echo ( "<th>" . $unenregistrement[$j] . "</th>" );
  47. }
  48. echo ("</td>" );
  49. }
  50. }
  51. echo ("<br/>" );
  52. echo ("</table>" );
  53. //void afficheFichierText( String : $nomFichier )  
  54. /**  
  55. * Génère l'affichage du contenu du fichier de text brut (format .txt).  
  56. * @param String $nomFichier Reçoit en paramètre le nom du fichier (Plus exactement le "path" : url relative par rapport à la position de cette bibliothèque.  
  57. * @return void ne retourne rien.  
  58. */
  59. function afficheFichierText( $nomFichier ){
  60. $Fichier=$nomFichier;
  61. if ($TabFich = file($Fichier)) {
  62. for ($i = 0; $i < count ($TabFich); $i++){
  63. echo $TabFich[$i]."<br/>";
  64. }
  65. }
  66. }
  67. //string getExtension(String : $nomFic)  
  68. /**  
  69. * Retourne l'extension du fichier  
  70. * @param String $nomFic nom du fichier au format chaîne de caractères.  
  71. * @return String l'extension au format chaîne de caractères ou null s'il ni à pas d'extensions.  
  72. */
  73. function getExtension($nomFic){
  74. $trunc = split('[.]', $nomFic);
  75. if(sizeof($trunc)>1){
  76. return $trunc[sizeof($trunc)-1];
  77. }else {
  78. return null;
  79. }
  80. }
  81. function afficheFichierImage($nomImage){
  82. $image = "<img src='".$nomImage."'>";
  83. echo $image;


 
D'où vient le problème svp?

mood
Publicité
Posté le 20-01-2009 à 19:55:31  profilanswer
 

n°1840697
FlorentG
Posté le 20-01-2009 à 19:59:47  profilanswer
 

Dans getExtension, ton split est bizarre, vire les crochets ?

n°1840708
absot77
Posté le 20-01-2009 à 20:22:20  profilanswer
 

Si j'enlève les crochets, il me mets une erreur quand je lui donne des fichiers.

n°1840742
FlorentG
Posté le 20-01-2009 à 21:17:15  profilanswer
 

Quelle erreur [:petrus dei]

n°1840752
absot77
Posté le 20-01-2009 à 21:38:59  profilanswer
 

Il me dit pour tout mes fichiers que ce ne sont pas des fichiers "Pas un fichier".

n°1840862
Bouchon2
Crabe glauque
Posté le 20-01-2009 à 22:33:04  profilanswer
 

Ton code est vraiment affreux, mais passons.
 

Code :
  1. function getExtension($nomFic){
  2. return strtolower(substr($nomFic,-3));
  3. }

n°1840865
FlorentG
Posté le 20-01-2009 à 22:33:56  profilanswer
 

Bouchon2 a écrit :

Ton code est vraiment affreux, mais passons.


Hmmm, ça c'est pas mieux [:sadnoir]

n°1840882
absot77
Posté le 20-01-2009 à 22:44:34  profilanswer
 

Bouchon2 a écrit :

Ton code est vraiment affreux, mais passons.
 

Code :
  1. function getExtension($nomFic){
  2. return strtolower(substr($nomFic,-3));
  3. }



 
Merci ça fonctionne!!  :d
 
Pourtant la fonction, c'est celle que mon prof nous a donné en cours..  :/

n°1840888
FlorentG
Posté le 20-01-2009 à 22:46:43  profilanswer
 

Ah c'est pour les cours :D Faut préciser, j'ai failli faire un magnifique post pour expliquer pourquoi se baser uniquement sur l'extension est naze :D

n°1840891
absot77
Posté le 20-01-2009 à 22:48:36  profilanswer
 

Bah tu peux toujours l'expliquer..  :d

mood
Publicité
Posté le 20-01-2009 à 22:48:36  profilanswer
 

n°1840895
FlorentG
Posté le 20-01-2009 à 22:51:33  profilanswer
 

Ca sera pour demain, là je suis mort [:elmoricq]

n°1840897
absot77
Posté le 20-01-2009 à 22:55:08  profilanswer
 

Ok, je passe vendredi sur ce programme tout entier (4 pages)..  :)

n°1841062
macgawel
Posté le 21-01-2009 à 13:03:55  profilanswer
 

absot77 a écrit :

Bah tu peux toujours l'expliquer..  :d


- Prends un fichier FICHIER.AVI, renomme-le en FICHIER.TXT, il passera ton test.
A l'inverse, prend un fichier RICHIER.TXT et renomme-le en FICHIER.AVI et il ne passe plus.
(Au passage, je ne suis même pas sûr que ton script gère les majuscules)
Ca suffit comme explication ?  :D  
 
Pour détailler un peu :
Un système comme Linux ne se base pas sur l'extension d'un fichier pour déterminer son type.
De même, au moins sur les vieux MacOS, l'extension (qui n'est pas non plus le déterminant) était sur 4 lettres (*.JPEG).
Du coup, on peut facilement avoir des fichiers texte sans extension, ou avec une extension non significative.
 
Bref, ne se baser que sur l'extension, ça peut être envisagé dans le cadre d'une application destinée à un usage privé. Mais dès qu'il y a plusieurs utilisateurs et/ou de la sécurité en jeu...

n°1841069
absot77
Posté le 21-01-2009 à 13:14:55  profilanswer
 

macgawel a écrit :


- Prends un fichier FICHIER.AVI, renomme-le en FICHIER.TXT, il passera ton test.
A l'inverse, prend un fichier RICHIER.TXT et renomme-le en FICHIER.AVI et il ne passe plus.
(Au passage, je ne suis même pas sûr que ton script gère les majuscules)
Ca suffit comme explication ?  :D  
 
Pour détailler un peu :
Un système comme Linux ne se base pas sur l'extension d'un fichier pour déterminer son type.
De même, au moins sur les vieux MacOS, l'extension (qui n'est pas non plus le déterminant) était sur 4 lettres (*.JPEG).
Du coup, on peut facilement avoir des fichiers texte sans extension, ou avec une extension non significative.
 
Bref, ne se baser que sur l'extension, ça peut être envisagé dans le cadre d'une application destinée à un usage privé. Mais dès qu'il y a plusieurs utilisateurs et/ou de la sécurité en jeu...


 
Ce n'est qu'un projet de cours en même temps..  :d
 
Mais oui j'ai compris.  :)
 
On pourrait faire comment s'il y avait de la sécurité en jeu?
 
Une autre question, pourquoi quand genre j'execute un programme (fait par moi-même) en corus, ça fonctionne mais pas quand je suis sur mon portable (qui a vista)? :??:
 


Message édité par absot77 le 21-01-2009 à 13:17:42
n°1841076
omega2
Posté le 21-01-2009 à 13:30:16  profilanswer
 

macgawel a écrit :


De même, au moins sur les vieux MacOS, l'extension (qui n'est pas non plus le déterminant) était sur 4 lettres (*.JPEG).

Sur mac, du moins jusqu'à MacOS/9 (je ne me rappelle plus si c'est la même chose sur MacOS/X) le déterminant était un code à quatre (ou trois, petit doute) caractères placé en début de fichier et qui déterminaient non pas le type de fichier mais qu'elle application il fallait utiliser pour ouvrir le fichier quand on double cliquait dessus. Par défaut, c'était le code de l'application qui avait servit à créer le fichier qui y était indiqué. A noter que pour obtenir un code libre, il fallait inscrire chaque application créé auprès d'Apple. C'était le seul moyen d'éviter que plusieurs applications se retrouvent avec le même code.
 
Sur Beos, qui est moins connus, le système d'exploitation détermine le type de fichier en analysant son contenu.
 
Sous windows, au moins jusqu'à XP, c'est la dernière extension (par exemple "machin.avi.txt" , c'est un fichier texte) est utilisé pour déterminer le type de fichier.
 
Pour linux, c'est encore plus simple : il ne cherche pas à déterminer le type de fichier. Il ne cherche pas non plus à lier un fichier à une application donné. Peut être que certains explorateurs graphiques déterminent le type de fichier d'une manière ou d'une autre mais en tout cas ça n'est pas en standard dans l'OS.
 
 
Vu que l'extension d'un fichier est une des choses les plus facile à modifier, ça n'est clairement pas le meilleur critère pour déterminer le type du fichier. En fait, si tu veux sécurisé ce genre de système, c'est sur le contenu du fichier qu'il faut se baser.

n°1841085
FlorentG
Posté le 21-01-2009 à 13:39:53  profilanswer
 

omega2 a écrit :

Sous windows, au moins jusqu'à XP, c'est la dernière extension (par exemple "machin.avi.txt" , c'est un fichier texte) est utilisé pour déterminer le type de fichier.


Ca dépend quand-même du logiciel, certains ne faisant pas confiance à l'extension. Renomme ta vidéo en .txt, Windows Media Player va quand-même réussir à l'ouvrir (y'aura juste une MessageBox désactivable d'avertissement).

n°1841140
omega2
Posté le 21-01-2009 à 14:53:15  profilanswer
 

Quelque soit l'os, t'auras toujours des logiciels qui acceptent tout sans rien vérifier et d'autres qui seront parano. Ca n'empêche pas l'os d'être idiot (windows) ou un peu plus savant (beos)
 
PS : "savant" dans le sens "qui a la connaissance" et donc "qui sait reconnaitre". ;)

n°1841173
macgawel
Posté le 21-01-2009 à 15:22:54  profilanswer
 

FlorentG a écrit :


Ca dépend quand-même du logiciel, certains ne faisant pas confiance à l'extension. Renomme ta vidéo en .txt, Windows Media Player va quand-même réussir à l'ouvrir (y'aura juste une MessageBox désactivable d'avertissement).


Je viens juste d'essayer (Windows XP + WMP 9.0).
Ben, si je change un AVI en TXT c'est notepad++ qui l'ouvre.
 
Soit dit en passant, j'ai des doutes sur ce que tu dis :
Quand j'ouvre un fichier, Windows décide, en fonction de l'extension, du programme à utiliser.
Du coup, à moins d'avoir associé les TXT à WMP (ou d'avoir masqué les extensions des fichiers dont le type est connu  :ange: ), Windows détermine que le fichier est à ouvrir avec notepad et basta...

n°1841179
FlorentG
Posté le 21-01-2009 à 15:26:47  profilanswer
 

macgawel a écrit :

Je viens juste d'essayer (Windows XP + WMP 9.0).
Ben, si je change un AVI en TXT c'est notepad++ qui l'ouvre.


Ca c'est explorer qui gère, pour des raisons évidentes de performance. Mais si tu pars du logiciel, certains font une vraie détection

n°1841180
Profil sup​primé
Posté le 21-01-2009 à 15:26:50  answer
 

macgawel a écrit :


Je viens juste d'essayer (Windows XP + WMP 9.0).
Ben, si je change un AVI en TXT c'est notepad++ qui l'ouvre.
 
Soit dit en passant, j'ai des doutes sur ce que tu dis :
Quand j'ouvre un fichier, Windows décide, en fonction de l'extension, du programme à utiliser.
Du coup, à moins d'avoir associé les TXT à WMP (ou d'avoir masqué les extensions des fichiers dont le type est connu  :ange: ), Windows détermine que le fichier est à ouvrir avec notepad et basta...


Non mais t'as rien compris  :pt1cable:  
Ouvre ton TXT avec WMP, tu verras que florentg a raison. Effectivement, XP identifie les logiciels à lancer en fonction de l'extension, mais WMP, en revanche, identifie les fichiers selon leur format pour les lire.
 
EDIT :  [:grilled] 3 sec


Message édité par Profil supprimé le 21-01-2009 à 15:27:15
n°1841182
omega2
Posté le 21-01-2009 à 15:27:58  profilanswer
 

macgawel > Il veut dire que s'il fait "fichier/ouvrir" dans "Windows Media Player", ce logiciel va vérifier si le fichier est une vidéo valide sans se préoccuper de son extension.
Aucun rapport avec le double clic dans l'explorateur de windows.
 
EDIT : [:grilled] 11 secondes


Message édité par omega2 le 21-01-2009 à 15:29:32
n°1841199
macgawel
Posté le 21-01-2009 à 15:41:56  profilanswer
 

Oui, mais là on parlait de l'OS, pas de logiciels...
 
Et c'était un mauvais exemple :
Sous WMP (toujours 9.0), je viens de demander à ouvrir un fichier AVI renommé en txt. Je confirme (message d'alerte, toussa).
Et puis j'ai essayé avec un vrai fichier texte... Et j'ai le même message, y compris le passage "[WMP] peut lire le fichier"  :lol: ).

n°1841206
omega2
Posté le 21-01-2009 à 15:48:22  profilanswer
 

macgawel a écrit :

Oui, mais là on parlait de l'OS, pas de logiciels...
 
Et c'était un mauvais exemple :
Sous WMP (toujours 9.0), je viens de demander à ouvrir un fichier AVI renommé en txt. Je confirme (message d'alerte, toussa).
Et puis j'ai essayé avec un vrai fichier texte... Et j'ai le même message, y compris le passage "[WMP] peut lire le fichier"  :lol: ).

:lol:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Mes conditions ne fonctionnent pas...

 

Sujets relatifs
recaler Date selon conditions [VBA]macro pour 4 conditions
Remplir des tables en respectant des conditionsSuppression de lignes sous conditions
Creation d'ISO avec conditions !Conditions
Problème : plusieurs conditions dans une colonne excelproblème avec les conditions IF et les sessions
[PHP] conditions multiples dans un switch - problème de design pattern[Résolu] Includes ne fonctionnent plus depuis session
Plus de sujets relatifs à : Mes conditions ne fonctionnent pas...


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)