PHP : découper un fichier et le recoller
Pour stocker de gros fichiers sans que personne ne puisse les lire aisément, voici une petite fonction qui permet de découper un fichier en sous-fichiers :
$subdir=md5($file).'/'; // Création d'un sous-dossier à partir du MD5 du nom du fichier @mkdir($dir.$subdir, 777); $data = $dir . $file; $handle = fopen($data, "rb"); $iPart=1; while (!feof($handle)) { $md5=md5($iPart.$file); //Composition d'un nom à partir du nom du fichier et d'un incrémentiel $size=rand(1000000,5000000); //Taille aléatoire entre 1 et 5 Mo $chunk = fread($handle, $size); $dataStream = fopen("$dir$subdir$md5.zip", "wb"); //Création du fichier-morceau fwrite($dataStream, $chunk); fclose($dataStream); unset($chunk); // Libération de la mémoire $iPart++; //Incrémentation } fclose($handle);
Puis la fonction de recomposition du fichier original :
$file = 'mon_fichier.ext'; $md5 = md5($file); $iPart = 1; $handle = fopen($dir . $file, 'wb'); //Création du fichier de destination while (is_file($dir . $md5 . '/' . md5($iPart . $file) . '.zip')): //Boucle sur les morceaux $handle2 = fopen($dir . $md5 . '/' . md5($iPart . $file) . '.zip', 'rb'); $chunk = fread($handle2, 5000000); fclose($handle2); // Lecture du morceau fwrite($handle, $chunk); //Ecriture du morceau unset($chunk); $iPart++; endwhile; fclose($handle); //Fermeture