Découpe des fichiers volumineux

  Information

Découpe des fichiers volumineux en plusieurs parties et rassemble ensuite les parties pour reformer le fichier.

Description du projet:
Vous remarquerez sans doute que de nos jours bon nombre d'hébergeur (gratuits surtout) interdisent les fichiers de plus de 10Go... Vous remarquerez également que c'est extrêment ennuyeux de les couper, parce qu'en plus votre visiteur doit avoir le ou les programmes adaptés pour les reconstituer et c'est souvent très lourd. Je vous propose donc une solution simple, très simple même (23 lignes de code à vrai dire). Jetez donc un coup d'oeil au code puis aux explications finales pour mettre ce code en oeuvre correctement (en fait vous devrez comme même spliter vos fichier mais vos visiteurs pourront télécharger un beau fichier complet et en un morceau, si si regardez plus bas).

Dernière explications (après le code normalement, mais bon):Un dernier conseil quelque peut astucieux: pour votre fichier file.truc, vous pouvez creer un dossier s'appelant file.truc et contenant les différentes parties. Vous y mettrez aussi la seconde partie du code (celle qui réassemble) avec la bonne valeur de $file dans un fichier nommé "index.php". Ainsi quand le visiteur ira sur http://votresite.com/file.truc le téléchargement se lancera tout de suite... comme si c'était un vrai fichier!
Ensuite vous pouvez modifier le code selon vos besoin: modifier le header (si c'est une image et que le header définit une image cette image peut s'afficher directement dans le navigateur). Il peut aussi être utilisé comme sécurité pour ceux qui utilisent allopass.
D'ailleurs je n'ai pas mis de démo et je n'en ai pas l'intention parce que je suis limité au niveau de la bande passante.

  code source classé dans  Fichiers - Répertoires

 
 01    
 02    
 03    
 04    
 05    
 06    
 07    
 08    
 09    
 10    
 11    
 12    
 13    
 14    
 15    
 16    
 17    
 18    
 19    
 20    
 21    
 22    
 23    
 24    
 25    
 26    
 27    
 28    
 29    
 30    
 31    
 32    
 33    
 34    
 35    
 36    
 37    
 38    
 39    
 40    
 41    
 42    
 43    
 44    
 45    
 46    
 47    
 48    
 49    
 50    
 51    
 52    
 53    
 54    
 55    
 56    
 57    
 58    
 59    
 60    
 61    
 62    
 63    
 64    
 65    
 66    
 67    
 68    
 69    
 70    
 71    
 72    
 73    
 74    
 75    
 76    
 77    
 78    
 79    
 80    
 81    
 82    
 83    
 84    
 85    
 86    
 87    
 88    
 89    
 90    
 91    
 92    
 93    
 94    
 95    
 96    
 97    
 98    
 99    
 100    
                               
<?php
/*---------------------------------------------------------------*/
/*
    Titre : Découpe des fichiers volumineux                                                                              
                                                                                                                          
    URL   : https://phpsources.net/code_s.php?id=174
    Auteur           : kurt67                                                                                             
    Date édition     : 17 Juin 2006                                                                                       
    Date mise à jour : 22 Sept 2019                                                                                      
    Rapport de la maj:                                                                                                    
    - fonctionnement du code vérifié                                                                                    
*/
/*---------------------------------------------------------------*/
/* Dans un premier temps il vous faut découper votre fichier. Je ne vous
cache pas que la variable $file contient le nom de votre fichier à couper.
C'est ici qu'on se rend compte de l’ambiguïté de la situation. Vous ne
 pouvez
pas uploader votre fichier (votre hébergeur refuse, le fichier est trop gros).
Vous pouvez alors utiliser un programme pour couper vos fichier.
Avec une petite recherche google vous devriez trouver rapidement
(HJsplit pour les windoziens ou bien KJsplit ou gnusplit pour le unixiens,
les purs). Mais si vous avez php en localhost et votre
site sur un hébergeur gratuit vous pouvez vous servir du code suivant.
Important à noter: pour un fichier "file.truc" les parties doivent s'appeler
"file.truc.000", "file.truc.001", etc... En commençant à 000 et en continuant
de un en un. Sinon le rassembleur ne trouveras pas les différentes parties
*/
// Variables à définir
$file "file.rar";
// Taille maximale des parties en octet
//(1ko=1024octets et 1mo=1024ko=1024*1024octets)
$cutsize 1024*500;
 
 
// Code
$handle fopen ($file"rb")
    or die ("Lecture impossible !");
$i 0;
while (!feof($handle))
{
    $istring $i;
    $partstring "";
    while (strlen($istring) < 3)
        $istring "0".$istring;
    while(strlen($partstring)<$cutsize && !feof($handle))
    {
        $partstring .= fgets($handle$cutsize-strlen($partstring)+1);
    }
    $partfile fopen($file.".".$istring"wb")
               or die("Erreur fatale: impossible d'ouvrir $file.$istring");
    fwrite($partfile$partstring)
               or die("Erreur fatale: impossible d'écrire $file.$istring");
    fclose($partfile);
    echo "Fichier $i écrit<br />\n";
    $i++;
}
fclose($handle);
?> 

<?php
/* La partie du code la plus importante: celle qui rassemble
le fichier $file des parties "$file.000", "$file.001", etc...
Et les donne en téléchargement à l'utilisateur.
*/
// Votre fichier
$file "file.rar";
 
// S'il n'y a pas la première partie ça ne sert à rien
if (!file_exists($file.".000"))
    die("Partie 000 de $file non trouvée");
 
// Microsoft internet explorer qui fait chier parce qu'il ne respecte pas les
// normes oblige à rajouter du code
if (strstr($HTTP_USER_AGENT,"MSIE"))
    $attachment "";
else
    $attachment " attachment;";
// Vous pouvez changer le type de fichier si vous le voulez
header("Content-type: application/octet-stream");
header("Content-Disposition:$attachment filename=$file");
header("Content-Description: File Transfer");
 
// La boucle qui assemble les fichiers
$istring "000";
$i 0;
while(file_exists($file.".".$istring))
{
    // Que c'est beau readfile()...
    // les parties ne sont pas ouvertes donc ça ne
    // devrait pas trop prendre de temps même pour les gros fichiers
    readfile($file.".".$istring);
    $i++;
    $istring $i;
    while (strlen($istring) < 3)
        $istring "0".$istring;
}
// C'est fini... A vous de jouer 
?> 

          Fonctions du code - Doc officielle PHP

   php.net   Description Versions PHP OUTIL
   die Alias de la fonction exit() PHP 4, PHP 5, PHP 7, PHP 8
   echo Affiche une chaîne de caractères PHP 4, PHP 5, PHP 7, PHP 8
   fclose Ferme un fichier PHP 4, PHP 5, PHP 7, PHP 8
   feof Teste la fin du fichier PHP 4, PHP 5, PHP 7, PHP 8
   fgets Renvoie la ligne courante sur laquelle se trouve le pointeur du fichier PHP 4, PHP 5, PHP 7, PHP 8
   file_exists Vérifie si un fichier existe PHP 4, PHP 5, PHP 7, PHP 8
   fopen Ouverture d'un fichier ou d'une URL PHP 4, PHP 5, PHP 7, PHP 8
   fwrite Ecrit un fichier en mode binaire PHP 4, PHP 5, PHP 7, PHP 8
   header Envoie un en-tête HTTP PHP 4, PHP 5, PHP 7, PHP 8
   readfile Affiche un fichier PHP 4, PHP 5, PHP 7, PHP 8
   strlen Calcule la taille d'une chaîne PHP 4, PHP 5, PHP 7, PHP 8
   strstr Trouve la première occurrence dans une chaîne PHP 4, PHP 5, PHP 7, PHP 8

   Dites merci aux auteurs pour leurs travail, ça ne coûte rien et ça fait toujours plaisir wink

[1]

  • avatar

    Invité

    01 Mars 2011 à 10:34

    Bonjour!  Ta source aparêt en 1er sur google quand on tape "découper fichier php", bravo =) En effet, je cherchai une source similaire pour le problème que tu évoques, mais dans mon cas il ne le résoud que partielement:  Je cherche a mettre en place un systeme de gestion de fichier, et ces fichier comprenne des vidéo. Si sa ne tennai qu'a moi, j'utiliserai un des logiciel que tu évoques pour faire la découpe, mais c'est pas pour moi, mon gestionnaire doit inclure cette fonctionnalité. C'est quand même bête de prendre un serveur dédié juste pour pouvoir uploader des vidéos, (qui au meilleur des cas se fera 3 4 foix par ans en ce qui les concernent xD) Pense tu qu'il sois possible en PHP (ou au pire en JS) de découper les fichier? Puis de les réassembler en interne? Car les vidéo doivent être luent en streaming...et je crois pas que ce sois possible a partir d'un fichier découpé. Je cherche bien sur de mon coté.


 Autres snippets qui pourraient vous intéressez

