Teil von  SELFPHP
Professional CronJob-Service

Suche

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP?
In über 130.000 Beiträgen finden Sie sicher die passende Antwort!  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
Datei in mehrere Dateien aufsplitten

Am Ende der Seite finden Sie das komplette Beispiel als Download.

Systemvoraussetzung

  • Linux
  • PHP 3
  • PHP 4
  • PHP 5

Datei(en)

splitShellFile.php

Problem


Gerade wenn Sie sehr große Dateien in mehrere Dateien aufsplitten wollen, stoßen Sie sehr oft an Grenzen, die durch Ihren Webhoster festgelegt wurden. Oftmals ist der zugewiesene Arbeitsspeicher nicht ausreichend groß und die eingelesene Datei führt dann zu einem Abbruch des aktuellen Skripts. Sehr schnell kann es auch passieren, dass die Skriptlaufzeit bei großen Dateien überschritten wird und auch hier das Skript abbricht.

Aber dennoch gibt es Situationen, in denen Sie Dateien (z. B. Logfiles) aufsplitten müssen. Wir werden im Nachfolgenden ein Beispiel aufzeigen, das Dateien über die Shell splittet. Diese Lösung arbeitet wesentlich schneller, als wenn Sie die Datei mit PHP einlesen und zerteilen.


Lösung

Unsere hier vorgestellte Lösung zerlegt eine einzelne Datei in mehrere Dateien. Dabei haben Sie die Wahl, ob Sie die Datei nach bestimmten Zeilen oder nach Byte splitten wollen. Zusätzlich besteht die Möglichkeit, ein Präfix vor die gesplitteten Dateien zu setzen.

function splitShellFolder($file,$split="byte",$sum=1000, $prefix="")
   @param   string     $file
   @param   string     $split
   @param   integer   $sum
   @param   string     $prefix
   @return   bool

Die Funktion splitShellFile() erwartet als Parameter den zu splittenen Dateinamen ($file), die Variante zum Splitten (Byte – splittet nach x-Byte, jeder andere Wert nach x-Zeilen), die Summe der Zeilen oder Byte, nach der gesplittet werden soll ($sum), und als letzten Parameter das Präfix ($prefix), das jeder Datei vorangestellt wird.

Im ersten Schritt überprüfen wir, ob die zu splittene Datei existiert (37) und beenden im Fehlerfall unsere Funktion (38). Sollte die Datei existieren, überprüfen wir zuerst, wie die Datei gesplittet werden soll.

Soll die Datei nach Byte gesplittet werden (40), bauen wir den String für den Shell-Befehl zusammen (41) und schreiben die Byte-Zahl, nach der die Datei getrennt werden soll, mit in unseren Shell-String. Falls nach Zeilen gesplittet werden soll (42), erstellen wir auch hier den String (43) und schreiben die Zeilenzahlen mit in den Shell-String.

Der String für unseren Splitvorgang baut sich wie folgt auf:

  • split Der Befehl zum Splitten
  • --bytes Splittet die Datei nach jeweils x Byte
  • --lines Splittet die Datei nach jeweils x Zeilen
  • $file Die zu splittende Datei
  • $prefix Das Präfix für die gesplitteten Dateien

Nachdem wir den String für unseren Shell-Befehl zusammengestellt haben, können wir ihn zur Ausführung bringen (46). Sollte das Splitten erfolgreich gewesen sein, finden Sie jetzt in Ihrem Verzeichnis die aufgeteilten Dateien.

35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
function splitShellFile($file,$split="byte",$sum=1000$prefix=""){

    if (!
file_exists($file))
        return 
false
        
    if(
$split == "byte") {
        
$shellBefehl "split --bytes=$sum $file $prefix";    
    } else {
        
$shellBefehl "split --lines=$sum $file $prefix";    
    }
        
    
exec($shellBefehl);
    
    return 
true;
    
}
Beispiel 11.5: splitShellFile.php

Sie müssen lediglich den zu splittenden Namen angeben und die Parameter für die Split-Optionen setzen. Hier in diesem Beispiel sollte eine Datei mit 1000 Zeilen in jeweils eine Datei zu 100 Zeilen aufgeteilt werden. Als Präfix wurde jeder Datei der String „explode_“ vorangestellt.

  <?PHP

$file 'split.txt';

$var splitShellFile($file,"lines",100,"explode_");

?>

Ausgabe im FTP-Programm

Datei split.txt (Inhalt 1.000 Zeilen) aufgeteilt in jeweils 100 Zeilen.



Abbildung 11.1: Ausgabe im FTP-Programm

Im zweiten Beispiel sollte die gleiche Datei nach exakt 20 kB gesplittet werden. Als Präfix wurde jeder Datei der String „byte_20kB_“ vorangestellt.

52:
53:
54:
$file 'split.txt';

$var splitShellFile($file,"byte",20000,"byte_20kB_");
Beispiel 11.6: splitShellFile.php

Ausgabe im FTP-Programm

Datei split.txt (Inhalt 1.000 Zeilen) aufgeteilt in jeweils 20kB Dateien.



Abbildung 11.2: Ausgabe im FTP-Programm (20kB-Dateien)



 


Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!

Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.




 

Download

Info   ZIP BZIP2 TARGZ
Größe   844.00 Byte 992.00 Byte 917.00 Byte

Alle Beispiele als PHP-Datei(en)

Hier haben Sie die Möglichkeit, sich sämtliche auf dieser Seite gezeigten Beispiele als PHP-Dateien direkt downzuloaden.

Umständliches Copy & Paste ist daher nicht mehr notwendig, da alle Beispiele sofort ausprobiert werden können.

Sie haben bei der Auswahl der bereitgestellten Downloads mehrere Möglichkeiten, je nachdem welches Komprimierungsverfahren Sie bevorzugen.

Zurück zur Übersichtsseite


 




:: Premium-Partner ::

Webhosting/Serverlösungen

Pixel X weitere Premium-Partner
 

:: SELFPHP Sponsor ::

HighText Verlag Graf und Treplin OHG weitere Sponsoren
 


:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Webhosting/Serverlösungen

Suchen Sie den für Sie passenden IT-Dienstleister für Ihr Webhosting-Paket oder Ihre Serverlösung?

Sie sind nur ein paar Klicks davon entfernt!


 

Ausgewählter Tipp im Bereich PHP-Skripte


Dateien/Verzeichnisse mit Bzip2 komprimieren

Weitere interessante Beispiele aus dem SELFPHP Kochbuch finden Sie im Bereich PHP-Skripte
 

SELFPHP Code Snippet


Leere und nicht-leere(nur Whitespaces) Array-Elemente entfernen.

Weitere interessante Code Snippets finden Sie auf SELFPHP im Bereich PHP Code Snippets
 
© 2001-2016 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt
© 2005-2016 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de