php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 26.11.2008, 19:59  
Neuer Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 8
compushark befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] PHP Timeouts

Hallo PHP.de Gemeinde!
Mittels der Suche habe ich leider keine Lösung auf mein Problem entdeckt daher mein erster Post hier:

Vorwissen:
Ich habe ein Skript geschrieben, welches Daten aus einem onlinespiel sammelt und in meine SQL Datenbank speichert.
Das Skript funktioniert so, wie ich es gerne hätte.

Nun hat man mich gebeten nur alle 2 Sekunden eine Datenabfrage zu machen.
Dies habe ich durch einfügen von
PHP-Code:
sleep(2); 
realisiert.

Problem:
Das Skript wird nun nach genau 2 Minuten (60 von 171 Abfragen) fertig gestellt ohne eine Fehlermeldung auszuspucken (error_reporting ist aktiviert).

Bisherige Lösungsversuche:
Ich habe versucht die Skriptlaufzeit mittels
PHP-Code:
set_time_limit(600); 
im Skript und
Code:
max_execution_time = "0"
mysql.connect_timeout = "500"
in der php.ini zu erhöhen. Leider kommt noch immer das "2-Minuten-Phänomen"

Frage:
Liege ich richtig mit der Vermutung, dass es sich hierbei um ein timeout handelt?
Hat jemand Lösungsansätze für mich?

Falls umbedingt notwendig könnte ich den Quelltext oder den link zu meiner phpinfo() noch online stellen.
Wie gesagt funktioniert das Skript ohne Sleep() jedoch einwandfrei.

Vielen Dank im vorraus
compushark ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 26.11.2008, 20:00  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Alle 2 Sekunden!!?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 26.11.2008, 20:05  
Neuer Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 8
compushark befindet sich auf einem aufstrebenden Ast
Standard

Es handelt sich um einen Cron Job, welcher 2 mal am Tag ausgeführt wird.
Ein foreach-loop geht dabei ein array von 171 User-Nummern durch und sammelt in jedem Durchgang die Daten des jeweiligen Mitgliedes und legt sie in die SQL-Tabelle.

Die Spielleitung hat mich nun gebeten nur alle 2 Sekunden einen solchen Schleifen-Durchgang zu machen.
(Also 1 Mitglied alle 2 Sekunden)

Geändert von compushark (26.11.2008 um 20:11 Uhr).
compushark ist offline  
Alt 26.11.2008, 20:30  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ach so. Hatte ich falsch verstanden.

Mich wundert das:
Zitat:
Nun hat man mich gebeten nur alle 2 Sekunden eine Datenabfrage zu machen.
Warum sammelst Du nicht erst und machst dann 1 INSERT?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 26.11.2008, 20:40  
Neuer Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 8
compushark befindet sich auf einem aufstrebenden Ast
Standard

Bin gerne bereit alle Details zu erklären

Sehr guter Vorschlag. Dies werde umstellen sobald das aktuelle Problem gelöst ist.
Mehrere Baustellen sind nie gut.

Leider hilft mir der Vorschlag beim aktuellen Problem auch noch nicht weiter.
Um den Punkt der Datensammlung etwas zu erläutern:
Ich gelange via file_get_contents() und preg_match_all() an die Daten des jeweiligen Mitgliedes.
Diesen Vorgang soll ich nur alle 2 Sekunden machen. Das was ich als timeout interpretiere bleibt also auf jeden Fall.
compushark ist offline  
Alt 26.11.2008, 20:54  
Erfahrener Benutzer
 
Registriert seit: 19.05.2008
Beiträge: 612
PHP-Kenntnisse:
Fortgeschritten
Young Jedi befindet sich auf einem aufstrebenden Ast
Standard

Verstehe ich das richtig, du rufst ein Script mit einen Cronejob aller 12 Stunden auf. Dies hat dann eine Endlosschleife, welche die Benutzer -einzeln- bearbeitet und zusätzlich immer noch ein sleep(2); in sich hat?

Das ist erstens sehr ineffizient. Lieber aller 10 Minuten alle Benutzer updaten und 2. ist es nach meiner Meinung sehr Performancelastig, wenn ein Script den halben Tag durchläuft.
__________________
http://tippsgegenlangeweile.de

Young Jedi ist offline  
Alt 26.11.2008, 21:02  
Neuer Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 8
compushark befindet sich auf einem aufstrebenden Ast
Standard

Hi Jedi.
Nein ich befürchte da habe ich mich noch nicht ganz klar ausgedrückt.
Entschuldigt das bitte.

Also es funktioniert wie folgt:
- Das Skript wird alle 12 Stunden aufgerufen
- Die SQL-Tabelle wird geleert
- Das Array mit den Mitglieder IDs wird included
- Für Jede Mitglieder ID wird folgendes gemacht (foreach loop)
# Mitgliederseite mit file_get_contents laden
# geladene Seite via preg_match_all filtern
# Ergebniss für die Datenbank formatieren
# Ergebniss via Insert in die SQL-Tabelle eintragen
# 2 Sekunden warten

Im Normalfall benötigt dieses Script ca 20 Sekunden.
Durch das nun geforderte Warten sollte es jedoch theoretisch 342 Sekunden dauern. Nach 120 Sekunden kommt es jedoch zum Stopp des Skriptes wie oben beschrieben.
compushark ist offline  
Alt 26.11.2008, 21:06  
Erfahrener Benutzer
 
Registriert seit: 28.03.2008
Beiträge: 1.847
HPR1974 wird schon bald berühmt werden
Standard

warum eigentlich so kompliziert?
HPR1974 ist offline  
Alt 26.11.2008, 21:08  
Neuer Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 8
compushark befindet sich auf einem aufstrebenden Ast
Standard

Weil ich Einsteiger bin?
Scherz beiseite:
Ich bin immer offen und dankbar für Optimierungsideen.
Am liebsten sind mir aber natürlich Ideen woran es haken könnte
compushark ist offline  
Alt 26.11.2008, 21:11  
Erfahrener Benutzer
 
Registriert seit: 19.05.2008
Beiträge: 612
PHP-Kenntnisse:
Fortgeschritten
Young Jedi befindet sich auf einem aufstrebenden Ast
Standard

Ahh, ok. Führe mal phpinfo(); aus und gucke, ob die Einstellungen wirklich übernommen wurden.

Für was ist eigentlich die 2 Sekunden Pause nötig?
__________________
http://tippsgegenlangeweile.de

Young Jedi 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

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php file_get_contents timeout, php-timeout von 30 bis 120 sekunden., php schleife mit timeout

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:31 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