php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.12.2008, 02:08  
Benutzer
 
Registriert seit: 16.05.2008
Beiträge: 60
superskunk befindet sich auf einem aufstrebenden Ast
Standard Umgang mit übergroßen Produktlisten

Beim Auslesen und Speichern von Produktdaten aus einer CSV Liste in eine MySQL Datenbank, bekomme ich bei großen Dateien Probleme. Ich glaube das Problem kommt durch einen Timeout zustande. Das Script bricht quasi ab.
Welche Möglichkeiten habe ich, um dies zu umgehen?

Kann man eine Schleife anhalten und nach einer Zeit wieder fortsetzen?
superskunk ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.12.2008, 02:19  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

siehe set_time_limit
David ist offline  
Alt 08.12.2008, 04:09  
Benutzer
 
Registriert seit: 16.05.2008
Beiträge: 60
superskunk befindet sich auf einem aufstrebenden Ast
Standard

Diese Funktion hatte ich bereits gefunden. Mir ist jedoch nicht klar wie ich diese sinnvoll verwenden kann. Wenn ich es richtig verstehe setze ich damit ein Zeitlimit. Was passiert jedoch dann?

Wie baue ich diese Funktion sinnvoll in eine Schleife ein, so das alle Daten importiert werden können?
superskunk ist offline  
Alt 08.12.2008, 07:24  
Erfahrener Benutzer
 
Registriert seit: 19.03.2007
Beiträge: 176
BlackWolf ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von superskunk Beitrag anzeigen
Diese Funktion hatte ich bereits gefunden. Mir ist jedoch nicht klar wie ich diese sinnvoll verwenden kann. Wenn ich es richtig verstehe setze ich damit ein Zeitlimit. Was passiert jedoch dann?

Wie baue ich diese Funktion sinnvoll in eine Schleife ein, so das alle Daten importiert werden können?
In die Schleife gar nicht. Die Funktion ersetzt lediglich den Eintrag in der php.ini, der angibt wie lange ein Script maximal laufen darf bevor es abbricht. Steht aber auch auf der Manual-Seite der Funktion:
Zitat:
Legt die Zeit in Sekunden fest, die ein Script laufen darf. Ist diese Zeit abgelaufen, wird ein Fehler zurückgegeben. Der Standard liegt bei 30 Sekunden, es sei denn max_execution_time wurde in php.ini gesetzt.
Außerdem meint das Manual dazu noch:
Zitat:
Die maximale Ausführungszeit in Sekunden, oder 0 wenn die Ausführungszeit nicht limitiert werden soll.
Daraus kann man sich jetzt eigentlich das richtige vorgehen zusammenschustern. Du musst lediglich am Anfang deines Scripts die maximale Ausführzeit nicht limitieren und schon kannst du sooft und so lang Schleifen durchlaufen wie du willst.

mfg
BlackWolf ist offline  
Alt 08.12.2008, 17:20  
Benutzer
 
Registriert seit: 16.05.2008
Beiträge: 60
superskunk befindet sich auf einem aufstrebenden Ast
Standard

Achso alles klar. Das ist dann wohl das selbe wie das hier oder?
PHP-Code:
ini_set('max_execution_time'0); 
Wo liegen die Unterschiede? Ich dachte es gibt eine bessere Möglichkeit. Können dadurch irgendwelche Probleme auftreten? Serverabsturz oder ähnliches?
superskunk ist offline  
Alt 08.12.2008, 21:53  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

Wenn es kein eigener Server sondern nur Webspace ist, wird dir unter Umständen der Hoster irgendwann entweder ne Info zukommen lassen dass du zu viel Resourcen verbrauchst oder dir einfach mal den Account abdrehen. Hoster setzen diese Limits normalerweise im Interesse aller User auf einem Server, damit jeder seinen Teil vom Kuchen bekommt und nicht manche User die Resourcen überstrapazieren zu Lasen der anderen.

Wenn es ein eigener Server ist muss man eh selbst wissen was man macht, max_execution_time kann auch ein schutz gegen ein script sein das aus irgendeinem grund in eine durch php nicht erkannte endlosschleife kommt oder ähnliches, ohne ein max_execution_time - limit läuft das teil auf voller cpu-last bis es entweder jemandem auffällt oder der webserver neu gestartet wird.


Der oftmals sinnvollere Weg ist erstmal zu schauen inwieweit man das Script optimieren kann, aber das geht halt nur wenn man das Script auch zu Gesicht bekommt.

Das einlesen von CSVs wird übrigends, auch direkt von mysql unterstützt:
-> MySQL :: MySQL 5.0 Reference Manual :: 4.5.5 mysqlimport — A Data Import Program

man braucht also wenn die csv im richtigen format vorliegt nichtmal php sondern kann das direkt über die mysql-console erledigen.
robo47 ist offline  
Alt 08.12.2008, 23:22  
Benutzer
 
Registriert seit: 16.05.2008
Beiträge: 60
superskunk befindet sich auf einem aufstrebenden Ast
Standard

Also wäre set_time_limit sinnvoller?

Ich habe einen eigenen Server. Das Problem mit der Endlosschleife würde dann aber doch sicherlich auch bei set_time_limit bestehen.

Das einlesen der Daten direkt über MySQL scheint mir nicht so sinnvoll, weil die Daten nicht immer optimale Qualität haben. Hier filtere ich quasi im Vorfeld, was in die Datenbank geschrieben wird.
superskunk ist offline  
Alt 08.12.2008, 23:33  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von superskunk Beitrag anzeigen
Also wäre set_time_limit sinnvoller?
Also
PHP-Code:
ini_set('max_execution_time'0); 
setzt nicht wie vielleicht vermutet fest in der php.ini den wert für die max_execution_time sondern nur für den aktuellen aufruf!

PHP-Code:
ini_set('max_execution_time'0); 
sowie
PHP-Code:
set_time_limit(0); 
am Anfang eines Scripts resultiert daher in genau der gleichen Sache, nämlich dass die maximale Laufzeit für diesen Aufruf dieses Scriptes kein Limit hat, es kann unbegrenzt laufen.
robo47 ist offline  
Alt 25.07.2009, 16:41  
Benutzer
 
Registriert seit: 16.05.2008
Beiträge: 60
superskunk befindet sich auf einem aufstrebenden Ast
Standard

Ich habe immer noch Probleme mit großen Produktlisten. Manche Listen enthalten knapp 50000 Produkte.

Ich habe die Ausführungszeit und den Speicher hochgesetzt:

PHP-Code:
 //Setzt die maximale Ausführungszeit hoch in Sekunden (0 für unendlich)
ini_set('max_execution_time'1800);
//Setzt das maximale Speicherlimit hoch
ini_set('memory_limit''192M'); 
Bei großen Listen bricht die Ausführung immer ab. Ich habe das Importscript nun schon so erweitert, daß der Import in die Datenbank etappenweise ausgeführt wird.

Woran kann es noch liegen, das mein Script abbricht? Es erscheint keine Fehlermeldung oder ähnliches.
superskunk ist offline  
Alt 25.07.2009, 17:08  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

Ist das error-reporting hoch genug eingestellt ?
steht display_errors auf On ?

Hast du mal "debug"-ausgaben eingebaut ? dass es z.b. alle X Datensätze in eine Datei den Status + speicherverbrauch loggt ?

Nach welcher Zeit bricht es ab ?

Wie rufst du es auf ? Via Browser ? Via shell/cmd ?
robo47 ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Vergleiche oder aber der korrekte Umgang mit " und ' PHP Tipps 2007 7 08.12.2005 12:19
Umgang mit Newbies Zergling-new Off-Topic Diskussionen 16 12.11.2005 22:12
umgang mit array, überprüfen nach inhalt Tic Rederon PHP Tipps 2005-2 4 02.08.2005 17:39
Textarea: Zeilenumbrüche (PHP umgang / Mozillafähig) King2k HTML, Usability und Barrierefreiheit 5 26.07.2005 08:30
Umgang mit Flatfile PHP Tipps 2005-2 8 30.06.2005 21:40
Umgang mit den drei PHP-Foren Basti Off-Topic Diskussionen 21 19.08.2004 15:50

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
max_execution_time unbegrenzt, max_execution_time sinnvoll, php max_execution_time unbegrenzt, ini_set(\'memory_limit\', unbegrenzt, max execution time umgehen skript nach x sekunden pausieren, php.ini max_execution_time unbegrenzt, memory_limit unbegrenzt, max_execution_time unendlich, max_execution_time, php array[0] unendlich fortsetzen, php umgang datenbank klassen, produktlisten importieren mysql, max_execution_time optimaler wert, mysql max_execution_time, php max_execution_time sinnvoll, unterschied set_time_limit und ini_set execution time, max_execution_time sinvoll, mysql console import max execution time, speicherlimit php unbegrenzt, 1800 max_execution_time php

Alle Zeitangaben in WEZ +1. Es ist jetzt 15:05 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum