SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Webseiten professionell erstellen

Webseiten professionell erstellen zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

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

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen
Hilfe Community Kalender Heutige Beiträge Suchen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 03.09.2015, 20:47:55
bst2k bst2k ist offline
Anfänger
 
Registriert seit: Sep 2015
Alter: 44
Beiträge: 6
Eine .json Datei mit PHP in Mysql einfügen

Hallo liebe User,

ich versuche derzeit eine JSON Datei mit Hilfe von PHP in einer Mysql Tabelle unterzubringen. Ich hoffe dass ihr mir dabei vielleicht helfen könnt.

Der PHP Code den ich benutzte wäre:

PHP-Code:
<?php
    
//connect to mysql db
    
$con mysql_connect("localhost","testuser","testpw") or die('Could not connect: ' mysql_error());
    
//connect to the employee database
    
mysql_select_db("test"$con);

    
//read the json file contents
    
$jsondata file_get_contents('test.json');
    
    
//convert json object to php associative array
    
$data json_decode($jsondatatrue);
    
    
//get the employee details
    
$id $data['id'];
    
$name $data['name'];
    
$points $data['points'];
    
    
//insert into mysql table
    
$sql "INSERT INTO tbl_emp(id, name, points)
    VALUES('$id', '$name', '$points')"
;
    if(!
mysql_query($sql,$con))
    {
        die(
'Error : ' mysql_error());
    }
?>
und die JSOn Datei ist wie folgt aufgebaut:

Code:
[ {
  "id" : 1,
  "name" : "Testname1",
  "points" : 558,
}, {
  "id" : 2,
  "name" : "Testname2",
  "points" : 5987,
}, {
  "id" : 3,
  "name" : "Testname3",
  "points" : 99741,
}, ]
Ich hoffe es kann mir jemand dabei helfen.

MfG
bst2k
Mit Zitat antworten
  #2  
Alt 05.09.2015, 12:43:31
bst2k bst2k ist offline
Anfänger
 
Registriert seit: Sep 2015
Alter: 44
Beiträge: 6
AW: Eine .json Datei mit PHP in Mysql einfügen

Keiner? :(

Wenn es im Falschen Forum ist, bitte verschieben.
Mit Zitat antworten
  #3  
Alt 07.09.2015, 13:17:41
sysop sysop ist offline
Member
 
Registriert seit: Mar 2004
Ort: wien
Beiträge: 512
AW: Eine .json Datei mit PHP in Mysql einfügen

Das Array (die Datei) ist fehlerhaft.

Richtig müsste deine json-Datei so aussehen:

Code:
[ {
  "id" : 1,
  "name" : "Testname1",
  "points" : 558
}, {
  "id" : 2,
  "name" : "Testname2",
  "points" : 5987
}, {
  "id" : 3,
  "name" : "Testname3",
  "points" : 99741
} ]
Beachte die Kommata in deinem Array!
Dann muss das ganze noch durch eine Schleife laufen, da du ein mehrdimensionales array mit dieser Datei erzeugst. Richtig sieht das dann so aus:
PHP-Code:
<?php

// Der inhalt deiner KORREKTEN !! Datei...
$b ' [ {
  "id" : 1,
  "name" : "Testname1",
  "points" : 558
}, {
  "id" : 2,
  "name" : "Testname2",
  "points" : 5987
}, {
  "id" : 3,
  "name" : "Testname3",
  "points" : 99741
} ]'
;

    
$data json_decode($btrue);
    for(
$i 0$i count($data); $i++)
    {
        
//insert into mysql table 
        // Von mir ausgeremmt, da ... na ja, schon klar denke ich....
        
$sql "INSERT INTO tbl_emp(id, name, points)
        VALUES('"
.$data[$i]['id']."', '".$data[$i]['name']."', '".$data[$i]['points']."')";
        echo 
$sql."<br>";
/*        if(!mysql_query($sql,$con))
        {
            die('Error : ' . mysql_error());
        }
        */
    
}
__________________
Gruss sys ;-)
Ich möchte wie mein Grossvater sterben, lächelnd und schlafend, nicht schreiend und weinend, wie sein Beifahrer.

Geändert von sysop (07.09.2015 um 13:46:29 Uhr)
Mit Zitat antworten
  #4  
Alt 09.09.2015, 22:58:14
bst2k bst2k ist offline
Anfänger
 
Registriert seit: Sep 2015
Alter: 44
Beiträge: 6
AW: Eine .json Datei mit PHP in Mysql einfügen

Hi Sysop,

Danke für deine Antwort, es funktioniert jetzt :)

Daraufhin hat sich allerdings ein neues Problem ergeben ..

Wenn ich das PHP Script aufrufe fängt es an zu rödeln, und es werden auch rund ~4000 Einträge in MYSQL übertragen (insgesamt wären es 103812, die File ist 16mb groß), also alles so wie es sollte.

Und nach etwa 1-2 Minuten bekomme ich

Code:
500 - Internal server error.
There is a problem with the resource you are looking for, and it cannot be displayed.
Weißt du dort eventuell auch Rat?

Gruß
bst2k
Mit Zitat antworten
  #5  
Alt 10.09.2015, 10:48:02
sysop sysop ist offline
Member
 
Registriert seit: Mar 2004
Ort: wien
Beiträge: 512
AW: Eine .json Datei mit PHP in Mysql einfügen

Hallo

Das klingt wie eine Windows-Meldung, nichtssagend und nicht helfend. PHP-Meldung ist das sicher keine. Auf was für einem Server läuft das Script? Mircosoft mit IIS?

Edit:
lt. http://stackoverflow.com/questions/5...l-server-error musst du zunächst einmal die Fehlermeldungen höher schrauben, damit das Standard-Blabla durch eine echte Meldung ersetzt wird.


Ich rate daher, sorry.

Vorab, in meinem Codeschnipsel oben verbinde ich mich in der Schleife mit der Datenbank und sende die Daten ab, was eher suboptimal für grosse Datenmengen ist. Das kann man sicher optimieren, indem man die Daten z.B. triggert oder vor dem absenden meherere SQL-Statements zusammenfasst.

16MB Daten ist relativ gross für die Standard-PHP Anwendungen. Wie sich json da zusätzlich noch auswirkt, dazu fehlen mir Erfahrungswerte.
Je nachdem wie du dein Script geschrieben hast und wie deine php.ini Einstellungen sind, könnte der Speicher, den PHP zugewiesen bekommt nicht ausreichend sein, b.z.w die Laufzeit die PHP für ein Script zugewiesen wurde überschritten werden. Das sollte aber normalerweise aus der Fehlermeldung auch herauslesbar sein. Die Standardeinstellungen in der php.ini sind jedenfalls eher nicht für Datenimporte in diesem Umfang gedacht.

4 Vorschläge

1.
Ändere die Werte für Laufzeit, Speichergrösse, POST_max_size etc in der php.ini so ab, dass dein Script durchlaufen kann (das sehe ich aber als eher weniger ratsam an, auf fremden Servern hat man ausserdem selten Zugriff auf die php.ini)

2 Möglichkeit.
Prinzipiell starte ich ein PHP-Script, das derartig grosse Verarbeitungsmengen zu bewältigen hat nicht im Browser, sondern auf der Konsole in einer Cli.
Zum Einen, weil die CLI eine eigene php.ini besitzt, wo Restriktionen wie Laufzeit und Umgebungsvariablen wesentlich grosszügiger eingestellt sind, zum Anderen, weil dann keine Performance-Verluste wie Browser, Zugewiesener Browserspeicher etc mein Script einengen.
Versuch dein Script auf der Konsole in einer CLI zu starten. möglicher Weise rennt es durch (so würde ich das zunächst machen, aber auch hier ist die Frage, ob du überhaupt eine CLI zur Verfügung hast)

3 Möglichkeit.
Splitte deine Datei in mehrere kleinere (Datengrösse ca 3500 Datensätze je Datei) und arbeite sie nacheinander ab. Arbeitsintensiv, aber das würde sicher funktionieren.

4.
Denk über eine andere Scriptsprache nach. Wenig hilfreich.

PS
Am Anfang des Scripts bitte folgendes einfügen:
PHP-Code:
error_reporting(-1);
ini_set('display_errors','On'); 
Für den Fall, dass PHP Fehlermeldungen unterdrückt. Hoffentlich ist dein Script dann etwas redseliger.
__________________
Gruss sys ;-)
Ich möchte wie mein Grossvater sterben, lächelnd und schlafend, nicht schreiend und weinend, wie sein Beifahrer.

Geändert von sysop (10.09.2015 um 10:58:34 Uhr)
Mit Zitat antworten
  #6  
Alt 10.09.2015, 14:49:35
bst2k bst2k ist offline
Anfänger
 
Registriert seit: Sep 2015
Alter: 44
Beiträge: 6
AW: Eine .json Datei mit PHP in Mysql einfügen

Zitat:
Auf was für einem Server läuft das Script? Mircosoft mit IIS?
Ja


Ich vermute auch mal dass es nichts mit PHP zu tun hat. Erst kam der Error von PHP, dann habe ich die php.ini angepasst (time_execute etc.), und dann ging es bis eben dieser 500er Error ausgegeben wurde.

Vorschlag 1: hab ich schon versucht.

Vorschlag 2: kommt das raus:
Code:
Verbindungsfehler: Client does not support authentication protocol requested by server
Es wäre auch keine dauer Lösung, da die Datenbank 2x am Tag die Daten automatisch updaten müsste.

Vorschlag 3: ist das über php automatisch umsetzbar?

Vorschlag 4: welche wäre denn dafür überlegenswert?

Das Display Errors hat leider auch nicht geholfen.

Hier mal mein finaler Code:

Code:
<?php

mysql_connect("localhost","","") or die('Verbindungsfehler: ' . mysql_error());
echo "Zur Datenbank verbunden.\n";

mysql_select_db("empl") or die('Datenbank Fehler: ' . mysql_error());;
echo "Datenbank gefunden.\n";

$b = file_get_contents('test.json');
echo "Datei geladen.\n";

$data = json_decode($b, true);
echo "JSON File Decoded.\n";

for($i = 0; $i < count($data); $i++){
	$sql = "INSERT INTO empl(id, name, points)
    VALUES('".$data[$i]['id']."', '".$data[$i]['name']."', '".$data[$i]['points']."')";
	
mysql_query("$sql");
echo "Daten geladen.\n";

}

	
?>
Danke schon mal für deine Hilfe! :)
Mit Zitat antworten
  #7  
Alt 11.09.2015, 16:03:42
sysop sysop ist offline
Member
 
Registriert seit: Mar 2004
Ort: wien
Beiträge: 512
AW: Eine .json Datei mit PHP in Mysql einfügen

Viel redseliger ist ja der Server auch nicht geworden! Dich interessiert, welcher Client das Protokoll nicht supportet. Das solltest du zuerst heraus finden.

Vorschlag 3 (mehrere kleiner Dateien) könnte man mit PHP leicht umsetzte, man kann damit dann auch gleich die execution Time überlisten, das ist alles kein Problem. PHP kann Verzeichnisse lesen, Dateien anlegen/löschen/umbenennen, sprich alle Dateien .json aus dem Verzeichnis Import einlesen und verarbeiten.

Der Aufbau wäre dann ca. so:
Lies die erste .json Datei aus dem Verzeichnis /import, verarbeite und importiere und benenne in .donejson um. Dann die nächste .json Datei u.s.w. Das Ergebnis nennt man dann zusammengefrickelt.


ein PHP-Script per Cronjob bedeutet, dass du das in einer CLI laufen lassen möchtest, starte dein Script doch einmal auf der Konsole. Testen musst du das sowieso, CLI bedeutet, dass oftmals Pfade angepasst werden müssen.

Die Scriptsprache deiner Wahl wäre wohl eher SQL. (https://dev.mysql.com/doc/refman/5.0/en/batch-mode.html), da müsste man sich aber die Verarbeitung von json genauer ansehen (ob das überhaupt geht) https://dev.mysql.com/doc/workbench/...rt-import.html


https://dev.mysql.com/doc/refman/5.0...-commands.html könnte für deine Bwedürfnisse interessant sein.

Die Idee im groben:
Mit deinem PHP-Script verarbeitest du die json Daten, generierst ein Textfile mit den SQL-Statements und lässt dieses Textfile dann per Cron abarbeiten.

Trotzdem würde ich mir zuerst ansehen, wer den Fehler verursacht und was man da machen kann.


Alternativer Vorschlag:
Schmeiss Windows in die Tonne und mach das auf einem Linux-Server (das wäre, wäre ich an deiner Stelle, meine erste Aktion, was dir natürlichnicht hilft)

PS
Ist das Privat oder Beruflich. Privat könnte man ja Frickellösungen noch akzeptieren und ich könnte dir den Code zeigen, wie man ein Verzeichnis ausliest.
__________________
Gruss sys ;-)
Ich möchte wie mein Grossvater sterben, lächelnd und schlafend, nicht schreiend und weinend, wie sein Beifahrer.
Mit Zitat antworten
  #8  
Alt 11.09.2015, 21:28:29
bst2k bst2k ist offline
Anfänger
 
Registriert seit: Sep 2015
Alter: 44
Beiträge: 6
AW: Eine .json Datei mit PHP in Mysql einfügen

Ich habe das ganze jetzt nochmal auf einer Linux Kiste zum laufen gebracht, dort bekomme ich den Fehler "504 Gateway Time-out".

Und trotz anpassung in der php.ini wird max_execution_time und max_input_time nicht auf 1800 gestellt, sie bleiben stur auf 60. Der Server wird über Strato gehosted, das kam nach etwas Googlen raus

