php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 18-04-2008, 17:01
janein
 Member
Links : Onlinestatus : janein ist offline
Registriert seit: May 2003
Beiträge: 206
janein ist zur Zeit noch ein unbeschriebenes Blatt
Standard Pause im Script - wegen Laufzeitbeschränkung - wie geht das?

Ich suche nach einem Ansatz wie ich ein script, welches immer wegen Laufzeitbeschränkung vom Server abgebrochen wird pausieren lassen kann bzw. in Etappen ausführen lasse.

Innerhalb einer Schleife werden von unterschiedlichen Quellen Daten gesammelt. In jedem Schleifendurchgang eine andere Quelle. Die Quelle der Daten ändert sich bei jedem Durchgang und das Ausführen des Durchganges überschreitet die erlaubte Länge. Wie kann man so ein Problem angehen?
Mit Zitat antworten
  #2 (permalink)  
Alt 18-04-2008, 17:09
Manko10
 Newbie
Links : Onlinestatus : Manko10 ist offline
Registriert seit: Mar 2008
Beiträge: 115
Manko10 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich denke, dass die einfachste Möglichkeit die ist, mit microtime() die Zeit zu messen. Wird diese kritisch, so speichert das Skript den aktuellen Stand, bricht ab und wird neu aufgerufen.
Das Neuaufrufen machst du mittels JavaScript oder META-Refresh. Evtl. geht auch header(), bloß weiß ich nicht, wie das mit den Browsern ist. Ob die dann nicht mit der Meldung "Die aufgerufene Seite leitet die Anfrage so um, dass sie nie beendet werden kann" das Handtuch werfen.
Mit Zitat antworten
  #3 (permalink)  
Alt 18-04-2008, 17:13
$_Baker
 Member
Links : Onlinestatus : $_Baker ist offline
Registriert seit: Feb 2008
Beiträge: 220
$_Baker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Werden diese Daten on Demand beötigt oder in unregelmäßigen oder regelmäßigen Abständen?

In letzterem Fall empfehle ich, das ganze lokal (XAMPP zb) laufen zu lassen (So mache ich das momentan auch bei einem ähnlichen Vorhaben).
In ersterem Fall gäbe es die Möglichkeit, das ganze mit ignore_user_abort()
und manuellen HTTP-Requests zu machen, die sofort wieder geschlossen werden (serverseitig natürlich).
Mit Zitat antworten
  #4 (permalink)  
Alt 18-04-2008, 17:13
janein
 Member
Links : Onlinestatus : janein ist offline
Registriert seit: May 2003
Beiträge: 206
janein ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Manko10
Ich denke, dass die einfachste Möglichkeit die ist, mit microtime() die Zeit zu messen. Wird diese kritisch, so speichert das Skript den aktuellen Stand, bricht ab und wird neu aufgerufen.
Das Neuaufrufen machst du mittels JavaScript oder META-Refresh. Evtl. geht auch header(), bloß weiß ich nicht, wie das mit den Browsern ist. Ob die dann nicht mit der Meldung "Die aufgerufene Seite leitet die Anfrage so um, dass sie nie beendet werden kann" das Handtuch werfen.
Javascript ist nicht möglich, da es nicht per Browser, sondern per cron aufgerufen werden soll. Tatsächlich stellt sich die Frage wie der aktuelle Zustand gespeichert werden soll. Ich dachte an eine Pause nach jedem Schleifendurchgang. Blos wie speichere ich den Zustand?

@$_Baker
Die Daten werden in regelmäßigen Abständen überprüft.


Geändert von janein (18-04-2008 um 17:16 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 18-04-2008, 17:16
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Wenns doch eh per Cron aufgerufen wird, dann setz das Timelimit eben höher ... oder direkt auf nicht limitiert.
Mit Zitat antworten
  #6 (permalink)  
Alt 18-04-2008, 17:25
$_Baker
 Member
Links : Onlinestatus : $_Baker ist offline
Registriert seit: Feb 2008
Beiträge: 220
$_Baker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du könntest eine Datei als Zwischenstandpuffer benutzen zb, und die Variante mit den kurzen HTTP-Requests laufen lassen.
PHP-Code:
fsockopen(serverdaten usw);
fputs(HTTP GET...) 
Cronscript:
PHP-Code:
ignore_user_abort(true);
//Cronjob 
Pseudocode

Bitte auch die Dokumentation zu ignore_user_abort beachten!
Mit Zitat antworten
  #7 (permalink)  
Alt 18-04-2008, 17:29
Manko10
 Newbie
Links : Onlinestatus : Manko10 ist offline
Registriert seit: Mar 2008
Beiträge: 115
Manko10 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wie sich das so anhört, handelt es sich um Backup-Lösungen. Benutze doch Tools, wie MySQLDumper. Die haben solche Sachen schon implementiert.
Mit Zitat antworten
  #8 (permalink)  
Alt 18-04-2008, 17:36
$_Baker
 Member
Links : Onlinestatus : $_Baker ist offline
Registriert seit: Feb 2008
Beiträge: 220
$_Baker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich nehme eher an, das er als Quellen auch Html-Seiten hat, somit wäre nichts mit dem Dumper

Und in Schleifen mit regulären Ausrücken aus diesen Inforamtionen holen kann dauern und performancelastig sein.
Mit Zitat antworten
  #9 (permalink)  
Alt 18-04-2008, 17:45
janein
 Member
Links : Onlinestatus : janein ist offline
Registriert seit: May 2003
Beiträge: 206
janein ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von $_Baker
Ich nehme eher an, das er als Quellen auch Html-Seiten hat, somit wäre nichts mit dem Dumper

Und in Schleifen mit regulären Ausrücken aus diesen Inforamtionen holen kann dauern und performancelastig sein.
Genau so ist es ... :-)

Was macht denn usleep(); wird die Ausführung des scriptes tatsächlich unterbrochen? Dann könnte man ja
PHP-Code:
                         foreach ($result as $i =>$value )
                                    {
                                     
fopen() ...
                                      
usleep(60000000)
                                     } 
Mit Zitat antworten
  #10 (permalink)  
Alt 18-04-2008, 17:49
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Wenn du schon so utopische Werte angibst, warum dann nicht direkt sleep. Mal ganz abgesehen von der Tatsache, dass das Script dann noch länger läuft und einem vorhaben wohl nicht entsprichst. Aber ich frage einfach nochmal: Wenn das Script doch eh als Cronjob läuft, warum setzt du die maximale Laufzeit nicht einfach auf unbeschränkt?
Mit Zitat antworten
  #11 (permalink)  
Alt 18-04-2008, 17:52
janein
 Member
Links : Onlinestatus : janein ist offline
Registriert seit: May 2003
Beiträge: 206
janein ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von unset
Wenn du schon so utopische Werte angibst, warum dann nicht direkt sleep. Mal ganz abgesehen von der Tatsache, dass das Script dann noch länger läuft und einem vorhaben wohl nicht entsprichst. Aber ich frage einfach nochmal: Wenn das Script doch eh als Cronjob läuft, warum setzt du die maximale Laufzeit nicht einfach auf unbeschränkt?
Ich finde das ist keine saubere, weil riskannte Lösung.

Wieso utopische Werte? Das ist eine Minute.

Also sleep() ruft das script nicht neu auf, sondern läßt es weiter und somit länger laufen? Dann ist das nicht meine Lösung.

Vielleicht mache ich es so. Die Schleifenlänge in einer Datei speichern und jede Minute das script aufrufen, so lange wie die Schleifenlänge 0 ist. Nur wie rufe ich das script immer wieder auf?

Geändert von janein (18-04-2008 um 17:58 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 18-04-2008, 17:55
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Wenn man nicht programmieren kann, dann stimmt das wohl, vergessen wir den Vorschlag für dich also schnell wieder.

Dann leg eben mehrere Jobs an, die jeweils nur eine Quelle auslesen. Oder halt noch weiter zerstückelt, so dass es in die eingestellte Laufzeit passt.

Alternativ würde ichja zum Shared Memory raten, um zu speichern wo das Script das letzte mal war, aber nachher ballerst du alles kaputt.
Mit Zitat antworten
  #13 (permalink)  
Alt 18-04-2008, 18:17
Manko10
 Newbie
Links : Onlinestatus : Manko10 ist offline
Registriert seit: Mar 2008
Beiträge: 115
Manko10 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von janein
Wieso utopische Werte? Das ist eine Minute.
Eine Minute ist utopisch. Mehr als das.
Im Übrigen ist eine Minute 6000000 und nicht 60000000.

Geändert von Manko10 (18-04-2008 um 18:19 Uhr)
Mit Zitat antworten
  #14 (permalink)  
Alt 18-04-2008, 18:19
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Mir ging es mehr um den Wert, nicht, was dabei rauskommt. Wenn ich keine Microsekundengenaue angabe mache, dann nehm ich auch keine Funktion, die Microsekunden erwartet.
Mit Zitat antworten
  #15 (permalink)  
Alt 18-04-2008, 21:51
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Wenn du dein Skript forkst, beginnt die Ausführungszeit dann von vorn? Probier das mal aus. Dann könntest du nach jedem Schleifendurchlauf prüfen, ob du noch Zeit genug hast. Wenn du kurz vorm Limit stehst, forkst du das Skript und terminierst den Vaterprozess.
Ich kann mir aber vorstellen, dass die Ausführungszeit für das Kindskript übernommen wird. Musst du mal ausprobieren!
Mit Zitat antworten
Antwort

Lesezeichen


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

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

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