File splitter 0.2

Soyez le premier à donner votre avis sur cette source.

Vue 12 612 fois - Téléchargée 308 fois

Description

Splitter & Sticker de fichier texte

Paramètres:
- Indiquer le nom du fichier à couper/coller
- Indiquer le chemin du dossier qui contiendra les fichiers coupés/collés (si il n'existe pas on essaie de le créer)
- Indiquer le nombre de fois que le fichier sera coupé/collé

A faire:
- Le script sera capable de splitter différents types de fichiers (.exe, .zip..)

Voilà, toutes les remarques sont les bienvenues :)

Source / Exemple :


<?php

//-----------------------------------//
//         FILE SPLITTER 0.2         //
//         Coder par Minimix         //
//     minimix92<arobase>free.fr     //
//                                   //
//  Coupe/Recolle les fichiers Text  //
//-----------------------------------//

/* Fonctions
------------*/

// File Get Contents
if(!function_exists('file_get_contents')){
function file_get_contents($filename){
  if(! $fp = fopen($filename, 'r')) return false;
  $contents = '';
  $contents = fread($fp, filesize($filename));
  fclose($fp);
  return $contents;
  }
}

// SpLiT File
function split_file($filename, $nbr_of_cut=10, $path_dst=''){
if(file_exists($filename)) # Verifie l'existance du fichier
  {
  echo '
  <table cellpadding="5">
  <tbody>
  <tr align="center">
  <td colspan="2"><br />
  <font size="4">CouPeR <a href="'.$filename.'" target="_blank">'.basename($filename).'</a></font>
  <br/>'.round(filesize($filename)/1024*100/100, 2).' Kb<br /></td>
  </tr>';

  if(!is_numeric($nbr_of_cut)) $nbr_of_cut = 10; # Verifie que $nbr_of_cut soit un chiffre

  if($ext = explode('.', $filename)) # Verifie l'extension du fichier
    {
    $extension = '.'.$ext[count($ext)-1];                          # $extension contient l'extension du fichier
    $filesplit = str_replace($extension, '', basename($filename)); # $filesplit contient le nom du fichier sans l'extension
    }
  else # Sinon le fichier n'a pas d'extension
    {
    $extension = '.txt';              # $extension contient l'extension par défault
    $filesplit = basename($filename); # $filesplit contient le nom du fichier
    }

    $part_size = filesize($filename) / $nbr_of_cut; # Calcul la taille du split (en octet)
    $part_size = ceil($part_size);                  # Arrondit au nombre supérieur

    $i = 0; # Initialise le compteur de fichier

    if($read = fopen($filename, 'r')) # Si l'ouverture du fichier réussie
      {

      # Si $path_dst est vide il prend la valeur du dossier courant
      if(!$path_dst) $path_dst = getcwd();

      # Si le chemin du dossier cible ne fini pas par un slash (/) on l'ajoute
      if($path_dst{strlen($path_dst)-1} != '/') $path_dst .= '/';

      # Remplace les anti-slashs (\) par des slashs (/)
      $path_dst = str_replace('\\', '/', $path_dst);

      # Tente de créer le dossier cible s'il n'existe pas
      if(!is_dir($path_dst) AND !mkdir($path_dst, 0777))

      $path_dst = getcwd(); # Si $path_dst n'existe pas il prend la valeur du dossier courant

      while (!feof($read)) # Boucle qui dure jusqu'à la fin du fichier
        {

        unset($contents); # Détruit la variable $contents si elle existe

        $contents = fread($read, $part_size); # $contents contient $part_size octets du fichier

        $i++; # Implémente le compteur de fichier

        $newfile = $filesplit.'['.$i.']'.$extension; # Nomme le fichier qui va contenir $contents

        $exists = 0; # Compteur si le fichier est en triple

        while(file_exists($path_dst.$newfile)) # Si le fichier $newfile existe déjà
          {
          $exists++; # Implémente le compteur
          $newfile = 'copie'.$exists.'_'.$filesplit.'['.$i.']'.$extension; # Renomme $newfile
          }

        if($write = fopen($path_dst.$newfile, 'w')) # Si le nouveau fichier est créé
          {
          # Si l'écriture réussie
          if(fputs($write, $contents))
          echo '
          <tr align="center">
          <td><a href="'.$path_dst.'/'.$newfile.'" target="_blank">'.basename($newfile).'</a></td>
          <td>'.round($part_size/1024*100/100).' Kb</td>
          </tr>';
          # Sinon l'écriture échoue
          else
          echo '
          <tr align="center">
          <td colspan="2" class="error">'.basename($newfile).' Writing Error</td>
          </tr>';

          fclose($write); # Fermeture du fichier $newfile
          }

        # Si la création de $newfile échoue
        else
        echo '
        <tr align="center">
        <td colspan="2" class="error">'.basename($newfile).' Creation Error!</td>
        </tr>';

        } # Lecture du fichier source terminée

      fclose($read); # Fermeture du fichier source
      }

    # Si l'ouverture de $filename échoue
    else
    echo '
    <tr align="center">
    <td colspan="2" class="error">'.basename($filename).' Opening Error!</td>
    </tr>';
    }

  # Si le fichier $filename n'existe pas
  else
  echo '
  <tr align="center">
  <td colspan="2" class="error">'.basename($filename).' Not Exist!</td>
  </tr>';

  # Liens de retour
  echo '
  <tr align="center">
  <td colspan="2"><a href="'.basename(__FILE__).'" target="_top">Re&#134;our</a></td>
  </tr>';

  } # Fin de la fonction split

// SticK File
function stick_file($filename, $nbr_of_cut=10, $path_dst=''){
if(file_exists($filename) AND ereg("([0-9]{1,3})",$filename, $reg)) # Verifie l'existance et la validité du fichier
  {
  # Si $path_dst est vide il prend la valeur du dossier courant
  if(!$path_dst) $path_dst = getcwd();
  
  # Si le chemin du dossier cible ne fini pas par un slash (/) on l'ajoute
  if($path_dst{strlen($path_dst)-1} != '/') $path_dst .= '/';

  # Remplace les anti-slashs (\) par des slashs (/)
  $path_dst = str_replace('\\', '/', $path_dst);

  # Tente de créer le dossier cible s'il n'existe pas
  if(!is_dir($path_dst) AND !mkdir($path_dst, 0777))

  $path_dst = getcwd(); # Si $path_dst n'existe pas il prend la valeur du dossier courant

  $newfile = str_replace('['.$reg[1].']', '', basename($filename)); # $newfile contient le nom du nouveau fichier

  $exists = 0; # Compteur si le fichier existe

  while(file_exists($path_dst.$newfile)) # Si le fichier $newfile existe déjà
    {
    $exists++;                   # Implémente le compteur
    if(ereg("([0-9]{1,3})",$newfile{0}, $nbr))
    $newfile = str_replace($nbr[1], '', $newfile);
    $newfile = $exists.$newfile; # Renomme $newfile
    }

  # Si le nouveau fichier est créé
  if($write = fopen($path_dst.$newfile, 'w'))
    {

    echo '
    <table cellpadding="5">
    <tbody>
    <tr align="center">
    <td colspan="2"><br />
    <font size="4">CoLLeR <a href="'.$path_dst.$newfile.'" target="_blank">'.$newfile.'</a></font>
    <br/>'.round(filesize($filename)/1024*100/100*$nbr_of_cut, 2).' Kb<br /></td>
    </tr>';

    $filesplit = $filename; # Nomme le fichier splitté
    
    $i = $reg[1]; # Initialise le compteur

    # Tant que le fichier splitté existe ou que le compteur soit atteint
    while(file_exists($filesplit) AND $i != ($nbr_of_cut + 1))
      {

      
      if(ereg("(.*)([0-9]{1,3})(.*)",$filesplit, $reg)) # Verifie la validité du fichier
        {
        unset($contents);                            # Détruit la variable $contents si elle existe
        $filesplit = $reg[1].$i.$reg[3];             # Renomme le fichier splitté
        $contents  = file_get_contents($filesplit);  # $contents contient le du fichier $filesplit

        # Sinon l'écriture réussie
        if(fputs($write, $contents))
        echo '
        <tr align="center">
        <td><a href="'.$filesplit.'" target="_blank">'.basename($filesplit).'</a></td>
        <td>'.round(filesize($filesplit)/1024*100/100).' Kb</td>
        </tr>';
        # Sinon l'écriture échoue
        else
        echo '
        <tr align="center">
        <td colspan="2" class="error">'.basename($filesplit).' Writing Error</td>
        </tr>';
        }
      else # Sinon le fichier est invalid
        {
        echo '
        <tr align="center">
        <td colspan="2" class="error">'.basename($filename).' Not Exist!</td>
        </tr>';
        break;
        }

      $i++; # Implémente le compteur

      } # Boucle terminée

    fclose($write); # Fermeture du fichier nouveau fichier
    
    }

    # Si la création de $newfile échoue
    else
    echo '
    <tr align="center">
    <td colspan="2" class="error">'.$newfile.' Creation Error!</td>
    </tr>';
    }

  # Si le fichier $filename n'existe pas ou est incorrect
  else
  echo '
  <tr align="center">
  <td colspan="2" class="error">'.basename($filename).' Not Exist or Invalid!</td>
  </tr>';

  # Liens de retour
  echo '
  <tr align="center">
  <td colspan="2"><a href="'.basename(__FILE__).'" target="_top">Re&#134;our</a></td>
  </tr>';
  } # Fin de la fonction stick

/* Variables
------------*/

$submit     = empty($_POST['submit']) ? ''       : $_POST['submit'];
$filename   = empty($_POST['filename'])  ? ''    : trim($_POST['filename']);
$path_dst   = empty($_POST['path_dst']) ? ''     : trim($_POST['path_dst']);
$nbr_of_cut = empty($_POST['nbr_of_cut']) ? '10' : trim($_POST['nbr_of_cut']);

/* Haut de page
--------------*/

echo '
<html>
<head>
<title>FiLe SpLiTTer</title>
</head>
<style>
<!--
table {
     border-collapse: collapse;
     border: 1px solid ##FF6600;
     }
td {
     color: #FFFF99;
     border: 1px dashed #FFCC33;
     font-family: "Lucida Console", Courier, monospace;
     font-size: 15px;
     font-weight: bold;
     }
a {
     text-decoration: none;
     background-color: transparent;
     font-family: "Lucida Console", Courier, monospace;
     font-size: 15px;
     font-weight: bold;
     }
a:link, a:active {
     color: #FFFFCC;
     }
a:hover, a:visited {
     color: #FFFF66;
     }
input, .bouton {
     background-color: transparent;
     color: #FFFF99;
     font-family: "Lucida Console", Courier, monospace;
     font-weight: bold;
     }
input:focus, .bouton:focus {
     color: #FFFFCC;
     }
input {
     border: 1px inset #FFFFCC;
     font-size: 14px;
     }
.bouton {
     cursor: pointer;
     border: 1px solid #FF6600;
     }
.error {
     color: #FF0000;
     }
//-->
</style>
<body bgcolor="#000000">
<center>
<br />';

/* SpLiT File
-------------*/

if($filename AND $submit == ' CouPeR ')
  {
  split_file($filename, $nbr_of_cut, $path_dst);
  }

/* SticK File
-------------*/

else
if($filename AND $submit == ' CoLLeR ')
  {
  stick_file($filename, $nbr_of_cut, $path_dst);
  }

/* Formulaire
-------------*/

else
  {
  echo '
  <form method="POST" action="" enctype="multipart/form-data">
  <table cellpadding="6">
  <tbody>
  <tr align="center">
  <td colspan="2"><br /><font size="4">FiLe SpLi&#134;&#134;er <i>&#248;.2</i></font><br /><br /></td></tr>
  <tr>
  <td style="border-right:0 none; border-bottom:0 none;"><br /><font class="bouton">&#185;</font> Fichier S&#248;urce</td>
  <td style="border-left: 0 none; border-bottom:0 none;"><br />&#8250;&#8250; <input type="text" name="filename" size="25" value="'.$filename.'" /></td></tr>
  <tr>
  <td style="border-right:0 none; border-bottom:0 none; border-top:0 none;"><br /><font class="bouton">&#178;</font> D&#248;ssier Des&#134;ina&#134;ion</td>
  <td style="border-left:0 none; border-bottom:0 none; border-top:0 none;"><br />&#8250;&#8250; <input type="text" name="path_dst" size="25" value="'.$path_dst.'" /></td></tr>
  <tr>
  <td style="border-right:0 none; border-bottom:0 none; border-top:0 none;"><br /><font class="bouton">&#179;</font> N&#248;mbre de par&#134;ies<br /><br /></td>
  <td style="border-left:0 none; border-bottom:0 none; border-top:0 none;"><br />&#8250;&#8250; <input type="text" name="nbr_of_cut" size="7" value="'.$nbr_of_cut.'" /><br /><br /></td></tr>
  <tr align="center">
  <td colspan="2"  style="border-top:0 none;"><input type="submit" name="submit" class="bouton" value=" CouPeR " /> <input type="submit" name="submit" class="bouton" value=" CoLLeR " /><br /><br /></td></tr>
  <tr align="left">
  <td colspan="2">
  <font class="bouton">&#185;</font> Chemin du fichier à couper/coller
  <br />
  <br />
  <font class="bouton">&#178;</font> Si le dossier n\'existe pas, il est créé
  <br />
  <br />
  <font class="bouton">&#179;</font> Nombre de fichiers à couper/coller
  <br />
  </td>
  </tr>';
  }

/* Bas de page
--------------*/
echo '
<tr align="center">
<td colspan="2"><br /><font size="4">C&#248;dé par Minimix</font><br /><br /></td>
</tr>
</tbody>
</table>
<br />
<br />';
exit();

?>

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
7
Date d'inscription
vendredi 24 janvier 2003
Statut
Membre
Dernière intervention
22 mai 2007

Très bonne source ça marche parfaitement

Une petite suggestion d'amélioration de cette source

il serait intéressant que la découpe se fasse
à la fin d'une ligne de texte, ainsi cette source
permettrait le découpage de fichiers .sql
problème que tous webmaster gérant de gros fichiers connait
Messages postés
6
Date d'inscription
lundi 18 décembre 2006
Statut
Membre
Dernière intervention
31 mai 2007

Pour info, pour que ca marche, j'ai simplement mis avant le while de la ligne 197
ereg("(.*)([0-9]{1,3})(.*)",$filesplit, $reg);

et J'ai mis en commentaire le if de la ligne 201 ainsi que son else associé.

Je suggère simplement de faire un file_exists après la ligne 204 pour pouvoir remettre le if, mais après le file_exists...

Bon update ;-)
Messages postés
6
Date d'inscription
lundi 18 décembre 2006
Statut
Membre
Dernière intervention
31 mai 2007

Sympa, mais il y a un bug si on essaie de coller plus de 10 parties...

Par exemple, découpez le fichier test.jpg en 21 parties.
Puis collez les 21 parties du fichier test[1].jpg. Dès que le programme arrive sur la partie 11, au lieu de lire le fichier test[11].jpg, le programme essaie de lire le fichier test[111].jpg qui n'existe pas... d'où le message d'erreur :
"org[111].jpg Writing Error"

Bonne continuation
Messages postés
45
Date d'inscription
samedi 18 novembre 2000
Statut
Membre
Dernière intervention
10 janvier 2009

Merci :)
En fait, pour recoller le fichier il faut indiquer le nombre de parties a coller. Le fichier doit être de cette façon : fichier[1].ext
Je pense qu'il ne devrez pas avoir de problème.
Messages postés
1
Date d'inscription
jeudi 16 novembre 2006
Statut
Membre
Dernière intervention
16 novembre 2006

Superbe petit outil, mais je me joinds a Artderue62 au sujet de recollage, je n'ai pas bien saisi comment proceder.
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.