Zitat:
Ich habe hier zu einige allgemeine Informationen für Sie: Prinzipiell können Sie einige PHP-Grundeinstellungen selbst ändern, indem Sie eine Datei mit dem Namen „php.ini“ auf Ihren Webspace in die jeweiligen Ordner ablegen. In den meissten fällen ist es nicht einmal notwendig die php-Einstellung über die Datei "php.ini" zu ändern, da ein Wechsel der php-Version schon zum gewünschten Ergebnis führen kann. Grundsätzlich können folgende PHP-Module in Ihrem Wert über die Datei „php.ini“ geändert werden: allow_call_time_pass_reference allow_url_fopen sendmail_from safe_mode register_globals upload_tmp_dir session.save_path magic_quotes_gpc max_execution_time upload_max_filesize post_max_size memory_limit Pfade können in der Regel immer angepasst werden. Verzeichnisse für „upload_tmp_dir“ und „session.save_path“ benötigen i.d.R. die Rechte 777. Ab dem PowerWeb Paket liegt die maximale Scriptlaufzeit (max_execution_time) zwar bei 0 - also unbegrenzt. Dennoch kann es vorkommen, dass ein Script früher ohne Fehlermeldung abbricht und nicht bis zum Ende durchläuft. Grund hierfür ist eine Beschränkung der CPU-Zeit für php-Scripts. Diese so genannte CPU-Usage ist im Webhosting für alle Pakete auf 20 Sekunden begrenzt. Läuft ein Script nun 20 Sekunden und beansprucht in dieser Zeit immer die Prozessoren des Servers, indem zum Beispiel Sortierungen oder Ersetzungen in einer Datei erfolgen, dann bricht dieses Script an dieser Stelle ohne jegliche Fehlermeldungen ab. Sollte im Gegensatz hierzu das Script auf eine Rückmeldung der Datenbank warten oder durch sleep() eine Wartezeit programmiert sein, dann kann so ein Script deutlich länger laufen, da die Prozessorzeit nicht ausgeschöpft wird. Leider ist eine Anpassung dieser Einstellung weder durch Sie, noch über unseren Support möglich. Diese Einstellung kann nicht über eine php.ini gesetzt werden sondern wurde vom Strato Rechenzentrum auf dem Server fest eingestellt, um die Belastung der Server im Shared Webhosting zu optimieren. Wichtige Hinweise: Bitte beachten Sie, dass eine php.ini nicht in Unterordner vererbt wird. Das bedeutet, dass in jedem Ordner, wo die Einstellungen greifen sollen, eine eigene php.ini vorhanden sein muss. Die für die Nutzung einer php.ini notwendigen Kenntnisse können wir jedoch nicht vermitteln. Die Nutzung einer php.ini erfolgt also komplett auf Ihre eigene Verantwortung. Bringen Sie nicht die notwenigen Kenntnisse mit, dann sollten Sie eine solche Manipulation nicht vornehmen. Fehlfunktionen sind z.B. bei den STRATO 'CGI' und beim 'Website-Configurator' zu erwarten. Treten in diesem Zusammenhang Probleme auf und es befindet sich eine php.ini auf dem Webspace, so können wir z.B. für die STRATO 'CGI' und für den 'Website-Configurator' keinen Support leisten. Bitte beachten Sie auch unsere AGB (z.B. Abschnitt 1 Pkt. 4.3). http://www.strato.de/holding/legal/agb.html Ich freue mich, Ihnen auf diesem Weg weitergeholfen zu haben. +++Eine ausführliche Anleitung, wie Sie die PHP-Version wechseln können, erhalten Sie im Strato FAQ-Center über den folgenden Link: http://www.strato-faq.de/view.php4?articleid=1568
Ich werde dem Support morgen ebenfalls mal anschreiben, aber es gibt wohl nur 2 Möglichkeiten für mich. Hoster wechseln, oder die JSON File so in mehrere kleine Stücke zu teilen wie du geschrieben hattest. Nur habe ich keine Ahnung wie ich das anstelle :(
Mit Zitat antworten
  #9  
Alt 14.09.2015, 09:21:46
bst2k bst2k ist offline
Anfänger
 
Registriert seit: Sep 2015
Alter: 44
Beiträge: 6
AW: Eine .json Datei mit PHP in Mysql einfügen

Danke Sysop für deine Hilfe, es funktioniert jetzt größtenteils. :)

Geändert von bst2k (14.09.2015 um 09:51:31 Uhr)
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Brauche Hilfe Partygirl MySQLi/PDO/(MySQL) 10 01.03.2011 08:18:11
Datum in Datei für import in MySql aufbereiten blackmolle PHP Grundlagen 1 11.09.2007 09:23:43
datei auslesen und in mysql speichern kacel PHP für Fortgeschrittene und Experten 7 31.01.2005 09:57:49
mySQL DB erstellen und unter PHP nutzen norial MySQLi/PDO/(MySQL) 1 25.10.2004 11:01:29
php und MySQL Timestamp crowl MySQLi/PDO/(MySQL) 3 08.07.2004 00:33:33


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:05:59 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt