GdImage Fehler mit PHP 8

  • Ich benutze folgenden Script:

    Code
    1. $im = @imagecreatefromjpeg(JPATH_ROOT . '/images/example/' . $file);
    2. $small = imagecreatetruecolor($sizemin[0], $sizemin[1]);
    3. @ImageCopyResampled($small, $im, 0, 0, 0, 0, $sizemin[0], $sizemin[1], $size[0], $size[1]);
    4. @ImageDestroy($im);

    Wenn ich auf PHP 8 umstelle bekomme ich folgende Fehlermeldung:


    "imagecopyresampled(): Argument #2 ($src_image) must be of type GdImage, bool given"


    Was läuft da schief? Danke für jeden Tipp.

  • Ja, mir ist klar, was mit "bool given" gemeint ist. Nicht klar ist mir, was die Ursache dafür ist. :(

  • Nicht klar ist mir, was die Ursache dafür ist

    Das kann doch nur an

    Code
    1. $im = @imagecreatefromjpeg(JPATH_ROOT . '/images/example/' . $file);

    liegen.


    Man sollte Fehler mit einem @ vor einer Funktion nicht unterdrücken, zumindest nicht, solange ein Script fertig gestellt wurde. Zudem sollte man das Error-Reporting hochdrehen. Siehe auch


    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.
  • Zitat

    Das kann doch nur an


    Code

    1. $im = @imagecreatefromjpeg(JPATH_ROOT . '/images/example/' . $file);


    Auch das ist und war mir völlig klar und logisch. Die Frage ist ja, was denn da falsch sei. Der Klammerausdruck ist korrekt. Auch wenn ich die Adresse aussschreibe kommt der Fehler immer noch.

  • Was ergibt genau

    Zitat

    JPATH_ROOT . '/images/example/' . $file

    Wenn ja, was ich vermute, eine URL bei rauskommt, stellt sich die Frage, ob in der PHP-Konfiguration allow_url_fopen aktiviert ist

  • Besten Dank für dies Hinweis!

    allow_url_fopen ist tatsächlich nicht aktiviert. Ich möchte dies auch nicht tun, da es ja nur eine Awendung betrifft.
    Gibt es eine Alternative?

  • Zitat

    Klar, weg von der Url zu einem absoluten oder relativen Pfad

    Hatte ich auch probiert - leider ohne Erfolg. Der Fehler kommt übrigens auch, wenn ich allow_url_fopen aktiviere.

  • Wenn du das @ weglässt, kommt dann derselbe Fehler?

    Würdest du bitte auch diese Frage beantwortet?

    Welche PHP-Version hast du genau?


    Im offiziellem Bug-Report ist nichts zu imagecreatefromjpeg zu finden. Das Problem muss also auf deiner Seite liegen.

  • Was kommt denn hier bei raus:

    Code
    1. $file = JPATH_ROOT . '/images/example/' . $file;
    2. if (file_exists($file))
    3. {
    4. $data = getimagesize($file);
    5. var_dump($data);
    6. }
    7. else
    8. die("Datei existiert nicht");