tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
16
ZUGRIFFE
518
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Moin,

    Ich weiß grad nicht weiter....

    Wenn ich mein Script starte wird nach etwa 3-4 Minuten die Datei zum Download angeboten, also steigt mein Apache da aus.
    In der php.ini ist "max_execution_time" auf 18000 (6 min) eingestellt.
    Was für einstellmöglichkeiten gibt es denn noch, denn wie ich auf der Datenbank sehe werden die Querys weiterhin ausgeführt, obwohl das PHP-Script nicht mehr läuft...
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  2. #2
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.506
    18000 sind doch 5 Stunden?
    Und Apache hat auch ein Timeout, Standard 5min.

    Nur Downloaden lassen sollte er nichts...
    Mime-Einstellungen?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  3. #3
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Zitat Zitat von sheel Beitrag anzeigen
    18000 sind doch 5 Stunden?
    Stimmt, weiß nicht wo ich grad meinen Kopf hatte


    Zitat Zitat von sheel Beitrag anzeigen
    Und Apache hat auch ein Timeout, Standard 5min.
    Wo finde ich diese Einstellung? Welche Auswirkungen können Veränderungen haben?

    Zitat Zitat von sheel Beitrag anzeigen
    Mime-Einstellungen?
    Inwiefern meinst du das? Es ist nur eine PHP-Datei welche einige Querys verarbeitet (~ 200.000)

    Zitat Zitat von sheel Beitrag anzeigen
    Nur Downloaden lassen sollte er nichts...
    Es poppt nach einer bestimmten Zeit ein Dialog auf wo ich gefragt werde ob ich die Datei speichern möchte oder nicht....
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  4. #4
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.630
    Blog-Einträge
    4
    ? Es ist wirklich das php-Script, das man dann herunterladen kann ? Böse..

    Essentiell würde ich den Programmieransatz überdenken. Was hälst Du davon, das Script sich selbst rekursiv aufrufen zu lassen? Damit umgehst Du

    (A) die lange Abarbeitungszeit eines Scripts
    (B) fehlende Meldungen zum Scriptstand
    (C) TimeOut-Probleme
    (D) Abstürze?

    Gib dem Script einfach per POST einen begrenzten Datenbereich (zB id 1-100) mit und laß nach Abarbeitung den nächsten Haufen mit einem Selbstaufruf bearbeiten ( zB id 101-200). Zusätzlich kannst Du noch per POST alle Infos mitschicken, die wichtig sein könnten.

    mfg chmee
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  5. #5
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Zitat Zitat von chmee Beitrag anzeigen
    ? Es ist wirklich das php-Script, das man dann herunterladen kann ? Böse..

    Essentiell würde ich den Programmieransatz überdenken. Was hälst Du davon, das Script sich selbst rekursiv aufrufen zu lassen? Damit umgehst Du

    (A) die lange Abarbeitungszeit eines Scripts
    (B) fehlende Meldungen zum Scriptstand
    (C) TimeOut-Probleme
    (D) Abstürze?

    Gib dem Script einfach per POST einen begrenzten Datenbereich (zB id 1-100) mit und laß nach Abarbeitung den nächsten Haufen mit einem Selbstaufruf bearbeiten ( zB id 101-200). Zusätzlich kannst Du noch per POST alle Infos mitschicken, die wichtig sein könnten.

    mfg chmee
    An das hab ich auch schon gedacht, nur kommt das erstmal nicht in Frage.

    Es handelt sich um eine Zend-Framework-Applikation.
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  6. #6
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Hm, könnte man hier nicht evtl. Zend_Queue verwenden? http://framework.zend.com/manual/de/...framework.html
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  7. #7
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Zitat Zitat von saftmeister Beitrag anzeigen
    Hm, könnte man hier nicht evtl. Zend_Queue verwenden? http://framework.zend.com/manual/de/...framework.html
    Naja, im Grunde hole ich nur Datensätze mit einem Mapper, geh sie in der Schleife durch und setze sie neu. Das sind halt über 200.000 Datensätze....

    PHP-Code:
    public function updatepositionAction(){
            
    $ModelPosition  = new Model_Position();
            
    $MapperPosition = new Model_Mapper_Position();
            
            
    $entrysPosition $MapperPosition->fetchAll();
            
            
    $output = array();
            
    $counter 0;
            
            foreach (
    $entrysPosition as $row){
                
                
    $output[$counter]['old']['ttime']        = $row->getTtime();
                
    $output[$counter]['old']['acceptdate'] = $row->getAcceptdate();
                
    $output[$counter]['old']['id_account'] = $row->getId_account();
                
                
    $ttime = new Zend_Date($row->getTtime());
                
                if(
    $row->getAcceptdate() != 0){
                    
    $acceptdate    = new Zend_Date($row->getAcceptdate());
                    
    $newAcceptDate $acceptdate->add(5Zend_Date::YEAR)->toValue(Zend_Date::TIMESTAMP);
                }else{
                    
    $newAcceptDate 0;
                }
                
                
    $newTime $ttime->add(5Zend_Date::YEAR)->getTimestamp();
                
                
                
    $output[$counter]['new']['ttime']        = $newTime;
                
    $output[$counter]['new']['acceptdate'] = $newAcceptDate;
                
    $output[$counter]['new']['id_account'] = $row->getId_account();
                
                
    $newTimes = array(
                    
    'ttime'      => $newTime,
                    
    'acceptdate' => $newAcceptDate
                
    );
                
                    
    $MapperPosition->find($row->getId(), $ModelPosition);
                
    $ModelPosition->setOptions($newTimes);
                
    $MapperPosition->save($ModelPosition);
                
                
    $counter++;
            }
            
            
    $this->view->output $output;       
        } 
    Es wird genau nach 2 Minuten abgebrochen, die SQL-Querys laufen aber weiterhin.
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  8. #8
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Warum lässt du das nicht die Datenbank erledigen?
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  9. #9
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Zitat Zitat von saftmeister Beitrag anzeigen
    Warum lässt du das nicht die Datenbank erledigen?
    Weil ich die Ausgaben brauche. Rein auf der DB hatte ich es ja schon.
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  10. #10
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Du machst das ewas umständlich, wenn ich den Code richtig deute. Zuerst holst du alle Datensätze raus, dann loopst du drüber und holst dann noch mal den jeweiligen Datensatz, um ihn abzudaten. Hast du mal Vergleiche gemacht, wie das mit Plain-SQL läuft? Ich könnte mir vorstellen, das du dir wenigstens den einen Abholprozess sparen kannst, in dem du ein update() mit WHERE-Condition einbaust.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  11. #11
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Also Plain SQL sieht es so aus:

    Code sql:
    1
    2
    3
    4
    5
    
    UPDATE
     tablename
       SET
       field1 = IF(field1 IS NULL OR field1 = 0, field1, unix_timestamp(date_add(from_unixtime(field1), INTERVAL 5 YEAR))),
       field2 = IF(field2 IS NULL OR field2 = 0, field2, unix_timestamp(date_add(from_unixtime(field2), INTERVAL 5 YEAR)))

    und dauerte 34 Sek.
    222.714 rows affected
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  12. #12
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Also ist das Updaten nicht das Problem. Hast du mal versucht, mit nem Profiler rauszufinden, wo es hakt? Da muss man ja nicht unbedingt alle Datensätze updaten, es genügen so 100 um herauszufinden, wo der Schuh drückt. Kennst du mein Tutorial zu diesem Thema?
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  13. #13
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Kennst du mein Tutorial zu diesem Thema?
    nope, noch nicht

    Ich hab mir auch schon überlegt das mit AJAX zu machen, für jede Row eine Ausgabe per AJAX holen. Dann müsste es doch auch funktionieren...
    Geändert von Maniac (04.01.12 um 16:04 Uhr)
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  14. #14
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Das findest du hier: http://www.tutorials.de/content/206-...ug-finden.html

    Die Sache mit Ajax: Das kommt ja in etwa dem hin, was chmee schon vorgeschlagen hat.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  15. #15
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.630
    Blog-Einträge
    4
    Nur würd ich das (bei 200.000 Einträgen) sicherlich nicht Eintrag für Eintrag machen. Sondern in Paketen - zu zB 1.000Stück - abholen, bearbeiten und dann im Paket wieder abschicken. Der größte Zeitfresser wäre in dem Fall ja der ganze Web-Krams. (Obwohl ich den Ajax-Ansatz echt nicht verstehe.. Dann kann man es auch rein in php machen - performanter)

    Und: Deine foreach-Schleife ist genau der Ansatz für ein rekursives externes php-Script, bei dem die Laufzeit die "Anzahl pro Durchgang" limitiert. Dann sind es eben bei 2 Minuten zB 2.500 Einträge und schwupps, ruft sich dieses Script wieder auf, bis es bei count() angekommen ist und bricht dann ab. Ausgaben kannst Du per POST mitschleifen und zB am Ende in eine Textdatei schreiben, die Du dann anzeigst.

    mfg chmee
    Geändert von chmee (04.01.12 um 23:50 Uhr)
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

Ähnliche Themen

  1. PHP-Files werden zum Download angeboten
    Von Peter Klein im Forum Hosting & Webserver
    Antworten: 6
    Letzter Beitrag: 15.02.10, 09:04
  2. Antworten: 26
    Letzter Beitrag: 26.09.08, 20:27
  3. XP-DFÜ-Probleme(beendet nach kurzer Zeit die Verbindung)
    Von therealcharlie im Forum Office-Anwendungen
    Antworten: 1
    Letzter Beitrag: 13.04.05, 04:15
  4. MSQL beendet sich immer selbst nach kurzer Zeit
    Von GuenterS im Forum Relationale Datenbanksysteme
    Antworten: 6
    Letzter Beitrag: 27.04.03, 17:13
  5. divx: wiedergabe bricht nach kurzer zeit ab !
    Von nils11 im Forum Microsoft Windows
    Antworten: 4
    Letzter Beitrag: 15.04.02, 15:14