Mes conditions ne fonctionnent pas...

Mes conditions ne fonctionnent pas... - PHP - Programmation

Marsh Posté le 20-01-2009 à 19:55:31    

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?

Reply

Marsh Posté le 20-01-2009 à 19:55:31   

Reply

Marsh Posté le 20-01-2009 à 19:59:47    

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

Reply

Marsh Posté le 20-01-2009 à 20:22:20    

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

Reply

Marsh Posté le 20-01-2009 à 21:17:15    

Quelle erreur [:petrus dei]

Reply

Marsh Posté le 20-01-2009 à 21:38:59    

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

Reply

Marsh Posté le 20-01-2009 à 22:33:04    

Ton code est vraiment affreux, mais passons.
 

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

Reply

Marsh Posté le 20-01-2009 à 22:33:56    

Bouchon2 a écrit :

Ton code est vraiment affreux, mais passons.


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

Reply

Marsh Posté le 20-01-2009 à 22:44:34    

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..  :/

Reply

Marsh Posté le 20-01-2009 à 22:46:43    

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

Reply

Marsh Posté le 20-01-2009 à 22:48:36    

Bah tu peux toujours l'expliquer..  :d

Reply

Marsh Posté le 20-01-2009 à 22:48:36   

Reply

Marsh Posté le 20-01-2009 à 22:51:33    

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

Reply

Marsh Posté le 20-01-2009 à 22:55:08    

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

Reply

Marsh Posté le 21-01-2009 à 13:03:55    

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...

Reply

Marsh Posté le 21-01-2009 à 13:14:55    

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
Reply

Marsh Posté le 21-01-2009 à 13:30:16    

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.

Reply

Marsh Posté le 21-01-2009 à 13:39:53    

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).

Reply

Marsh Posté le 21-01-2009 à 14:53:15    

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". ;)

Reply

Marsh Posté le 21-01-2009 à 15:22:54    

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...

Reply

Marsh Posté le 21-01-2009 à 15:26:47    

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

Reply

Marsh Posté le 21-01-2009 à 15:26:50    

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
Reply

Marsh Posté le 21-01-2009 à 15:27:58    

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
Reply

Marsh Posté le 21-01-2009 à 15:41:56    

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: ).

Reply

Marsh Posté le 21-01-2009 à 15:48:22    

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:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed