19MB große Datei splitten
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anzahl
code
datei
dateiname
erstellt letzte datei
hinweis
numerierung
nummer
ordner
part
pfad
schliessen
speichern
start
statement
stellen
textdatei
url
zahl
zeile
-
Weiß einer wie ich eine 19MB große .sql Datei splitten kann damit ich sie auf Lima-City hochladen kann?
Denn dort sind nur 10MB erlaubt. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Danke so klappt es auch, habe aber ein Programm gefunden gerade :p
-
Beispiel ... Speichern als Teil-Dateien mit jeweils max. n Zeilen
<?php // --------------------------------------------------------------- $dateiname = 'data/grosse_datei.txt'; // ---- Quell-Datei ---- $file_ext = '.txt'; // ---- Dateiendung der Quell-/Ziel Datei ---- $save_dir = 'data'; // ---- Speicher-Pfad (Ordner-Name) ---- $maxlines = 1000; // ---- Anzahl der Zeilen je Parts Datei ---- ## $rowlen = 10240; // ---- max. länge einer Zeile ---- $datei = 1; // ---- Start Datei Nummer ---- $zeile = 0; // ---- Start Zeilen je Block ---- $allez = 0; // ---- Start Zeilen Gesamt ---- $nrpad = 4; // ---- Anzahl Stellen Parts-Nr ($dnr) ---- $dnr = str_pad($datei,$nrpad,'0',STR_PAD_LEFT); $fbase = basename($dateiname,$file_ext); // ---- Dateiname ohne Pfad und ohne Extension ---- $dateiliste = array(); $save_dir = trim($save_dir,'/'); $neu_datei = $save_dir.'/parts_'.$fbase.'_'.$dnr.$file_ext; $dateiliste[] = $neu_datei; echo "<br />Parts Datei (Nr: ".$dnr."): ".$neu_datei."\n"; $fpr = @fopen($dateiname, "r") or die ('Kann Datei nicht lesen.'); $fpx = @fopen($neu_datei, "w+") or die ('Kann Datei nicht schreiben.'); ## while($line = fgets($fpr, $rowlen)) { while($line = fgets($fpr)) { $zeile++; if($zeile == $maxlines){ fclose($fpx); // ---- alte parts datei schliessen ---- $datei++; $dnr = str_pad($datei,$nrpad,'0',STR_PAD_LEFT); $neu_datei = $save_dir.'/parts_'.$fbase.'_'.$dnr.$datei_ext; $dateiliste[] = $neu_datei; echo "<br />Parts Datei (Nr: ".$dnr."): ".$neu_datei."\n"; $fpx = @fopen($neu_datei, "w+") or die ('Kann Datei nicht schreiben.'); $zeile = 0; // ---- Zeilen Zähler zurücksetzen ---- } fwrite($fpx,$line); // ---- in neue datei schreiben ---- $allez++; } fclose($fpr); // --------------------------------------------------------------- echo "<br />\n"; echo "<br />\n"; echo "<br />Zeilen Gesamt: ".$allez."\n"; echo "<br />max. Zeilen pro Datei: ".$maxlines."\n"; echo "<br />Dateien Gesamt: ".$datei."\n"; echo "<br />\n"; echo "<br />\n"; print "<pre style=\"margin:4px; padding:4px; color:#000000; background:#DEDEDE; text-align:left;\">\n"; print_r($dateiliste); print "</pre>\n"; echo "<br />\n"; echo "<br />\n"; echo "<br />\n"; // --------------------------------------------------------------- ?>
Hinweis zu: $nrpad
Die Zeile im Code:$nrpad = 4; // ---- Anzahl Stellen Parts-Nr ($dnr) ----
.. gibt die Anzahl der Stellen (=Ziffern) für Nummerierung der Parts-Dateien an
BSP: die Quell-Datei hat 41350 Zeilen, je Parts-Datei soll max. 1000 Zeilen haben
dann werden 42 Dateien erstellt (letzte Datei hat dann nur 350 Zeilen)
42 ---> eine 2 Stellige Zahl --->
genügt dann ... :)$nrpad = 2;
BSP: die Quell-Datei hat 41350 Zeilen, je Parts-Datei soll max. 100 Zeilen haben
dann werden 414 Dateien erstellt (letzte Datei hat dann nur 50 Zeilen)
414 ---> eine 3 Stellige Zahl --->
genügt dann ... :)$nrpad = 3;
Hinweis mit: $rowlen würde man die max. Zeilen-Länge beim Auslesen der Quell-Datei angeben,
wenn die Zeilen relativ kurz sind, dann genügt da auch$rowlen = 1024;
oder halt noch geringerer Wert, je nach bekannter max. Zeichen-Länge einer Zeile
wenn man bei fgets()
weg lässt, wird bis zum Zeilen-Ende ausgelesen$rowlen
habe die Variante mit
(Zeilen-Länge) aus-kommentiert drin gelassen$rowlen
wenn man die max. Zelen-Länge kennt und verwendet ist fgets() ein wenig effektiver (schneller)
Beitrag zuletzt geändert: 11.2.2013 13:42:53 von meinkredit -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage