Ankündigung

Einklappen
Keine Ankündigung bisher.

Script reagiert nicht?!?!

Einklappen

Neue Werbung 2019

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

  • Script reagiert nicht?!?!

    Hallo!
    Ich habe folgendes Problem.
    Ich habe eine Plattform mit Usern. Es gibt einen img_temp Ordner wo man per eingeschränktem FTP Zugang dort Bilder abloaden kann. Der User kann darauf hin eine neue Gallerie erstellen.

    Mein Konzept ist:
    Nach ein paar Abfragen ließt ein Script die Bilder nach einander aus dem temporären Ordner aus, skalliert sie auf eine genormte größe und legt die dann in einen passenden Ordner ab. Dannach werden die Thumbnails erstellt.

    Mein Problem:
    Auf meinem lokalen Rechner hab ich das schon ausprobiert. Wenn allerdings mehr als ca70 Bilder im Ordner sind brauch das skript länger als 30 sekunden und bricht ab. Deswegen zähle ich die vergange Zeit mit und breche dann selbst ab, sodass ich auf das nächste Script wechle und die Vorschaubilder erstelle.
    Das klappt auf meinem lokalen Server super, jedoch auf dem Webspace ist mir auf gefallen, dass wenn ein script zu lange läuft da keine Exception kommt sondern es einfach stehen bleibt.
    Und so auch bei meiner Gallerie, wenn man ein paar Bilder drin hat und es sind zu viele, bekommt man nichteinmal die Seite des scripts angezeigt. Man sieht dann immernoch die ausgangsseite mit dem link und in der Statusleiste steht dann nach ein paar Sekunden auch "Fertig".

    Ich weiß net was ich tun soll.

    Auf meinem PC läuft das neue PHP5 und auf dem Webserver des Anbieters
    PHP4u Version 3.0
    Based on PHP-5.0.2

    Danke im Vorraus, mit freundichen Grüßen Sven


  • #2
    Hallo,

    beschränk dein Script doch darauf, nur 10 Bilder zu verarbeiten und sich danach selbst aufzurufen, mit einem Counter um dann eben die nächsten 10 zu verarbeiten.

    Kommentar


    • #3
      Re: Script reagiert nicht?!?!

      Zitat von Finkman
      [...]Nach ein paar Abfragen ließt ein Script die Bilder nach einander aus dem temporären Ordner aus, skalliert sie auf eine genormte größe und legt die dann in einen passenden Ordner ab.[...]
      Wie machst du das? Poste doch mal bitte deinen Code.

      Gruß,
      Andreas

      Kommentar


      • #4
        Zitat von Zergling
        beschränk dein Script doch darauf, nur 10 Bilder zu verarbeiten und sich danach selbst aufzurufen, mit einem Counter um dann eben die nächsten 10 zu verarbeiten.
        Hab ich mir auch schon gedacht, aber isses net seltsam, dass da keine Exception filegt?
        Code:
        <?php session_start();
        include 'autoload.inc';
        ?>
        <html>
        
        <head>
        <?php
        
        function microtime_float()
        {
           list($usec, $sec) = explode(" ", microtime());
           return ((float)$usec + (float)$sec);
        }
        
        $Target = $_GET['ID'];
        $secStart = time();
        $time_start = microtime_float();
        
        
          $thumbsize=120;
          $normalsize =700;
          $imgDir = $Target;
          $srcDir = '../uploads/img_upload';
          $thmbDir = 'thumbs';
          $stellen = 3;
          $i = 0;
        
        if(!file_exists($imgDir)) mkdir($imgDir);
        if(!file_exists($imgDir .'/' .$thmbDir)) mkdir($imgDir .'/' .$thmbDir);
        if(!file_exists($imgDir .'/data')) mkdir($imgDir.'/data');
        $handle=opendir($srcDir);
        while ($imagefile_name = readdir ($handle)) {
        $len = strlen($imagefile_name);
        $ext = substr($imagefile_name,$len-4,4);
            if (($imagefile_name != "." && $imagefile_name != "..") && (($ext == ".jpg") || ($ext == ".JPG")))
            {
            $imageNumber = '' .$i;
            $imageNumber = str_pad($imageNumber,$stellen,'0',STR_PAD_LEFT);
        
        
        
        
           if((time()-$secStart)>= 29) { echo "
        
        Sorry, but the Script was running for 29 Seconds and is at image number $i</p>\n
        
        The konvertion has not yet finished. Because of the server definated execution timeout of 30 Seconds the Script cannot handel all of the selected images. Do not select more than 50 pictures!</p>";  return; }
           $imgfile = "$imagefile_name";
           list($width, $height) = getimagesize($srcDir .'/' .$imgfile);
           $imgratio=$width/$height;
           if ($imgratio>1){
        
             $onewwidth = $normalsize;
             $onewheight = $normalsize/$imgratio;}
           else{
        
             $onewheight = $normalsize;
             $onewwidth = $normalsize*$imgratio;}
            //save resized original
           $orig = ImageCreateTrueColor($onewwidth,$onewheight);
           $source = imagecreatefromjpeg($srcDir .'/' .$imgfile);
           imagecopyresized($orig, $source, 0, 0, 0, 0, $onewwidth, $onewheight, $width, $height);
           imagejpeg($orig,$imgDir .'/IMG_' .$imageNumber .'.jpg');
        
        
        
        
            $i++;
            }
        }
        
        echo "<meta http-equiv=\"refresh\" content=\"3; URL=thumb.php5?target=".$imgDir."&".strip_tags(session_id())."\">\n";
        ?>  <title></title>
        </head>
        
        <body><?php
        closedir($handle);
        $time_end = microtime_float();
        $time = $time_end - $time_start;
        
        $posP = strpos($time,'.');
        $time = substr($time,0,3+$posP);
        if($posP == 1) $time = '0' .$time;
        echo "<font color=\"#000000\" face=\"Arial\" size=\"1\">Succsesfully generated resized Originals in $time seconds</font>";
        
        ?>
        
        </body>
        
        </html>

        Kommentar


        • #5
          Die Zeit mitzuzählen finde ich nicht gut. Ich würde ein Init machen, das schreibt die Dateinamen in die Session und dann gehts los. Finde ich sauberer, außerdem kannste dann ne Art Fortschrittsbalken ausgeben. Dein Skript ist mir jetzt etwas zu lang zum mal schnell nen-Logik-Fehler-suchen/finden

          Kommentar


          • #6
            Was steht denn in der besagten php.ini bei max_execution_time?

            Bist Du sicher, dass der Wert dort größer gleich 30 Sekunden ist?

            Kommentar


            • #7
              ja bin da ganz sicher!
              was mir bei der Session auch noch auffält:
              Das manchmal datensätze verschwinden... gibts da auch ne größen Beschränkung?


              Was mir noch einfällt.
              Ich kenne die Dateinamen net. Ich weiß nur, dass die Dateien *.jpg sind, wird aber wohl irgendwie gehen

              Kommentar


              • #8
                Zitat von Finkman
                ja bin da ganz sicher!
                Folglich wird also bei diesem [minimierten] Skript nach 29 Sekunden, wie erwartet, 'blub' ausgegeben?
                PHP-Code:
                <?php
                $secStart 
                time();

                while (
                true)
                  if ((
                time()-$secStart)>= 29)
                    die(
                'blub');
                ?>
                Zitat von Finkman
                Ich kenne die Dateinamen net. Ich weiß nur, dass die Dateien *.jpg sind, wird aber wohl irgendwie gehen
                glob()

                Kommentar


                • #9
                  Zitat von karl-150
                  Zitat von Finkman
                  ja bin da ganz sicher!
                  Folglich läuft also bei diesem [minimierten] Skript alles wie erwartet?
                  PHP-Code:
                  <?php
                  $secStart 
                  time();

                  while (
                  true)
                    if ((
                  time()-$secStart)>= 29)
                      die(
                  'blub');
                  ?>
                  Zitat von Finkman
                  Ich kenne die Dateinamen net. Ich weiß nur, dass die Dateien *.jpg sind, wird aber wohl irgendwie gehen
                  glob()
                  ne da passiert auch nichts!
                  Ich hatte auch mal eine "endlos schleife" ausversehen in ein skript gebaut und da ist dann auch "nichts" passiert!

                  Finkman hat Folgendes geschrieben:
                  Ich kenne die Dateinamen net. Ich weiß nur, dass die Dateien *.jpg sind, wird aber wohl irgendwie gehen


                  glob()
                  Das Problem ist, bei der genannten Idee, dass ich net weiß welche Dateien schon bearbeitet sind.

                  Ich hatte aber grad im Bad *g* die Idee, dass ich einfach 10 durcharbeite die dann lösche und das skript nochmal starte.

                  Vielen Dank für die Tipps

                  Kommentar


                  • #10
                    Zitat von Finkman
                    ja bin da ganz sicher!
                    Kannst Du bitte mal einen Link auf Deine phpinfo posten?

                    Das kommt mir etwas Spanisch vor.

                    /edit:
                    Sorry, hatte das übersehen:
                    Zitat von Finkman
                    Man sieht dann immernoch die ausgangsseite mit dem link und in der Statusleiste steht dann nach ein paar Sekunden auch "Fertig".

                    Kommentar


                    • #11
                      Wozu löschen? Ich sagte doch, lies alle in einen Array, speicher den Array in der Session und übergeb nur die ID oder speicher die von mir aus auch in der Session und start das Skript neu.

                      Kommentar


                      • #12
                        Entweder du nutzt

                        PHP-Code:
                        <?php
                        set_time_limit
                        (0);
                        ?>
                        oder du sorgst einfach dafür, dass dein skript in passabler zeit abläuft. Skripte, die länger laufen, solltest du einfach auf der Console von Hand oder per cron starten, aber keinem user zumuten...

                        Gruss

                        Kommentar


                        • #13
                          Zitat von mistemef
                          Entweder du nutzt

                          PHP-Code:
                          <?php
                          set_time_limit
                          (0);
                          ?>
                          Das wird ihm wohl auch nich weiterhelfen.

                          Laut seiner Angabe beinhaltet max_execution_time den Wert 30.
                          Außerdem bricht das Laden des Scipts ohne jegliche Fehlermeldung ab [wenn ich das richtig verstanden habe].

                          Kommentar

                          Lädt...
                          X