Ankündigung

Einklappen
Keine Ankündigung bisher.

File-Upload in MySQL-Datenbank nicht möglich.

Einklappen

Neue Werbung 2019

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

  • File-Upload in MySQL-Datenbank nicht möglich.

    Tach allerseits,

    ich habe nun Probleme mit meinem File-Upload.
    Mit PHP 5.2.6 unter Windows klappt alles wunderbar.

    Nun habe ich einen OpenSuse 13.1 Server mit PHP 5.4.2 laufen, auf dem leider mein Upload-Skript nicht mehr korrekt funktioniert.

    Das Skript verkleinert das hochzuladende Foto auf eine für mich akzeptable Größe, setzt ein Wasserzeichen auf das Foto und speichert es einerseits in ein Verzeichnis (hat bestimmte Gründe) und direkt danach in die Datenbank.

    Anbei ein Code-Auszug:
    PHP-Code:
       include('ImageResizer.php'); 
       
    $image = new SimpleImage(); 
       
    $image->load($_FILES['image']['tmp_name']); 
       
    $image->resize(800,600); 
       
       
    $image->save($pathToTempFile.$fname); 
       
       
    $tmp_rand_imagename rand(1,999);
       
    $newfile $tmp_rand_imagename.".JPG";
        
    watermark_text($pathToTempFile.$fname$pathToTempFile.$newfile);

        
    $fp           fopen($pathToTempFile.$newfile'r');
        
    $content      fread($fpfilesize($ftmp));
        
    $content      addslashes($content);
        
    $gnum          =  $_SESSION['x_auftragsnummer'];
        
    $kgsdb_kunde $_SESSION['kgsdb_kunde'];
        
    fclose($fp);

       
    //Bauen des INSERTS 
       
    $new_file_name $newfile;
        
        @
    $ftmp $_FILES['image']['tmp_name'];
        @
    $oname $_FILES['image']['name'];
        @
    $fname $_FILES['image']['name'];
        @
    $fsize $_FILES['image']['size'];
        @
    $ftype $_FILES['image']['type'];
        
        
    //print_r($_FILES);
        
    $sql2 "INSERT INTO file_upload (gutachtennummer, name, type, size, content, kgsdb_kunde) 
        VALUES('"
    .$gnum."','".$new_file_name."', '".$ftype."', ".$fsize.", '".$content."', '".$kgsdb_kunde."')"
        
    $result2 mysql_query($sql2) or die('Fehler (3): ' mysql_error());
        
    $file_id mysql_insert_id(); 
    Weiss jemand ob sich etwas zwischen den PHP-Versionen dahingehend bis Version 5.4.2 geändert hat?

    Gruß an die Gemeinde


  • #2
    Der Fehler liegt in Zeile 42 deines geheimen Codes.

    Was ist ein OS 13.1??? Aber vermutlich ist es ein Rechteproblem. Im Gegensatz zu Windows haben andere Betriebssysteme gute, aber auch strenge Rechtetrennungen.
    Windows Server gehören NICHT ins Internet!

    Dildo? Dildo!

    Kommentar


    • #3
      "fluppt"? Setz mal bitte nen anständigen Threadtitel und erklär mir, was das im Fortgeschrittenen Bereich zutun hat.
      "es geht plötzlich nicht mehr" ist KEINE ausreichende Fehlerbeschreibung.
      Zitat von nikosch
      Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

      Kommentar


      • #4
        schon im Errorlog nachgesehen?
        Relax, you're doing fine.
        RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

        Kommentar


        • #5
          Erstmal vielen Dank für die schnellen Reaktionen.
          Und entschuldigt bitte das ich oben in meinem Posting nichts vernünftig erklärt habe. Auch meine Wortwahl war nicht ganz korrekt. Sorry. Habe ich oben korrigiert und auch einen Code-Auszug mal reingesetzt.

          Hoffe, das hilft uns weiter.

          Kommentar


          • #6
            Die Berechtigungen passen soweit.
            Im SQL kommt leider nichts an, habe ich das Gefühl.
            print_r($_FILES) gibt bestimmt etwas aus, aber ich sehe es nicht.

            error_reporting(E_ALL) ist gesetzt.
            ini_set('display_errors', '1'); ist ebenfalls mal sicherheitshalber gesetzt.

            Keine Fehler.

            Das Error-Log zeigt mir auch nichts diesbezüglich an. Hmm....

            Kommentar


            • #7
              Ähm, warum schreibst du Variablen um:

              PHP-Code:
              $gnum          =  $_SESSION['x_auftragsnummer'];
                  
              $kgsdb_kunde $_SESSION['kgsdb_kunde'];

                 
              //Bauen des INSERTS 
                 
              $new_file_name $newfile;
                  
                  @
              $ftmp $_FILES['image']['tmp_name'];
                  @
              $oname $_FILES['image']['name'];
                  @
              $fname $_FILES['image']['name'];
                  @
              $fsize $_FILES['image']['size'];
                  @
              $ftype $_FILES['image']['type']; 
              Damit der Quellcode länger wird? Und was sollen die @ und dann ein und die selbe Variable auf zwei unterschiedliche Variablen umschreiben?
              Und schon mal kontrolliert, was in $_FILES['image']['error'] steht?
              Und wo kommt
              PHP-Code:
              $pathToTempFile.$fname 
              her?
              </span></span>
              Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

              Kommentar


              • #8
                Zitat von centauro Beitrag anzeigen
                Tach allerseits,
                Das Skript verkleinert das hochzuladende Foto auf eine für mich akzeptable Größe, setzt ein Wasserzeichen auf das Foto und speichert es einerseits in ein Verzeichnis (hat bestimmte Gründe) und direkt danach in die Datenbank.

                Gruß an die Gemeinde
                Mir erschliesst sich nicht der Sinn, warum du das Bild zweimal speicherst.
                Einmal auf die Festplatte, und dann nochmal in die Datenbank (somit auch auf die Festplatte)
                Dadurch erzeugst du enorm viel Speicherbedarf.

                Speicher doch einfach die File ID in der Datenbank und verarbeite mit PHP die Ausgabe von der Festplatte.

                Kommentar


                • #9
                  @uha:
                  Wenn Du die Session-Variablen meinst, dann schreibe ich sie deshalb um damit ich mir später bei Wiederverwendung das Schreiben ersparen kann.

                  Mit den zwei unterschiedlichen Variablen auf ein und dieselbe Variablen.....hast Recht. Habe ich völlig übersehen.
                  Soll so nicht sein. :-/

                  PHP-Code:
                  $pathToTempFile.$fname 
                  kümmert erstmal nicht. Das brauche ich an anderer Stelle.

                  Kommentar


                  • #10
                    @MrJung:
                    Das hat schon seinen Sinn und seine Gründe weshalb ich das so mache. Sollte zunächst nicht stören.

                    Aber.....ich habe bisher noch nicht erkennen können warum das Foto nicht in die Datenbank gespeichert wird.
                    Seht Ihr den Fehler?

                    Kommentar


                    • #11
                      Hallo nochmal...ich habe das Skript nun so umprogrammieren können, sodass nun auch das SQL für den Upload funktioniert.

                      Nun noch ein kleines Problem:

                      Beim upload verkleinere ich die Fotos.

                      Auf meinem Testserver dauert ein upload eines Fotos mit einer Größe von 6MB ca. 20 Sekunden.
                      Auf dem künftigen Produktionsserver dauert der upload leider 2 Minuten.

                      Woran kann das liegen?

                      Anbei der Code:

                      PHP-Code:
                      ini_set('memory_limit''256M');
                      class 
                      SimpleImage {   
                      var 
                      $image
                      var 
                      $image_type;   

                      function 
                      load($filename) {   
                        
                      $image_info getimagesize($filename); 
                        
                      $this->image_type $image_info[2]; 
                        
                        if( 
                      $this->image_type == IMAGETYPE_JPEG ) {
                        
                      $this->image imagecreatefromjpeg($filename); 
                        } elseif( 
                        
                      $this->image_type == IMAGETYPE_GIF 
                        
                      ) {   
                        
                      $this->image imagecreatefromgif($filename); 
                        } elseif( 
                        
                      $this->image_type == IMAGETYPE_PNG 
                        
                      ) {   
                        
                      $this->image imagecreatefrompng($filename); 
                        } } 
                        
                        function 
                      save($filename$image_type=IMAGETYPE_JPEG$compression=75$permissions=null) {   
                        
                        if( 
                      $image_type == IMAGETYPE_JPEG ) { 
                          
                      imagejpeg($this->image,$filename,$compression); 
                          } elseif( 
                          
                      $image_type == IMAGETYPE_GIF ) {   
                          
                      imagegif($this->image,$filename); 
                          } elseif( 
                          
                      $image_type == IMAGETYPE_PNG ) {   
                          
                      imagepng($this->image,$filename); 
                          } if( 
                      $permissions != null) {   
                            
                      chmod($filename,$permissions); } 
                            } function 
                      output($image_type=IMAGETYPE_JPEG) {   
                            if( 
                      $image_type == IMAGETYPE_JPEG ) { 
                            
                      imagejpeg($this->image); 
                            } elseif( 
                      $image_type == IMAGETYPE_GIF ) {   
                            
                      imagegif($this->image); 
                            } elseif( 
                      $image_type == IMAGETYPE_PNG ) {   
                            
                      imagepng($this->image); } 
                            } function 
                      getWidth() {   
                            return 
                      imagesx($this->image); 
                            } function 
                      getHeight() {   
                            return 
                      imagesy($this->image); 
                            } function 
                      resizeToHeight($height) {   
                            
                      $ratio $height $this->getHeight(); $width $this->getWidth() * $ratio$this->resize($width,$height); 
                            }   
                            
                            function 
                      resizeToWidth($width) { 
                            
                      $ratio $width $this->getWidth(); 
                            
                      $height $this->getheight() * $ratio
                            
                      $this->resize($width,$height); 
                            }   
                            
                            function 
                      scale($scale) { 
                            
                      $width $this->getWidth() * $scale/100
                            
                      $height $this->getheight() * $scale/100
                            
                      $this->resize($width,$height); 
                            }   
                            
                            function 
                      resize($width,$height) { 
                            
                      $new_image imagecreatetruecolor($width$height); 
                             
                      $smallImage imagecopyresampled($new_image$this->image000,  0$width$height$this->getWidth(), $this->getHeight());  $this->image $new_image
                            }   

                      Würde mich riesig freuen, wenn Ihr mir an dieser Stelle nen Tip geben könntet.
                      Denn das Skript macht eigentlich nichts anderes als "Einlesen", "Verarbeiten" und "Speichern" des Fotos.
                      Wo glaubt Ihr könnte das Problem liegen?

                      Vorab herzlichen Dank für Eure Hilfe.

                      Kommentar


                      • #12
                        Zitat von centauro Beitrag anzeigen
                        Auf meinem Testserver dauert ein upload eines Fotos mit einer Größe von 6MB ca. 20 Sekunden.
                        Auf dem künftigen Produktionsserver dauert der upload leider 2 Minuten.

                        Woran kann das liegen?
                        http://www.wieistmeineip.de/speedtest/

                        Deine Verbindung ist einfach nicht die Schnellste.
                        Windows Server gehören NICHT ins Internet!

                        Dildo? Dildo!

                        Kommentar


                        • #13
                          Da wird's nicht dran liegen.
                          Der Testserver steht bei mir zuhause und wenn ich diesen über das Internet anspreche, dann reagiert er entsprechend schnell.
                          Ich habe lediglich eine 6MBit Leitung zuhause, die völlig ausreicht.

                          Den Produktionsserver habe ich über eine VDSL-Leitung angesprochen.
                          Auf diesem ist die selbe Anwendung installiert, wie auch auf dem Testserver.

                          Dennoch ist der Produktionsserver in der Verkleinerung der Fotos wesentlich langsamer als der Testserver.

                          Das ist etwas merkwürdig.

                          Kommentar


                          • #14
                            Wie groß ist (wieviele Bytes enthält) $content ?

                            Es gibt für SQL Statements eine maximale Größe (max_allowed_packet), die, wenn überschritten, dazu führt das der MySQL Server die Verbindung schliesst. Allerdings nicht ohne eine Fehlermeldung

                            http://dev.mysql.com/doc/refman/5.1/...too-large.html
                            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                            Kommentar


                            • #15
                              Ist mir bewusst. Aber die Fotos bekomme ich mittlerweile in der Datenbank mit einer verkleinerten Größe bis zu 100kb gespeichert.

                              Beispiel:
                              Input ->5.5MB
                              Output->ca. 100kb
                              ohne Qualitätsverlust.

                              Problem ist folgendes:
                              Bei der Verkleinerung der Fotos braucht mein weniger perfomanter HP-Test-Server ca. 25 Sekunden für eine 5.5MB große Datei.

                              Testserver:
                              HP-Proliant ML110 G6
                              OS: Opensuse 12.3
                              Ram: 8GB
                              VirtualBox mit Windows XP-->Hier läuft die Anwendung auf Xampp mit Apache 2.0, PHP 5.2.6 u. MySQL 5.0.67
                              Ram: 4GB von 8GB

                              Der wesentlich performantere Produktionsserver braucht für die Verkleinerung der Fotos aber über 2 Minuten.

                              Produktionsserver:
                              VirtualServer
                              OS: OpenSuse 13.1 mit Plesk 12.0.18 und Apache 2.x mit PHP 5.4.20 und MySQL 5.0.10
                              Ram: 8GB


                              Ich verstehe es immer noch nicht und suche noch völlig genervt nach dem Performance-Schlucker.

                              Kommentar

                              Lädt...
                              X