Fehler Bildbearbeitung

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

  • Fehler Bildbearbeitung

    Hallo liebe Gemeinde,

    ich habe ein kleines Problem mit der Bilbearbeitung "getimagesize".
    Ich hatte mir 2013 mal ein kleines Kochbuch/ Rezeptsammlung gebaut und da war ja noch PHP 5 aktuell. Nun hab ich das ganze mal wieder ausgegraben, da ich in meinem lokalen Netzwerk einen Server mit installiert habe mit php8.2.
    Ich habe die alte Website mit dorthin übertragen und nun sind einige Probleme aufgetreten. Kleinere Bugs wie fehlende "()" oder das php hinter dem ? für include konnte ich schon entfernen. Allerdings komme ich bei "getimagesize" einfach nicht weiter.
    Ein Stück Code um Fehler anzuzeigen hab ich schon eingesetzt aber irgend wie finde ich keine Lösung über google.

    PHP-Code:
    <?PHP
        ini_set
    ('display_errors'1);
        function 
    resize($inputFilename$new_side)
        {
            
    $imagedata getimagesize($inputFilename);
            
    $w $imagedata[0];
            
    $h $imagedata[1];

            if (
    $h $w) {
                
    $new_w = ($new_side $h) * $w;
                
    $new_h $new_side;
            } else {
                
    $new_h = ($new_side $w) * $h;
                
    $new_w $new_side;
            }

            
    $im2 ImageCreateTrueColor($new_w$new_h);
            
    $image ImageCreateFromJpeg($inputFilename);
            
    imagecopyResampled ($im2$image0000$new_w$new_h$imagedata[0], $imagedata[1]);
            return 
    $im2;
        }



        
    $error 0;
        
    $datei $_FILES["file"]["tmp_name"];
        
    $datein $_FILES["file"]["name"];
        
    $dateiendung strtolower(substr($dateinstrlen($datein)-44));
        if(
    $dateiendung != ".jpg"$error 1;


        
    $dimension getimagesize($datei);
        
    $breite $dimension[0];
        
    $hoehe $dimension[1];
        if(
    $breite 100 OR $hoehe 100$error 2;
        if(
    $breite 1000 OR $hoehe 1000$error 3;


        if(!
    $error)
        {
            
    $dateiname_neu uniqid("").$dateiendung;
            
    $bild_normal resize($datei250);
            
    $bild_klein resize($datei65);

            
    imagejpeg($bild_normal"bildup/big/".$dateiname_neu);
            
    imagejpeg($bild_klein"bildup/thumb/".$dateiname_neu);

            
    chmod("bildup/big/".$dateiname_neu0644);
            
    chmod("bildup/thumb/".$dateiname_neu07644);

            
    $filename "bildup/big/"$dateiname_neu;
            
    $filename1 "bildup/thumb/"$dateiname_neu;

            echo 
    "";
        }
        else
        {
            switch(
    $error)
            {
                case 
    1:
                    echo 
    "Sie müssen eine JPG-Datei hochladen!";
                    break;
                case 
    2:
                    echo 
    "Das Bild muss mindestens 100x100px groß sein!";
                    break;
                case 
    3:
                    echo 
    "Das Bild darf maximal 1000x1000px groß sein!";
                    break;
            }
        }
    Kann mir da jemand helfen, gab es da in den PHP Versionen Änderungen?

    Die DB ist erreichbar und die von 2013 gespeicherten Rezepte kann ich auch aufrufen aber keine eintragen.

    Danke schonmal für Eure Hilfe

    Gruß Matze

  • #2
    Das
    PHP-Code:
    ini_set('display_errors'1);​ 
    alleine reicht nicht, du solltest auch noch
    PHP-Code:
    error_reporting(E_ALL); 
    dazuschreiben.

    Allerdings komme ich bei "getimagesize" einfach nicht weiter.
    Das heißt was?

    Richtig debuggen
    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

    Kommentar


    • #3
      Hallo scatello,

      ich hab das mal erledigt mit dem Fehler ausgeben.

      Fehlermeldung:

      Fatal error: Uncaught ValueError: Path cannot be empty in /var/www/html/rezept_einfuegen.php:66 Stack trace: #0 /var/www/html/rezept_einfuegen.php(66): getimagesize() #1 {main} thrown in /var/www/html/rezept_einfuegen.php on line 66
      Danach hab ich mal mit google schon seit 2 Tagen gesucht aber ich bin leider nur PHP Neuling.

      Gruß matze​

      Kommentar


      • #4
        Das Script passt nicht zur Fehlermeldung, denn Zeile 66 ist in dem switch-Bereich, aber da tritt der Fehler definitiv nicht auf.

        Wenn das Problem bei getimagesize auftritt, dann würde mich mir mal $datei ausgeben lassen, so wie es ja auch in "Richtig debuggen" beschrieben ist.

        Kommentar


        • #5
          Oh ja sorry Zeile 66 ist es in der kompletten Seite mit HTML usw. zeile 66 wäre "$dimension = getimagesize($datei);"

          Kommentar


          • #6
            Und? $datei überprüft?

            Kommentar


            • #7
              Die Hinweise sind ja alle super aber wie ich schon geschrieben hatte ich bin da Neuling und wie ich was überprüfen soll sagt mir gar nichts.
              Wie mach ich so etwas genau?
              2013 hat das alles funktioniert, vlt ist es ja auch eine Einstellung auf dem Server?
              Ich kann mir nicht vorstellen das innerhalb von 3 Versionen PHP alles geändert wurde.
              Zuletzt geändert von matze511; 09.01.2024, 12:37.

              Kommentar


              • #8
                Zitat von matze511 Beitrag anzeigen
                Wie mach ich so etwas genau?
                An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde.
                Zitat von matze511 Beitrag anzeigen
                ich bin da Neuling
                Ein einfaches echo wirst du doch wohl einbauen können

                Eventuell auch mal $_FILES['file']['error'] per echo ausgeben​
                Zuletzt geändert von scatello; 09.01.2024, 16:19.

                Kommentar


                • #9
                  Guten Morgen,

                  also mit dem echo hat es mir den temp Ordner und den temp Namen angezeigt.
                  Das mach ich jetzt also mit jeder weiteren Zeile.
                  Und ich habe festgestellt wenn ich keine Bilddatei angebe im Formular, dass es Abricht. Ich würde daraus schlussfolgern hier fehlt eine Schleife, die dann sagt "okay kein Bild angegeben, also dann ohne Bearbeitung weiter machen".

                  gruß matze​

                  Kommentar


                  • #10
                    PHP-Code:
                    if (isset($_FILES["file"]["tmp_name"]) && ! empty($_FILES["file"]["tmp_name"])
                    {
                       
                    // Hier die Bildbearbeitung

                    Kommentar

                    Lädt...
                    X