Klar, kann ich machen ^^
Dachte nur das wäre so banal, das es unwichtig ist.
Habe nun den Export auf 2 Dateien erweitert.
Automatisch je nach 100.000er Schritten zu erweitern ist zu hoch für mich, bislang.
Mein Gedankengang war es die Produkte zählen zu lassen und bei 100.000 Artikeln eine neue Datei anzufangen.
Folgende Schritte waren von nöten:
- Einbau Zähler
- Schema verdoppeln
- 2. Datei füllen und schreiben
- Eine Export-Datei schreiben lassen
Falls es noch jemanden interessiert ist gegen Ende auch eine ZIP-Erweiterung eingebaut.
Damit wird der Generieren gezipt und gespeichert. Zusätzlich wird beim Export die Zip-Datei heruntergeladen.
Fürs Verständnis sei noch gesagt das ich bei der Eingabe des Datein namens auf ein .txt verzichte und diese direkt festsetze in der Generierung.
Somit konnte ich die Datei ohne Probleme erstmal gem. Namenseingabe um eine Zahl erweitern.
Nun aber zu meinen Anpassungen:
Vor der Produktschleife:
while ($products = xtc_db_fetch_array($export_query)) {
Das Schema verdoppelt z.B.:
$schema_google2 = "beschreibung".chr(9)."id".chr(9)."link".chr(9)."preis".chr(9)."w".chr(228)."hrung".chr(9)."title".chr(9)."zustand".chr(9)."bild_url".chr(9)."ean".chr(9)."mpn".chr(9)."marke".chr(9)."versand".chr(9)."zahlungsmethode".chr(13); Und damit ein Zähler eingebaut ist folgende Zeile ebenfalls einfügen:
$data_count = 0;
Nun habe ich noch die geschriebenen Datenzeilen innerhalb der Schleife um eine IF-Abfrage und die 2. Datei erweitert:
if ($data_count <100000) { //create content - Schema Google $schema_google .= $products_description."\t". $products['products_id']."\t". $productURL."\t" . number_format($products_price,2,'.','')."\t". $_POST['currencies']."\t". $products_name."\t". "neu\t". $image."\t" . $products['products_ean']."\t". $mpn."\t". $products['manufacturers_name']."\t". $_POST['shipping_country'].":::".number_format($versand,2,'.','')."\t". $zahlungsmethode; //Content Zeile beenden $schema_google .= "\n"; Nun noch den Zähler um 1 erweitern und die IF-Abfrage mit einer "}" schließen. ("$data_count++;" funktionierte irgendwie nicht so wie ich wollte)
$data_count = $data_count + 1;
}
Mit o.a. Code werden die ersten 100.000 Artikel in die 1. Schemenvariable geschrieben und nun komm die 2. Variable:
if ($data_count>= 100000) { //create content - Schema Google $schema_google2 .= $products_description."\t". $products['products_id']."\t". $productURL."\t" . number_format($products_price,2,'.','')."\t". $_POST['currencies']."\t". $products_name."\t". "neu\t". $image."\t" . $products['products_ean']."\t". $mpn."\t". $products['manufacturers_name']."\t". $_POST['shipping_country'].":::".number_format($versand,2,'.','')."\t". $zahlungsmethode; //Content Zeile beenden $schema_google2 .= "\n"; } Anschließend wird noch die While-Schleife mit einer "}" geschlossen, welche ich öfters mal ausversehen entfernt hatte. Na man lernt ja dazu *lacht*.
Nachfolgend werden die Dateien geschrieben.
Die ersten 100.000 Artikel müssen sowieso geschrieben werden, deswegen wird auf eine If-Abfrage verzichtet. Auch wenn es mehr Code ergibt, habe ich das schreiben der Dateien in den Switch vom Export mit hineingenommen. So wird jeweils entweder nur 1 Datei (Beim Export) und 2 Dateien (Beim Generieren) geschrieben.
Zusätzlich sieht man nun meine einbindung der Zip-Erweiterung.
// create File switch ($_POST['export']) { case 'yes': $file1 .= $file . ".txt"; $fp = fopen(DIR_FS_DOCUMENT_ROOT
.'export/' . $file1, "w+"); fputs($fp,$schema_google); fclose($fp); $file_to_compress = DIR_FS_DOCUMENT_ROOT
.'export/'.$file1; //any type of file $zip_file_to_produce = $file_to_compress.'.zip'; $datei = fopen($zip_file_to_produce, 'w+'); fclose($datei); $zip = new ZipArchive
; if ($zip->open($zip_file_to_produce) === TRUE) { $zip->addFile($file_to_compress, $file1); $zip->close(); } // send File to Browser $file1 .= $file . '.zip'; //Modified to download .zip $extension = substr($file1, -3); $fp = fopen(DIR_FS_DOCUMENT_ROOT
.'export/' . $file1,"rb"); $buffer = fread($fp, filesize(DIR_FS_DOCUMENT_ROOT
.'export/' . $file1)); fclose($fp); header('Content-type: application/x-octet-stream; charset=iso-8859-15'); header('Content-disposition: attachment; filename=' . $file1); echo $buffer; exit; case 'no': $file1 .= $file . ".txt"; $fp = fopen(DIR_FS_DOCUMENT_ROOT
.'export/' . $file1, "w+"); fputs($fp,$schema_google); fclose($fp); $file_to_compress = DIR_FS_DOCUMENT_ROOT
.'export/'.$file1; //any type of file $zip_file_to_produce = $file_to_compress.'.zip'; $datei = fopen($zip_file_to_produce, 'w+'); fclose($datei); $zip = new ZipArchive
; if ($zip->open($zip_file_to_produce) === TRUE) { $zip->addFile($file_to_compress, $file1); $zip->close(); } if ($data_count>= 100000) { $file2 .= $file . "2.txt"; $fp = fopen(DIR_FS_DOCUMENT_ROOT
.'export/' . $file2, "w+"); fputs($fp,$schema_google2); fclose($fp); $file_to_compress = DIR_FS_DOCUMENT_ROOT
.'export/'.$file2; //any type of file $zip_file_to_produce = $file_to_compress.'.zip'; $datei = fopen($zip_file_to_produce, 'w+'); fclose($datei); $zip = new ZipArchive
; if ($zip->open($zip_file_to_produce) === TRUE) { $zip->addFile($file_to_compress, $file2); $zip->close(); } } break; } Nachfolgend wird noch die Funktion "process($file)" mit einer "}" geschlossen.
Soviel zu meiner Anpassung. Vielleicht hilft es ja wen oder gibt einen interessanten Denkanstoß.
Für mich wäre es noch interessant zu wissen wie man automatisiert in 100.000 Schritten die Export-Datei splitten kann und wie man die Zip-Generierung optional schalten kann.
Bei Fragen gerne an Forum, denn ich bin mir sehr unsicher ob ich helfen kann.
Benutzen der Modifikation auf eigene Gefahr.
Gruß,
Benny