Bonjour à vous.
J'ai une base de données qui contient des fichiers (données binaires).
Je me suis mis à les extraire, ce qui fonctionne bien :
Mais là ou je bloque, c'est sur la vérification du fichier, je voudrais vérifier que tout s'est bien passé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part file_put_contents("NouveauFichier.pdf", $Document["doc_file"])
J'ai donc penser à tester le md5, cela fonctionne pour le fichier mais je n'arrive pas à recuperer le md5 des données binaires.
J'ai testé plusieurs trucs mais sans réussite...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $FichierBDD = md5($Document["doc_file"]); // ne renvoie rien $FichierHDD = md5_file("NouveauFichier.pdf"); // a883c932e83fb2b56c329316250583fb
Avez-vous une idée de comment je pourrais vérifier la bonne écriture du fichier ?
Merci.
PS : C'est une base de données d'un éditeur de logiciel, je ne peux modifier que les lignes.
EDIT :
Après quelques tests :
Je ne vois pas comment recuperer le contenu de la ressource... si je l'avais, je pense que je pourrais faire un md5 dessus...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 print_r($Document); Array ( ... [doc_file] => Resource id #2 )
Solution :
Après plusieurs heures, j'ai enfin pigé que c'était un flux...
du coup, il suffit de récupérer les données du flux via stream_get_contents().
donc en gros :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 foreach($Documents as $Index => $Document) { $BinaryData = stream_get_contents($Document["doc_file"]); $NewFile = $Document["doc_name"]; if(file_put_contents($NewFile, $BinaryData)) echo "OK"; else exit("KO"); $FileDB = md5($BinaryData); // e8e1cd4e0aed7458c767e4553e770352 $FileHDD = md5_file($NewFile); // e8e1cd4e0aed7458c767e4553e770352 }
Partager