PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : (MYSQL) - Brauche Hilfe für 1ne XML Datei importieren in MySQL Datenbank mit PHPMyAdmin möglich?



Scotty
24.03.2018, 19:18
Hey Leute,

ich habe durch einen Zufall eine ganz wichtige XML Datei bekommen, die ich gerne in 1ne MySQL Datenbank importieren will. Wenn ich die 86MB große ZIP Datei mit der XML Datei drinnen, diese über PHPMy Admin importieren will bekomme ich immer diese Fehlermeldung.


Fehler-Meldung:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 702510589 bytes) in D:\Private Sachen\xampp\xampp\phpMyAdmin\libraries\zip_extens ion.lib.php on line 30

Und in Zeile 30 steht:

$file_data = zip_entry_read($first_zip_entry, zip_entry_filesize($first_zip_entry));

komplette - zip_extension.lib.php

<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */

/**
* Interface for the zip extension
* @package phpMyAdmin
* @version $Id: zip_extension.lib.php 11984 2008-11-24 10:35:27Z nijel $
*/

/**
* Gets zip file contents
*
* @param string $file
* @return array ($error_message, $file_data); $error_message
* is empty if no error
* @author lem9
*/

function PMA_getZipContents($file)
{
$error_message = '';
$file_data = '';
$zip_handle = zip_open($file);
if (is_resource($zip_handle)) {
$first_zip_entry = zip_read($zip_handle);
if (false === $first_zip_entry) {
$error_message = $GLOBALS['strNoFilesFoundInZip'];
} else {
zip_entry_open($zip_handle, $first_zip_entry, 'r');
$file_data = zip_entry_read($first_zip_entry, zip_entry_filesize($first_zip_entry));
zip_entry_close($first_zip_entry);
}
} else {
$error_message = $GLOBALS['strErrorInZipFile'] . ' ' . PMA_getZipError($zip_handle);
}
zip_close($zip_handle);
return (array('error' => $error_message, 'data' => $file_data));
}


/**
* Gets zip error message
*
* @param integer error code
* @return string error message
* @author lem9
*/
function PMA_getZipError($code)
{
// I don't think this needs translation
switch ($code) {
case ZIPARCHIVE::ER_MULTIDISK:
$message = 'Multi-disk zip archives not supported';
break;
case ZIPARCHIVE::ER_READ:
$message = 'Read error';
break;
case ZIPARCHIVE::ER_CRC:
$message = 'CRC error';
break;
case ZIPARCHIVE::ER_NOZIP:
$message = 'Not a zip archive';
break;
case ZIPARCHIVE::ER_INCONS:
$message = 'Zip archive inconsistent';
break;
default:
$message = $code;
}
return $message;
}
?>


Kann mir wer Bitte helfen wie ich vorgehen muss?
Was mache ich falsch?

Gruß
Scotty

Nimbus
24.03.2018, 22:58
Das Problem steht doch in der Fehlermeldung. Hast du dir diese mal angesehen? Wo genau kommst du nicht weiter?

EVXN
24.03.2018, 23:10
php.ini musst du memory limit erhöhen

Scotty
25.03.2018, 08:48
php.ini musst du memory limit erhöhen

Jupp, hab den EIntrag in der php.ini gefunden und geändert.
Muss ich den Wert, Sorry für die blöden Fragen ick bin sowat von raus aus der Materie, muss mich erst wieder einfuchesen, so hoch ansetzen so dass die entpackte ZIP Datei hinhaut von der Größe her?

Hab den Wert jetzt auf 900MB gesetzt.

Ich versuch mal ob das klappt...

Meld mich hier mitm Edit zurück wenn ich weitere Probleme hab...

Gruß
Scotty :emoji56:

Edit Scotty 09:34 Uhr:

Was kann da dran so schwer sein...

Bekomme nun diese Medlung angezeigt...



Fatal error: Allowed memory size of 943718400 bytes exhausted (tried to allocate 702477821 bytes) in D:\Private Sachen\XAMPP\phpMyAdmin\libraries\import.lib.php on line 269

Und in der imort.lib.php in Zeile 269 steht:



$GLOBALS['import_text'] = substr($GLOBALS['import_text'], $size);


switch ($compression) {
case 'application/bzip2':
$result = bzread($import_handle, $size);
$GLOBALS['finished'] = feof($import_handle);
break;
case 'application/gzip':
$result = gzread($import_handle, $size);
$GLOBALS['finished'] = feof($import_handle);
break;
case 'application/zip':
$result = substr($GLOBALS['import_text'], 0, $size);
$GLOBALS['import_text'] = substr($GLOBALS['import_text'], $size);
$GLOBALS['finished'] = empty($GLOBALS['import_text']);
break;
case 'none':
$result = fread($import_handle, $size);
$GLOBALS['finished'] = feof($import_handle);
break;
}
$GLOBALS['offset'] += $size;

