Systemvoraussetzung
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.
|