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

  FORUM HardWare.fr
  Programmation
  PHP

  [ PHP ][ Resolu ] Upload et verification d'un fichier binaire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ PHP ][ Resolu ] Upload et verification d'un fichier binaire

n°1231693
nlc
Le mieux est l'ennemi du bien
Posté le 26-10-2005 à 16:54:28  profilanswer
 

Bonjour a tous !  :hello:  
 
Une petite question technique :
 
J'ai une page php qui permet d'uploader un fichier sur le serveur. Les fichiers a uploader sont des fichiers binaires, et plus precisemment des fichiers audio au format wav.
 
Le souci que j'ai, c'est qu'une fois que le fichier est sur le serveur, je dois verifier qu'il s'agit bien d'un fichier WAV. Le but du jeu est de ne pas se baser sur l'extension du fichier, mais plutot sur l'entete wav du fichier ( car je dois aussi verifier si le fichier est bien en mono, si la frequence d'echantillonage convient, etc...)
 
Est il donc possible en PHP d'ouvrir et lire un fichier binaire, et tester par exemple si le 18eme octet du fichier est bien un 0x17 ?
 
Merci pour votre aide !
 
Cyril

Message cité 2 fois
Message édité par nlc le 26-10-2005 à 18:31:21

---------------
char table[] = {112,114,105,110,116,102,40,34,37,99,37,99,37,99,34,44,49,49,48,44,49,48,56,44,57,57,41,59,0}; char* tablePtr = table; while(*tablePtr) printf( "%c",*tablePtr++ );
mood
Publicité
Posté le 26-10-2005 à 16:54:28  profilanswer
 

n°1231707
soju
One shot !
Posté le 26-10-2005 à 17:06:55  profilanswer
 

nlc a écrit :

Est il donc possible en PHP d'ouvrir et lire un fichier binaire, et tester par exemple si le 18eme octet du fichier est bien un 0x17 ?

oui, par exemple avec fopen, fread...etc

n°1231737
nlc
Le mieux est l'ennemi du bien
Posté le 26-10-2005 à 17:38:51  profilanswer
 

soju a écrit :

oui, par exemple avec fopen, fread...etc


 
Oui j'ai bien vu qu'on pouvait lire des fichiers, mais est ce ca marche aussi pour des fichiers binaires ?
 
Je me pose la question car la fonction fread est censée retourner une string.
Pour en avoir la certitude, pensez vous qu'en php on puisse afficher la valeur hexadecimale des 50 premiers octets du fichier suivant : http://chaenel.free.fr/court.wav
 
C'est a dire que le php devrait afficher sur le navigateur :
 
52 49 46 46 24 10 0 0 57 41 56 45 66 6D 74 20 10 0 0 0 1.....


---------------
char table[] = {112,114,105,110,116,102,40,34,37,99,37,99,37,99,34,44,49,49,48,44,49,48,56,44,57,57,41,59,0}; char* tablePtr = table; while(*tablePtr) printf( "%c",*tablePtr++ );
n°1231744
bl@p_psx
Admin G15-france
Posté le 26-10-2005 à 17:43:40  profilanswer
 
n°1231755
nlc
Le mieux est l'ennemi du bien
Posté le 26-10-2005 à 17:52:54  profilanswer
 

Non malheureusement cela ne suffit pas, car je dois vraiement eplucher l'entete pour verifier different parametres du fichier wav :
 
nombre de canaux, frequence d'echantillonnage, echantillonnage 8/16bits, etc....


---------------
char table[] = {112,114,105,110,116,102,40,34,37,99,37,99,37,99,34,44,49,49,48,44,49,48,56,44,57,57,41,59,0}; char* tablePtr = table; while(*tablePtr) printf( "%c",*tablePtr++ );
n°1231756
bl@p_psx
Admin G15-france
Posté le 26-10-2005 à 17:53:50  profilanswer
 

nlc a écrit :

Non malheureusement cela ne suffit pas, car je dois vraiement eplucher l'entete pour verifier different parametres du fichier wav :
 
nombre de canaux, frequence d'echantillonnage, echantillonnage 8/16bits, etc....


 
bein ca, tu l'avais pas encore dis !
 


---------------
:Moultiplayers:.:Quatuor Chevalier:.:Admin G15-france.com:.:Wiki -G15-france:.:-Papa-:.
n°1231768
omega2
Posté le 26-10-2005 à 18:06:27  profilanswer
 

nlc a écrit :

Le but du jeu est de ne pas se baser sur l'extension du fichier, mais plutot sur l'entete wav du fichier ( car je dois aussi verifier si le fichier est bien en mono, si la frequence d'echantillonage convient, etc...)


bl@p_psx a écrit :

bein ca, tu l'avais pas encore dis !

Si si, il l'avait déjà dit, mais c'était pas mis en avant.
Il me semble que plusieurs personnes sur le forum on déjà réussit à relire des fichiers binaire et à les traiter. :) Par contre je me rapelle pas comment ils ont fait. :(
je me rapelle même pas quel mot clé utiliser pour rechercher ces discutions là.

n°1231778
nlc
Le mieux est l'ennemi du bien
Posté le 26-10-2005 à 18:14:48  profilanswer
 

Bon ca doit etre jouable, car quand je fait :
 
$fd = fopen( "./court.wav", "r" );
$data = fread( $fd, 20 );
echo $data[0];
fclose( $fd );
 
Ca m'affiche un R, normal car le 1er octet du fichier binaire est 0x52.
Le truc maintenant, c'est est-ce que je peux changer par exemple le type de data[0] en int ?
 
si je fait : echo (int)($data[0]);
Ca m'affiche 0 :/


---------------
char table[] = {112,114,105,110,116,102,40,34,37,99,37,99,37,99,34,44,49,49,48,44,49,48,56,44,57,57,41,59,0}; char* tablePtr = table; while(*tablePtr) printf( "%c",*tablePtr++ );
n°1231786
omega2
Posté le 26-10-2005 à 18:24:47  profilanswer
 
n°1231787
nlc
Le mieux est l'ennemi du bien
Posté le 26-10-2005 à 18:26:54  profilanswer
 

C'est bon !
 
Je me suis demerdé :
 

Code :
  1. $fd = fopen( "./court.wav", "r" );
  2. $data = fread( $fd, 20 );
  3. for ( $i=0 ; $i<20 ; $i++ )
  4. {
  5. $value = ord( $data{$i} );
  6. echo $value." ";
  7. }
  8. fclose( $fd );


 
affiche :
 

Code :
  1. 82 73 70 70 36 16 0 0 87 65 86 69 102 109 116 32 16 0 0 0


 
On affiche bien la valeur de chaque octet du fichier ( en decimal dans mon cas )
 
Donc ca veut dire que je peux aller tester n'importe quel octet du fichier wav et verifier s'il convient avant de le sauver et d'envoyer une page de confirmation a l'utilisateur.


Message édité par nlc le 26-10-2005 à 18:30:10

---------------
char table[] = {112,114,105,110,116,102,40,34,37,99,37,99,37,99,34,44,49,49,48,44,49,48,56,44,57,57,41,59,0}; char* tablePtr = table; while(*tablePtr) printf( "%c",*tablePtr++ );
mood
Publicité
Posté le 26-10-2005 à 18:26:54  profilanswer
 

n°1231788
nlc
Le mieux est l'ennemi du bien
Posté le 26-10-2005 à 18:29:13  profilanswer
 


 
Merci !
Je viens de voir ton message et c'est exactement ce que j'ai fais !
 
c'est mon premier programme en PHP et faut avouer que j'ai deja des trucs pas tres catholique a faire  :whistle:  :whistle:


---------------
char table[] = {112,114,105,110,116,102,40,34,37,99,37,99,37,99,34,44,49,49,48,44,49,48,56,44,57,57,41,59,0}; char* tablePtr = table; while(*tablePtr) printf( "%c",*tablePtr++ );
n°1231789
nlc
Le mieux est l'ennemi du bien
Posté le 26-10-2005 à 18:31:02  profilanswer
 

Merci a tous en tout cas


---------------
char table[] = {112,114,105,110,116,102,40,34,37,99,37,99,37,99,34,44,49,49,48,44,49,48,56,44,57,57,41,59,0}; char* tablePtr = table; while(*tablePtr) printf( "%c",*tablePtr++ );
n°1231832
shakpana
des fois, j'me demande ...
Posté le 26-10-2005 à 19:20:03  profilanswer
 

Bon j'arrive après la bataille, mais on ne sait jamais ça peut servir ...  :D  
Ce sont qlqs lignes adaptées d'une vieille classe binFile que j'avais fait pour sortir le texte d'un fichier ole.
l'idée est juste de travailler en binaire avec une écriture hexa, s'plus lisible pour moi ...

Code :
  1. //ici : c'est comment retrouver l'offset d'une valeur dans un doc binaire ...
  2. // notre doc
  3. $doc = "\\xD0\xCF\\x11\\xE0"; // bug du forum y'a qu'un slash - i.e. slash x
  4. // la valeur que l'on recherche
  5. $search = "\\xCF\\x11"; // bug du forum y'a qu'un slash - i.e. slash x
  6. // zone de recherche
  7. $length = strlen($doc);
  8. // offset du début de la recherche
  9. $from_offset = 0;
  10. // recupère l'offset s'il est là
  11. $offset = strpos(substr($doc, $from_offset, $length), $search);
  12. if ($offset === false){
  13.   // dtc
  14.   echo "-1";
  15. }
  16. else{
  17.   // voici notre valeur binaire - en string
  18.   $result = substr($doc, $from_offset + $offset, strlen($search));
  19.   // en entier
  20.   echo ord($result);
  21.   // en hex joliement formattée
  22.   echo strtoupper(bin2hex($result));
  23. }


edit : faut le vouloir pour faire ça ...   [:coch]


Message édité par shakpana le 26-10-2005 à 19:23:22

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

  [ PHP ][ Resolu ] Upload et verification d'un fichier binaire

 

Sujets relatifs
[Résolu][VBA] Problème de "" ...numéro de feuille variable [Résolu]
Textes dynamiques chinois/français [resolu]Lancer un fichier xls a partir de VB6
[PHP] Proposer au visiteur un nombre d'affichage de résultats[PHP] Script qui boucle.........
RESOLU - [EXCEL-VBA] Comment exécuter une macro si excel perd le focus[PHP / CURL] Comment établir une connexion TELNET ?
Galeries photos en PHP ou autresFichier audio
Plus de sujets relatifs à : [ PHP ][ Resolu ] Upload et verification d'un fichier binaire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR