PHP (SICHER) konstant laufen lassen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP (SICHER) konstant laufen lassen

    Hallo,
    nun habe ich meine Import Schnittstelle fertig.
    (local getestet)

    Aber so ganz bin ich noch nicht zu frieden.
    Also mein Script funktioniert so:
    CSV Datei aus ZIP Archiv entpacken.
    CSV Datei umwandeln in temp. CSV Datei die in meinem DB format ist
    Mein temp Datei mit load data einlesen
    Ein Bild nach dem anderen aus dem ZIP Archiv entpacken
    Bild testen und pro Bild 3 thumbs erstellen

    Das läuft auch alles wunderbar und unendlich.
    Ich habe das so umgesetzt, das ich immer die Zeit
    vor jeder Schleife und funktion abfrage.

    Diese Zeit kann ich mir selber einstellen, z.b. 2 sec. oder 20 sec.
    Und in diesem intervall ruft sich das Programm nun selber auf, bis es fertig ist.

    Wenn ich jetzt aber mein Taskmanager aufrufe sehe ich die
    CPU Auslastung.

    Und ich will das Script so sicher wie möglich laufen lassen.
    Wenn ich es so laufen lasse
    PHP-Code:
                if ($ObjImport->load()) {
                    
    // Die Zip Datei wurde erstellt.                
                    
    header("Location: ".$_SERVER['PHP_SELF']."?import=fertig&code=".$GetCode); 
                } else {
                    
    header("Location: ".$_SERVER['PHP_SELF']."?import=run&code=".$GetCode); 
                } 
    beträgt die CPU Auslastung 100%

    Wenn ich es so laufen lasse
    PHP-Code:
                if ($ObjImport->load()) {
                    
    // Die Zip Datei wurde erstellt.                
                    
    header("Location: ".$_SERVER['PHP_SELF']."?import=fertig&code=".$GetCode); 
                } else {
                    
    #header("Location: ".$_SERVER['PHP_SELF']."?import=run&code=".$GetCode); 
                
    }

    // im html head bereich
    if (!$ObjImport->stop) {
        
        
    // Wenn das Programm nicht gestoppt wurde
        // Soll sich der iframe immer aktuallisieren
        
    echo "<meta http-equiv=\"refresh\" content=\"1\">\n";

    Geht es immer hoch und runter.
    Je nachdem wie ich im Script:
    PHP-Code:
        var $_MaxLaufZeit       2;    // Angabe in Sec. Wie lange das Script max. laufen darf. 
    einstelle.

    Hat einer ein Tip, wie man es laufen lassen kann, wo die CPU Auslastung kostant 50% oder 40 % ist?

    Ich kann den Webserver doch nicht mit 100% belasten?
    Gut geraten ist halb gewußt.

  • #2
    Und mich würde auch noch was interessieren.
    Ich will diesen import am liebsten automatisch ausführen.
    Aber kann ich ein Cronjob auf so ein Script setzten?

    Läuft das Script denn auch bis es fertig ist?
    Hat damit jemand Erfahrung?
    Oder wäre es besser sowas in Perl oder 'so' zu schreiben?
    Gut geraten ist halb gewußt.

    Kommentar


    • #3
      also, die schwankungen kommen zu stande, weil zwischen dem ausführen ja pausen sind.

      Aber kann ich ein Cronjob auf so ein Script setzten?
      ist die frage, womit du das script aufrufst. mit php und wget wirds nicht gehen. lynx verstehts wohl auch nicht. wenn du aber nen browser verwendest, der die weiterleitungen versteht, ginge es. dann wäre allerdings die frage, wann er abbricht.

      ansonsten musst du die parameter (aus der url) irgendwo wegspeichern. das script muss sich die dann am anfang immer wieder rausholen und entscheidet dann, was zu tun ist.

      Läuft das Script denn auch bis es fertig ist?
      Hat damit jemand Erfahrung?
      Kommt auf deine Einstellungen an. Zu Risiken und Nebenwirkungen fragen Sie ihren Admin oder Webhoster.

      Kommentar


      • #4
        Original geschrieben von TobiaZ
        also, die schwankungen kommen zu stande, weil zwischen dem ausführen ja pausen sind.
        Ja, nun kann ich mein Script z.b. 2 sec. laufen lassen und dann 2 sec. Pause machen.
        Dann wäre es ja immer 100% und 0%. Lieber wäre mir konstant 50%, also eine mischung von beidem. Wenn ich aber in den Schleifen und Funktionen sleep oder so verwende, dann bleibt ja auch die Belastung.

        Mir fällt momentan keine Möglichkeit ein, so ein Script langsam laufen zu lassen, außer die Laufzeit zu senken und dem Script damit eine Pause zu verschaffen. Leider, denn damit braucht es für den import länger, obwohl es effektiver arbeiten könnte.

        Also mit den cronjobs hab ich noch nicht viel Ahnung.
        Ich stell mir das so vor, das eine Script einmal aufgerufen wird und fertig.
        Aber ich habe auch schon Spider von Suchmaschinen gelesen, die eine Homepage wie ein Browser aufrufen können.

        Ja, ich kann mir die Parameter beim Aufruf zwischenspeichern, und nach jedem Aufruf abfragen. Aus einer db zum Beispiel, aber wenn der cronjob nach paar sec. nicht mehr da ist, läuft das php script ja nicht.

        Mhh, na mit dem cronjob muß ich mich mich mal noch erkundigen.

        Vielleicht hat ja noch einer Vorschläge mit dem konstant laufen lassen.
        Gut geraten ist halb gewußt.

        Kommentar


        • #5
          getrusage()

          Kommentar


          • #6
            Nicht schlecht. Sowas kannte ich noch nicht.
            Leider gibt er mir auf localhost

            Fatal error: Call to undefined function getrusage() in c:\www\10062006\public_html\webmaster\verwaltung\uebersicht.php on line 22

            Hab aktuelle PHP-Version: 5.0.2 drauf und
            die Funktion müßte eigendlich laufen.
            (PHP 3 >= 3.0.7, PHP 4, PHP 5)


            @ onemorenerd

            Ich geh mal davon aus, das du mich nur in die richtige Richtung schupsen willst.

            Nicht nur immer die Zeit messen, sondern auch die Arbeitsleistung.
            Bei Überschreitung eines definierten Grenzwertes abbrechen und Seite neu laden.

            Nur wie kann das jetzt sein, das mein PC die Funktion nicht kennt?
            Gut geraten ist halb gewußt.

            Kommentar


            • #7
              Microsoft unterstützt getrusage nicht. Linux schon.

              Zum Problem: Schließe nicht von der CPU-Auslastung auf deiner Windowsbox auf die Last, die ein Linuxserver hätte. Dessen Multiprocessing/-threading funktioniert anders. Miß mit microtime() und getrusage() nach.

              Hier noch einige Links dazu:
              http://www.strassenprogrammierer.de/..._tipp_419.html
              http://www.phpdig.net/ref/rn47re979.html

              Kommentar


              • #8
                Also momentan messe ich so die Zeit

                PHP-Code:
                #Programmstart
                $this->_ZeitStart array_sum(explode(" ",microtime())); 
                PHP-Code:
                # Zeit bei jedem Aufruf
                $this->_ZeitLoad array_sum(explode(" ",microtime())); 
                Und denn in den jeweiligen Funktionen und Schleifen.
                PHP-Code:
                            $_ZeitBisJetzt array_sum(explode(" ",microtime())) - $this->_ZeitLoad;
                            if (
                $this->_MaxLaufZeit $_ZeitBisJetzt) {
                                return 
                false;      // Funktion mit falsch beenden                                
                            

                Wenn eine Funktion mit falsch beendet wird,wird das Script nochmal aufgerufen. Es sei es wird im Programm ein Fehler gemeldet. Denn wird das Programm abgebrochen und der Fehler ausgegeben.

                Läuft alles wunderbar.

                Ich habe mir das jetzt im Admin Bereich in ein kleine POP Up Fenster gebaut.
                Da zeigt er mit in % den Programmstatus an.
                Wenn sich das noch paar Wochen Laufzeit bewärt, könnte ich es jedem Kunden selber importieren lassen, denn brauch ich es nicht automatisch machen.

                @onemorenerd
                Danke für die Mühe mit den Links. :-)
                Denn kann ich ja die Funktion doch verwenden, denn der Webserver ist Linux.

                Die meiste Zeit hängt er sich ja an den Bilder auf. bzw bei der Tumbs Erstellung.
                Das umwandeln der Csv und anschließenden load date geht ratz fatz. :-)

                Denn kann man das Thema mit der konstanten Laufleistung ja abschließen.
                Das wäre ja geklärt. :-)

                Das i Tüpfelchen wäre jetzt noch, das es auch automatisch laufen könnte und die User erst garnichts davon erfahren.
                Ich hab auch nicht jeden Tag lust alles mit der Hand einzufügen.

                Zumindest könnte man jeden Tag 30 Cronjob setzten in abstand von 1 min.

                Das würde vielleicht gehen, aber das würde ja denn nur für ein User gehen.
                Wenn mehrere User etwas importieren möchten, muß ich ja jeden Ordner von den User durchgucken.

                Fals jemand schon mal sowas gemacht hat, kann er sich gerne mal melden.
                Gut geraten ist halb gewußt.

                Kommentar

                Lädt...
                X