Coupe une chaine par séquences

Compatibilité : PHP 5, PHP 7

Coupe une chaine en autant de portions de tailles égales. Le restant est placé à la fin du tableau retourné, si besoin.

Découpe le path d'1 fichier avec PHP

Compatibilité : PHP 5, PHP 7

Retourne le chemin, le path d'un fichier et analyse la chaine en nom du répertoire, fichier, extension.

Couper une chaine au n caractère

Compatibilité : PHP 5, PHP 7

Couper, tronquer une chaine au n caractère à la hauteur du mot mot et lui ajouter 3 points (...) en fin de chaine.

Découpe sépare une phrase en mots

Compatibilité : PHP 5, PHP 7

Découpe, sépare un texte en mots. Retourne un tableau avec les mots, dans l'ordre de la chaine.

Coupe une chaine en fonction des Majuscules via PHP

Compatibilité : PHP 5, PHP 7

Recompose une chaine de mots en fonction des Majuscules en utilisant la fonction preg_split () pour séparer les mots où se trouve une lettre majuscule.

Présentation de PHP

PHP débutant et initié 50 Tutoriel

Présentation de MySQL

avatar

Kurt67

  17 Juin 2006

  SOURCE   Télécharger

Information sur les mises à jour

Dernière mise à jour :

    22 Sept 2019
    fonctionnement du code vérifié

12 917 Vues
Compatibilité
PHP 5, 7 et 8+
52 codes

Catégorie :  Fichiers - Répertoires

Affiche la taille d'un fichier en Ko, Mo, Go, To, Po, Eo, Zo
Affiche une citation au hasard
Affiche une ligne d'un fichier de manière aléatoire
Ajoute des lignes au début de vos fichiers textes
Calcul et affiche le nombre de ligne de plusieurs fichiers
Calcul la taille d'un dossier en Octet
Calcul la taille de répertoires et sous répertoires
Change le chmod d'un fichier par FTP
Compresse et décompresse un fichier
Compte le nombre de fichiers d'un répertoire
Compte le nombre de ligne
Copie du contenu d'un dossier en conservant l'arborescence
Copie récursive de dossiers
Copier des fichiers d'1 serveur à 1 autre serveur
Création massive de fichiers zip à partir d'une table SQL
Créer un nouveau fichier
Créer un nouveau répertoire
Créer une arborescence récursivement
Découpe des fichiers volumineux
Découpe le path d'1 fichier
Déplace le pointeur de lignes
Déplace un dossier avec sous répertoires
Déplace un fichier dans un autre répertoire
Efface un répertoire et ses sous répertoires
Extrait les adresses emails d'un fichier texte
Indique si 1 répertoire existe sinon il le créer
Interprète du code PHP dans un fichier HTML
Limite la vitesse de download d'un fichier zip
Lire le contenu d'un fichier avec fopen
Lire le contenu d'un fichier ligne par ligne
Liste des répertoires et sous-répertoires
Liste un répertoire
Liste un répertoire par date
Liste un répertoire par ordre alphabétique
Liste un répertoire selon une extension
Mise en cache d'un site
Modifications dans plusieurs fichiers
Modifie massivement le contenu de fichiers texte
Obtenir l'extension d'un fichier
Obtenir l'extention d'un fichier d'une url
Réécrire un fichier en partant de la fin
Régule la vitesse de téléchargement d'un fichier local
Recherche une chaine de caractère dans un fichier
Remplace les balises BR par des \n
Renommer l'extension de fichiers
Supprime des fichiers selon une date
Supprime l'extension d'un fichier
Téléchargement de fichiers zip avec compteur
Upload basique + Formulaire
Upload Multi classe + Formulaire
Upload Multi tout type de fichiers + formulaire
Vide un répertoire de tous ses fichiers