Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Große Fotos online skalieren

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Große Fotos online skalieren

    Hi zusammen,

    ich habe ein kleines Script geschrieben, das über ein Formular hochgeladene Fotos zunächst verkleiner und anschließend in das endgültige Zielverzeichnis verschiebt. Hierfür verwende ich folgenden PHP-Code:

    PHP-Code:
    //Neues Bild aus JPEG-Datei erstellen
        
    header("Content-type: image/jpeg");

          
    $bild =@imagecreatefromjpeg("../bilder/cache/".$userfile_name);
        if(!
    $bild){$error_message "Could not load imagefile";}
      
        
    $imagesize=GetImageSize("../bilder/cache/".$userfile_name);
        if(!
    $imagesize){$error_message "Could not establish imagesize";}
        
        
    $width=$imagesize[0];
        
    $height=$imagesize[1];
        
        
    //Neue Groesse setzen
        
    if($zeile[3]=="quer" and $width>800)
        {
          
    $new_width 800;
          
    $faktor 800 $width;
          
    $new_height $height $faktor;
        }
        else
        {
          if(
    $zeile[3]=="hoch" and $height>800)
          {
            
    $new_height 800;
            
    $faktor 800 $height;
            
    $new_width $width $faktor;
          }
          else
          {
            
    $new_height $height;
            
    $new_width $width;
          }
        }
        
        
    //skaliertes Bild erstellen
        
    $bild_resized = @imagecreatetruecolor($new_width$new_height);
        if(!
    $bild_resized){$error_message "Could not create blank image";}
        
        if(!@
    imagecopyresampled($bild_resized$bild0000$new_width$new_height$width$height)){$error_message "imagecopyresampled faled!";}
        
          if(!@
    imagejpeg($bild_resized"../bilder/fotos/gallery/".$zeile[1]."/".$userfile_name)){$error_message "Could not create jpeg-file";}
        
        
    //Originalbild zerstoeren
          
    if(!@imagedestroy($bild)){$error_message "Could not destroy image";}
        
        
    //Datenbank aktualisieren
        
    $abfrageerg="update fotos set Skaliert='1' where ID='".$zeile[4]."'";
        
    $abfrage=mysql_query($abfrageerg);
        
        
    //Datei des Originalbilds vom Server loeschen
        
    if(!@unlink("../bilder/cache/".$userfile_name)){$error_message "Could not delete cache-file";} 
    Zur Erklärung:
    Die Variablen $zeile[x] sind Zeilen, die aus einer SQL-Datenbank ausgelesen werden. Das Format der Fotos wird bereits beim Upload ermittelt und als "hoch" bzw. "quer" in der Datenbank hinterlegt. Mit diesem Script sollen Fotos, die in den Ordner "/bilder/cache" geladen wurden skaliert und anschließend in einen Zielordner "/bilder/fotos/gallery/..." verschoeben werden. Die Skalierung soll nur erfolgen, wenn das Foto größer als 800x600 ist.


    Nun zum Problem:
    Für Fotos bis zu einer AUflösung von 1024x768 funktioniert alles wunderbar. Sobald jedoch ein größeres Bild hinzugefügt wird stürzt das Script (Dieser Code ist Teil eines Scripts, welches innerhald einer endlos-Schleife in bestimmten Zeitintervallen gewissen Funktionen, wie die Skalierung, ausführt) ab.
    Hat jemand eine Idee woran das liegen könnte? Kann PHP etwa nicht mit größeren Formaten umgehen?
    Vielen Dank schonmal im Voraus für eure Hilfe!

    stinger133

  • #2
    evt liegts an der dateigrösse...
    btw. nimm mal die ganzen @ weg und dann die Frage: An welcher Stelle hört Dein Script bei grossen BIldern auf?

    Kommentar


    • #3
      Hi HPR1974,

      die @ hab ich wieder weg gemacht. Wo genau das Script aussteigt weiß ich leider nicht. Das ist ja gerade das Problem. Obwohl ich
      PHP-Code:
      error_reporting(E_ALL); 
      gesetzt habe, setzt das Script ohne einen Error auszugeben aus. Wenn ich beim Aufruf des Scripts den Browser geöffnet lasse (was eigentlich durch
      PHP-Code:
      ignore_user_abort(true); 
      nicht nötig ist) bekomme ich lediglich eine leere Seite angezeigt. Ich habe also keine Ahnung wo genau das Problem liegt. Beim Hochladen der Dateien über ein Formular gibts übrigens keine Probleme, deshalb denke ich eigentlich, dass es nicht an der Dateigröße liegt.

      Kommentar


      • #4
        na dann nimm mal das
        header("Content-type: image/jpeg");
        weg und lass Dir die Fehler ausgeben

        Kommentar


        • #5
          bekomme so leider auch keinen Fehler ausgegeben

          Kommentar


          • #6
            Meine Güte, dann gibt überall ne Zahl aus und guck wieviele Zahlen ausgegeben werden bis das Script abbricht...

            Kommentar


            • #7
              das is doch nich dein ganzer code... da fehlt doch einiges, oder?

              Kommentar


              • #8
                Ja, das ist nur der Teil, der die Fotos skalieren soll

                Kommentar


                • #9
                  ja und meine Glaskugel ist auch trübe...

                  Kommentar


                  • #10
                    Na dann bekommst du hier eine saubere und klare von mir :

                    PHP-Code:
                    <?php

                    //Sessionhelpers einbinden
                    include 'sessionhelpers.inc.php';

                    //Datenbankverbindung herstellen
                    connect();

                    //Script soll auf weiterlaufen, wenn der Browser geschlossen wird
                    ignore_user_abort(true);

                    //Alle Errors anzeigen
                    error_reporting(E_ALL);  

                    //Maximale Scriptlaufzeit setzen
                    set_time_limit(0);

                    //Stop auf false setzen
                    $stop false;
                    $error_message="";





                    //Auslesen, ob Eventhandler angehalten werden soll
                    $abfrageerg="select * from scripts where Script='Eventhandler' LIMIT 1";
                    $abfrage=mysql_query($abfrageerg);
                    $zeilenzahl=mysql_num_rows($abfrage);

                    for (
                    $i=1$i<=$zeilenzahl$i=$i+1)
                    {
                      
                    $zeile=mysql_fetch_array($abfrage);
                        
                      if(
                    $zeile[2]==or $zeile[2]=="1")
                      {
                        
                    $stop true;
                          
                        echo 
                    "<br><br>Abbruch durch Benutzer.";
                        
                        
                        
                    $abfrageergebnis="UPDATE scripts set LastStopDate='".date("Y-m-d")."', LastStopTime='".date("H:i:s")."', LastStopReason='Canceled by user' where Script='Eventhandler'";
                        
                    $macheabfrage=mysql_query($abfrageergebnis);    
                        
                      }
                    }






                    //Kontrolldatei fuer die Abfrage des Scriptstatus blockieren
                    $fp fopen("status_eventhandler.txt""w");
                        if (
                    flock($fpLOCK_EX)) {
                            echo 
                    "Got lock!\n";
                        } else {
                            
                    $abfrageergebnis="UPDATE scripts set LastStopDate='".date("Y-m-d")."', LastStopTime='".date("H:i:s")."', LastStopReason='Could not lock!' where Script='Eventhandler'";
                            
                    $macheabfrage=mysql_query($abfrageergebnis); 
                            
                            
                    $stop true;
                        }

                        
                     
                     
                    //Forken falls moeglich und noetig
                    if(!function_exists("pcntl_fork"))
                      
                    $fork = -1;
                    else
                    {
                      while(
                    true)
                         {
                        if(
                    $stop==false)
                        {  
                             echo 
                    "Forking...";
                             
                    $fork pcntl_fork();
                             if(
                    $fork)
                             {
                                  
                    pcntl_waitpid($fork, &$status);
                            
                            if(
                    $error_message=="" or $error_message==Null)
                            {
                              
                    $error_message "Unknown error in child-process";
                            }
                            
                            
                    $whatabfrageerg="UPDATE scripts set LastStopDate='".date("Y-m-d")."', LastStopTime='".date("H:i:s")."', LastStopReason='".$error_message."' where Script='Eventhandler'";
                            
                    $dowhatabfrage=mysql_query($whatabfrageerg);         
                             }
                             else
                               break;
                        }
                        else
                          break;
                         }

                        
                     
                     
                     
                     

                       
                        

                    //Endlosschleife (eigentliches Script)    
                    while($stop==false)
                    {
                      
                      
                      
                    //Auslesen, ob nicht skalierte Fotos vorhanden sind
                      
                    $abfrageerg="select * from fotos where Skaliert='2'";
                      
                    $abfrage=mysql_query($abfrageerg);
                      
                    $zeilenzahl=mysql_num_rows($abfrage);

                      for (
                    $i=1$i<=$zeilenzahl$i=$i+1)
                      {
                        
                    $zeile=mysql_fetch_array($abfrage);
                        
                        
                    $userfile_name $zeile[7];
                        
                        
                    //Neues Bild aus JPEG-Datei erstellen
                        
                    header("Content-type: image/jpeg");

                          
                    $bild =@imagecreatefromjpeg("../bilder/cache/".$userfile_name);
                        if(!
                    $bild){$error_message "Could not load imagefile";}
                      
                        
                    $imagesize=GetImageSize("../bilder/cache/".$userfile_name);
                        if(!
                    $imagesize){$error_message "Could not establish imagesize";}
                        
                        
                    $width=$imagesize[0];
                        
                    $height=$imagesize[1];
                        
                        
                    //Neue Groesse setzen
                        
                    if($zeile[3]=="quer" and $width>800)
                        {
                          
                    $new_width 800;
                          
                    $faktor 800 $width;
                          
                    $new_height $height $faktor;
                        }
                        else
                        {
                          if(
                    $zeile[3]=="hoch" and $height>800)
                          {
                            
                    $new_height 800;
                            
                    $faktor 800 $height;
                            
                    $new_width $width $faktor;
                          }
                          else
                          {
                            
                    $new_height $height;
                            
                    $new_width $width;
                          }
                        }
                        
                        
                    //skaliertes Bild erstellen
                        
                    $bild_resized = @imagecreatetruecolor($new_width$new_height);
                        if(!
                    $bild_resized){$error_message "Could not create blank image";}
                        
                        if(!
                    imagecopyresampled($bild_resized$bild0000$new_width$new_height$width$height)){$error_message "imagecopyresampled faled!";}
                        
                          if(!
                    imagejpeg($bild_resized"../bilder/fotos/gallery/".$zeile[1]."/".$userfile_name)){$error_message "Could not create jpeg-file";}
                        
                        
                    //Originalbild zerstoeren
                          
                    if(!imagedestroy($bild)){$error_message "Could not destroy image";}
                        
                        
                    //Datenbank aktualisieren
                        
                    $abfrageerg="update fotos set Skaliert='1' where ID='".$zeile[4]."'";
                        
                    $abfrage=mysql_query($abfrageerg);
                        
                        
                    //Datei des Originalbilds vom Server loeschen
                        
                    if(!@unlink("../bilder/cache/".$userfile_name)){$error_message "Could not delete cache-file";}
                        
                        
                    //100 Millisekunden warten und dann weiter zum naechsten Foto
                        
                    usleep(100000);
                        
                      }
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                    //Versand von Erinnerungsmails an inaktive Mitglieder
                      
                    $sersabfrageerg="select * from users";
                      
                    $sersabfrage=mysql_query($sersabfrageerg);
                      
                    $serszeilenzahl=mysql_num_rows($abfrage);

                      for (
                    $i=1$i<=$serszeilenzahl$i=$i+1)
                      {
                        
                    $serszeile=mysql_fetch_array($sersabfrage);


                        if(
                    $serszeile[1]!="Administrator" and $serszeile[1]!="")
                        {

                          if(
                    $serszeile[22]!=Null and $serszeile[22]!="" and $serszeile[22]!="0")
                          {
                            if(
                    $serszeile[16]==Null or $serszeile[16]=="" or $serszeile[16]=="0")
                            {
                              
                    $datum=$serszeile[22];
                              
                    $sendafterdays=84;
                            }
                            else
                            {
                              
                    $datum=$serszeile[16];
                              
                    $sendafterdays=28;
                            }
                          }
                          else
                          {
                            if(
                    $serszeile[16]==NULL or $serszeile[16]=="" or $serszeile[16]=="0")
                            {
                              
                    $datum=$serszeile[9];
                              
                    $sendafterdays=14;
                              
                    $angemeldetam=$serszeile[9];
                              
                    $firstVisit=1;
                            }
                            else
                            {
                              
                    $datum=$serszeile[16];
                              
                    $sendafterdays=7;
                              
                    $angemeldetam=$serszeile[9];
                              
                    $firstVisit=1;
                            }
                          }


                          
                    $d=explode(".",$datum);
                          
                    $unix=mktime(0,0,0,$d[1],$d[0],$d[2]);
                          
                    $stamp=time();
                          
                    $diff=$stamp-$unix;
                          
                    $diff=$diff/86400;
                          
                    $enddiff=floor($diff);
                      
                          if(
                    $serszeile[22]!=Null and $serszeile[22]!="" and $serszeile[22]!="0")
                          {
                            
                    $zeichen=explode(".",$serszeile[22]);
                          }
                          else
                          {
                            
                    $zeichen=explode(".",$serszeile[9]);
                          }
                          
                          
                    $rechne=mktime(0,0,0,$zeichen[1],$zeichen[0],$zeichen[2]);
                          
                    $aktuell=time();
                          
                    $rechnediff=$aktuell-$rechne;
                          
                    $rechnediff=$rechnediff/86400;
                          
                    $gesdiff=floor($rechnediff);
                          
                          
                          if(
                    $serszeile[22]!=Null and $serszeile[22]!="" and $serszeile[22]!="0")
                          {
                            
                    $lastvisit $serszeile[22];
                          }
                          else
                          {
                            
                    $lasvisit $serszeile[9];
                          }
                      

                          if(
                    $enddiff>=112)
                          {
                            
                    $sendafterdays=14;
                          }

                          if(
                    $enddiff>=154)
                          {
                            
                    $sendafterdays=7;
                          }


                          if(
                    $enddiff>=$sendafterdays)
                          {
                            
                    $von 'From: Account-Verwaltung@mydomain.de' "\r\n";
                            
                    $von .= "Content-Type:text/html\r\nContent-Transfer-Encoding:8bit\r\n";
                      
                            if(
                    $firstVisit!=and $firstVisit!="1")
                            {
                              
                    $subject "Wir vermissen dich!";
                              
                    $message "...";
                            }
                            else
                            {
                              
                    $subject "Inaktiver Account!";
                              
                    $message "...";
                            }
                      
                            if(
                    $serszeile[13]!=null and $serszeile[13]!="")
                            {
                              if(!
                    mail($serszeile[4], $subject$message$von)){$error_message "Could not send mail to user";}
                        
                              
                    $empfaenger "user@mydomain.de";
                              
                    $betreff "Kopie: ".$subject." Gesendet an: ".$serszeile[1]."";
                              if(!
                    mail($empfaenger$betreff$message$von)){$error_message "Could not send mail to webmaster";}

                              
                    //Datenbank updaten
                              
                    $datumheute date("d.m.Y");

                              
                    $nocheinabfrageerg="UPDATE users set ErinnerungsMail='".$datumheute."' where UserID='".$serszeile[0]."' limit 1";
                              
                    $nocheineabfrage=mysql_query($nocheinabfrageerg);
                            }
                          }
                        }
                        
                        
                    usleep(100000);
                      }
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                    //Automatischer Logout inaktiver User
                      
                    auto_logout();
                      
                      
                      
                      
                      
                      
                      
                      
                    //Termine in Chronik eintragen  
                      
                    $sqlbefehl="select * from termine where chronik='2'";
                      
                    $ausfuehren=mysql_query($sqlbefehl);
                      
                    $sql_rows=mysql_num_rows($ausfuehren);

                      for (
                    $i=1$i<=$sql_rows$i=$i+1)
                      {
                        
                    $sql_row_number=mysql_fetch_array($ausfuehren);
                        
                        
                    $ziel mktime(0,0,0,$sql_row_number[5],$sql_row_number[7],$sql_row_number[6]);
                        
                    $heute mktime(0,0,0,date("m",time()),date("d",time()),date("Y",time()));
                        
                    $diff = ($ziel-$heute)/60/60/24;

                        if (
                    $diff<0)
                        {
                          
                    $sql_event="insert into chronik values ('".$sql_row_number[1]."', '".$sql_row_number[0]."', '".$sql_row_number[4]."', '".$sql_row_number[7]."', '".$sql_row_number[5]."', '".$sql_row_number[6]."', '0')";
                          
                    $do_sql_event=mysql_query($sql_event);  
                          
                          
                    $sql_action="update termine set chronik='1' where id='".$sql_row_number[8]."'";
                          
                    $do_sql_action=mysql_query($sql_action);
                        }
                      }
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                      
                    //Auslesen, ob Eventhandler angehalten werden soll
                      
                    $dasletzteabfrageerg="select * from scripts where Script='Eventhandler' LIMIT 1";
                      
                    $dieletzteabfrage=mysql_query($dasletzteabfrageerg);
                      
                    $dieletztezeilenzahl=mysql_num_rows($dieletzteabfrage);

                      for (
                    $i=1$i<=$dieletztezeilenzahl$i=$i+1)
                      {
                        
                    $dieletztezeile=mysql_fetch_array($dieletzteabfrage);
                        
                        if(
                    $dieletztezeile[2]==or $dieletztezeile[2]=="1")
                        {
                          
                    $stop true;
                          
                          echo 
                    "<br><br>Cancelt by user.";
                          
                          
                          
                    $dochnichtabfrageerg="UPDATE scripts set LastStopDate='".date("Y-m-d")."', LastStopTime='".date("H:i:s")."', LastStopReason='Cancelt by user' where Script='Eventhandler'";
                          
                    $cochnichtabfrage=mysql_query($dochnichtabfrageerg);       
                          
                        }
                      }








                      
                      
                      
                      
                      
                      
                    //2 Sekunden warten und dann neuen Durchgang starten
                      
                    sleep(2);
                      
                    }
                    //of while



                    ?>
                    Muss aber dazu sagen, dass außer das mit den großen Fotos alles einwandfrei funktioniert, deshalb hab ich auch nur den Teil gepostet

                    Kommentar


                    • #11
                      hab jetzt mal den energischen Tipp von cycap benutzt und festgestellt, dass das Script nach der Zeile
                      PHP-Code:
                          $bild_resized = @imagecreatetruecolor($new_width$new_height);
                          if(!
                      $bild_resized){$error_message "Could not create blank image";} 
                      abstürzt.

                      Kommentar


                      • #12
                        Zitat von stinger133 Beitrag anzeigen
                        hab jetzt mal den energischen Tipp von cycap benutzt und festgestellt, dass das Script nach der Zeile
                        PHP-Code:
                            $bild_resized = @imagecreatetruecolor($new_width$new_height);
                            if(!
                        $bild_resized){$error_message "Could not create blank image";} 
                        abstürzt.
                        Und was macht das @ da noch???

                        Kommentar


                        • #13
                          also Das is mal ein super code...
                          Du hast da m.E. teilweise ne Menge unsinn drin...
                          zB.
                          $abfrageerg="select * from scripts where Script='Eventhandler' LIMIT 1";
                          $abfrage=mysql_query($abfrageerg);
                          $zeilenzahl=mysql_num_rows($abfrage);

                          for (
                          $i=1; $i<=$zeilenzahl; $i=$i+1)
                          $zeilenzahl kann nur 0 oder 1 sein warum dann eine for() schleife?

                          Warum schliesst Du nie die Datei?

                          Warum machst Du eine endlosschleife?

                          header("Content-type: image/jpeg");
                          und später ein echo???
                          $abfrageerg="select * from fotos where Skaliert='2'";
                          $abfrage=mysql_query($abfrageerg);
                          $zeilenzahl=mysql_num_rows($abfrage);

                          for (
                          $i=1; $i<=$zeilenzahl; $i=$i+1)
                          {
                          $zeile=mysql_fetch_array($abfrage);



                          wie wäre es mit
                          while($zeile=mysql_fetch_array($abfrage))

                          $bild =@imagecreatefromjpeg("../bilder/cache/".$userfile_name);
                          weg mit dem @


                          naja und so weiter. aber ich würde echt mal nbissi verschlanken und dann schauen wo das Script genau abbricht...
                          Was ist mit max_execution_time ??

                          Kommentar


                          • #14
                            was steht denn bei dem betroffenen Bild in $zeile[3]?

                            Kommentar


                            • #15
                              das bild ist in $zeile[3] als querformat deklariert, also $zeile[3]="quer"

                              Kommentar

                              Lädt...
                              X