Welche Größe muss ich denn nun noch ändern bin hier am verzweifeln aber die entpackte XML Datei ist 700MB groß und beinhaltet 1,7 Millionen Datensätze. Ob ich diese XML Datei inne DB bekomme ist mir noch fraglich...

Hoffe auf eure Mithilfe.

Danke schon mal an Euch.

Edit 9:45 Uhr:

Hab jetzt versucht die XML Datei zu importieren aber da bekomme ich diese Meldung:


Warning: POST Content-Length of 702511780 bytes exceeds the limit of 134217728 bytes in Unknown on line 0

Gruß
Scotty

- - - - - - - - - - Beitrag nachträglich erweitert - - - - - - - - - -

Ahhhh, ich muss ja noch in der PHP.ini
upload_max_filesize,
memory_limit
and
post_max_size

ändern,

mal schauen ob es nun klappt... xD




; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2000M

; Maximum size of POST data that PHP will accept.
; http://php.net/post-max-size
post_max_size = 2000M

; Maximum amount of memory a script may consume (standard - 2000MB)
; http://php.net/memory-limit
memory_limit = 2000M


So alle werte auf 2000MB gesetzt...
Mal schauen ob es jetzt klappt...

Gruß
Scotty :emoji56:

Edit 9:55Uhr:

Man ey wat ist denn nun wieder los...

Immer noch diese Meldung:

Warning: POST Content-Length of 702511780 bytes exceeds the limit of 134217728 bytes in Unknown on line 0

Ich hab gelsenen das ich die XML Datei Parsen soll z.B. mit expat für Windows. Aber da von hab ich keinen blassen Schimmer

Gruß
Scotty :emoji56:

avpnuser
25.03.2018, 12:54
Hi Scotty,

blöde Frage - du startest die entsprechenden Dienste schon neu, nachdem du die Änderung gemacht hast?
Auf Windows habe ich keine Ahnung, was du verwendest, aber Apache oder den WebServer, der phpmyadmin bereitstellt, solltest du in jedem Fall neustarten.

Generell würde ich dir empfehlen, sowas nicht mit phpmyadmin zu machen, sondern mit der Kommandozeile, das geht auch unter Windows.
Infos dazu findest du hier: https://dev.mysql.com/doc/refman/5.5/en/load-xml.html

Regards,

A.VPN

Scotty
25.03.2018, 18:20
Hey A.VPN und danke für deine Antwort vorweg.
Das Problem was ich habe ist ich habe noch zusätzlich eine *.XSD Datei und die XML Datei.
Wie ich nun eine XSD Datei in MySQL importiere steht nirgens. Da ist drinnen zu finden wie die Datenbank aufgebaut ist.

Vielleicht geht das auch garnicht.
Kann auch die XSD & XML Dateien hier nicht posten da ich vom Ersteller das Verbot bekommen hab die Daten nicht öffnetlich zu benutzen sondern nur zu Privaten Zweck.

Hab mich jetzt so viel belesen und rumprobiert, aber bin noch zu keinem Ergebnis gekommen.

Auf der Seite von dir befinden sich in der XML Datei Sachen die ich nicht mal da drinnen hab in der die ich bekommen hab.

Gruß
Scotty

avpnuser
26.03.2018, 07:18
Hi Scotty,

verstehe - das mit der .XSD hatte ich bisher wohl überlesen.
Die .XSD Datei beinhaltet das sog. "Schema" für die Daten, also quasi an welcher Stelle man was finden sollte und welche Art von Wert zu erwarten ist (ganz einfach ausgedrückt).
Aber auch das ist tatsächlich kein Problem, mit einem kleinen Umweg über Excel kriegst du das importiert: https://stackoverflow.com/questions/11531266/using-xml-and-xsd-to-create-a-populated-database/11805086#11805086

Da ich das so selber noch nicht versucht habe, natürlich keine Erfolgsgarantie.
Ggf. kannst du mir ne PN schreiben, kriegen wir schon hin :)

Regards,

A.VPN

Viel Erfolg

Scotty
26.03.2018, 10:08
verstehe - das mit der .XSD hatte ich bisher wohl überlesen.

Ne haste nicht überlesen, hatte ich bis Dato nicht erwähnt gehabt.


Die .XSD Datei beinhaltet das sog. "Schema" für die Daten

Ahhh, siehste und ich wunder mich warum ich beide Dateien mir geladen hab. Hatte wohl seinen Grund.


Da ich das so selber noch nicht versucht habe, natürlich keine Erfolgsgarantie.
Ggf. kannst du mir ne PN schreiben, kriegen wir schon hin

Ich versuche es erst mal selber aus und wenn ich pertu nicht weiter komme, also kurz davor bin durch Unwissenheit meinen Rechner aus dem Fenster zu werfen, komme ich auf dich zurück und schreib dir lieber ne PN.

hehe Gruß
Scotty :emoji56: