Ankündigung

Einklappen
Keine Ankündigung bisher.

imagepng() reagiert nicht, keine Fehlerausgabe möglich

Einklappen

Neue Werbung 2019

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

  • imagepng() reagiert nicht, keine Fehlerausgabe möglich


    Es gibt noch ein weiteres Problem mit der Erstellung von Bildern mit PHP. In meinem letzten Beitrag hatte ich bereits darüber gesprochen, das ich ein Overlay über ein Basisbild legen möchte. Das wurde auch gelöst.
    Das Overlay ist kleiner als das Basisbild, also will ich ein Bild erstellen, welches so groß ist, wie das Basisbild und da hinein das Overlay kacheln. Damit erhalte ich ein Bild welches genauso groß ist, wie das Basisbild.
    Nun kann ich das Overlay über das Basisbild legen, ohne das ein Bild von beiden skaliert werden muss.
    Das klappt aber leider noch nicht so ganz.
    Um nun den Fehler zu finden, bin ich das Zeile für Zeile durch gegangen und siehe da, die Funktion imagepng() macht einfach nichts. Kein Bild aber auch keine Fehlerausgabe.
    Hier das Skript:
    PHP-Code:
    private function tileBackground($imageRes$overlayRes) {
      
    //imageRes ist bereits ein neues Leeres Bild in der richtigen Größe als Grundlage für das Overlay
      //$overlayRes ist die imageRessource aus $overlayRes = imagecreatefrompng($overlayPath);
      //erstellt wurde das so
      /*
      $new_image = imagecreate($baseImageWidth, $baseImageHeight);
      imagealphablending($new_image, false);                    //blending Mode
      imagesavealpha ($new_image, true);
      */
      
    $imageWidth imagesx($imageRes);
      
    $imageHeight imagesy($imageRes);

      
    $overlayWidth imagesx($overlayRes);
      
    $overlayHeight imagesy($overlayRes);

      
    // kachel das kleine Overlaybild in das gesamte neue große Bild
      
    for ($x 0$x $imageWidth$x += $overlayWidth) {
          
    imagecopy($imageRes$overlayRes$x$y00$overlayWidth$overlayHeight);
          for (
    $y 0$y $imageHeight$y += $overlayHeight) {
              
    imagecopy($imageRes$overlayRes$x$y00$overlayWidth$overlayHeight);
          }
      }

      
    $outputWidth imagesx($imageRes);
      
    $outputHeight imagesy($imageRes);
      
    $this -> debugGlue("/n in overlay finish | width: ".$outputWidth." /n height: ".$outputHeight"WebEditorRandshop/extensions/upload/debugGlueNeu.txt");

      
    // Speichere das Ergebnisbild
      // imagejpeg($imageRes, $outputPath);
      
    $overlayOutputPath "WebEditorRandshop/extensions/upload/checkOverlay.png";

      try {
       
    imagepng($imageRes$overlayOutputPath);
    } catch (
    Exception $e) {
        
    $temp print_r$e->getMessage(), true );
        
    $this -> debugGlue("/n overlay finish error ".$temp"WebEditorRandshop/extensions/upload/debugGlueNeu.txt");
    }


      
    //Rückgabe
      
    return $imageRes;

    try catch greift gar nicht. Das Bild wird nicht erstellt aber der catch Block wird gar nicht aufgerufen.
    Die Variablen für die Größen sind aber mit richtigen Werten gefüllt, die Pfade werden also richtig übergeben

    PHP-Code:
    if(imagepng($imageRes$overlayOutputPath)) 
    bringt false. Aber keine Meldung dazu.

    Selbst wenn meine Schleifen falsch wären und die Bilder überlappen oder sonstwas, müsste das Skript doch wenigstens ein leeres Bild erstellen.
    Es passiert aber einfach nur gar nichts.
    Die debugGlueNeu.txt mit der gleichen Pfadangabe wie die für $output wird aber erstellt (wenn die aus dem catch Block raus ist natürlich).
    Schreibrechte sollten da also kein Problem sein.
    Damit hätte ich aber die Möglichkeit eine Fehlermeldung in die Datei zu schreiben. Einfach echo ist nicht, das wird alles per Ajax aufgerufen. Es gibt keine Rückgabe für die Website nur Variablen für JS.
    Die JS-Ausgabe will ich aber nicht umbauen, da müsste zu viel geändert werden.

    Auf das Severlog kann ich da auch nicht zugreifen.
    Wie kann ich mir jetzt eine Fehlermeldung in der Textdatei ausgeben lassen, was bei imagepng() falsch läuft?

  • #2
    Error-Log lesen.

    Kommentar


    • #3
      Zitat von hellbringer Beitrag anzeigen
      Error-Log lesen.
      Auf das Severlog kann ich da auch nicht zugreifen. (Stand im Beitrag)

      Kommentar


      • #4
        Dann musst du wohl einen eigenen Error-Handler schreiben, der das raus loggt.

        Oder du sorgst dafür, dass du auf das Error-Log von PHP zugreifen kannst.

        Kommentar


        • #5
          Ich habe den Fehler gefunden.
          Wenn ich eine Textdatei speichere, dann unter "meinPfad/datei.txt". Die Klasse wird im root initialisiert. Ist also logisch. Für Bilder muss der Pfad einfach nur "datei.png" heißen, damit das Bild im selben Verzeichnis gespeichert wird. Ist halt komisch, weil die Klasse nur einmal am Anfang initialisiert wird, im root. Eigentlich sollte es ja dann für beide gleich sein. Ist aber nicht so.
          Muss wohl mit den Aufrufen der Klasse und deren darin befindlichen Methoden zu tun haben.
          Außerdem kann eine als private deklarierte Funktion bzw. Methode kein Bild speichern, Text aber schon. Ich weiß nicht warum, habe auch nichts im Netz dazu gefunden. Jedenfalls mit dem Pfad und der Deklaration als public funktioniert es.
          Eine Fehlerausgabe ist trotzdem keine zu bekommen. Auch var_dump() bringt nur einfach false. Da ich das Serverlog nicht aufrufen kann, musste ich halt ein wenig probieren.

          Kommentar


          • #6
            Warum arbeitest du nicht mit absoluten Dateipfaden? Hier im Forum wurde doch schon 1000mal runtergebetet, dass man relative Dateipfade nicht verwenden soll, eben genau wegen solcher Probleme.,

            Zitat von psygonis Beitrag anzeigen
            Eine Fehlerausgabe ist trotzdem keine zu bekommen. Auch var_dump() bringt nur einfach false. Da ich das Serverlog nicht aufrufen kann, musste ich halt ein wenig probieren.
            Wie gesagt, eigenen Error-Handler schreiben, dann hast du die volle Kontrolle, was mit der Fehlerausgabe passiert.

            Kommentar


            • #7
              Was für einen Error-Handler? Wenn kein Error ausgegeben wird, kann ich auch nichts auslesen. Wie soll den so etwas für imagepng() aussehen?

              Kommentar


              • #8
                Es geht dabei nicht um Rückgabewerte, sondern um Fehler, wie du sie auch in einem error.log sehen würdest.
                Dort könntest du zum Beispiel dann feststellen, dass das speichern in einem bestimmten Dateipfad fehlgeschlagen ist.

                btw: Die deklaration als public oder private dürfte nicht spezifisch für imagepng() einen Unterschied machen. Viel wahrscheinlicher ist ein unpassender Scope bei den übergebenen Werten oder beim Aufruf der Methode. Ist aber schwer zu sagen, ohne die gesamte Klasse und den Code um den Aufruf herum zu kennen.

                Kommentar


                • #9
                  Zitat von psygonis Beitrag anzeigen
                  Was für einen Error-Handler? Wenn kein Error ausgegeben wird, kann ich auch nichts auslesen.
                  Deswegen ja auch einen eigenen Error-Handler, der den Fehler ausgibt.

                  https://www.php.net/manual/en/functi...or-handler.php

                  Zitat von psygonis Beitrag anzeigen
                  Wie soll den so etwas für imagepng() aussehen?
                  Vorlesen tu ichs dir nicht. Du wirst ja fähig sein Google zu bedienen.

                  Kommentar


                  • #10
                    OK, aber da steige ich aus. Wie ich daraus etwas bauen soll, dass mir einen Fehler bei imagepng() ausgibt, erschließt sich mir nicht.

                    Kommentar


                    • #11
                      Es ist sogar Beispielcode auf der verlinkten Seite. Mir erschließt sich nicht, wo dein Problem liegt. Es wirkt so als scheust du jede Anstrengung auch nur irgendwas zu versuchen.

                      Kommentar


                      • #12
                        Zitat von hellbringer Beitrag anzeigen
                        Es ist sogar Beispielcode auf der verlinkten Seite. Mir erschließt sich nicht, wo dein Problem liegt. Es wirkt so als scheust du jede Anstrengung auch nur irgendwas zu versuchen.
                        Ich versuche seit zwei Tagen, das zu lösen. Mir dann Untätigkeit zu unterstellen, ist eine Frechheit.
                        Ja, da ist Beispielcode. Aber damit kann ich rein gar nichts anfangen. Ob es nun an der Hitze liegt, oder ich einfach zu blöd bin, keine Ahnung. Ich verstehe das nicht. Da kommen wir doch immer wieder dorthin, wo wie jedes Mal landen. Du bist der King und kannst mit der Dummheit der anderen nichts anfangen. Ich will das nicht zum hundertsten Mal durchkauen. Wenn jemand ein Skript hat, welches diese Funktion nutzt und eine sinnvolle Ausgabe in ein Textdokument schreibt, dann bin ich dankbar dafür, falls er mich an diesem Wissen teilhaben lässt. Wenn dieser Jemand meint, dafür müsste er etwas Geld bekommen, auch kein Problem. Aber wer mir weiter erzählen will, dass da alles steht und wer das nicht schnallt ist halt zu blöd, der möchte sich bitte zurückhalten.

                        Kommentar


                        • #13
                          Zitat von psygonis Beitrag anzeigen
                          Ich versuche seit zwei Tagen, das zu lösen. Mir dann Untätigkeit zu unterstellen, ist eine Frechheit.
                          Ja, da ist Beispielcode. Aber damit kann ich rein gar nichts anfangen.
                          Man kann ihn fast 1:1 kopieren und bei seinem Script einfügen.

                          Genau das habe ich gemeint, du versuchst erst mal gar nix sondern sagst von Haus aus, dass man damit nix anfangen kann. Was hast du denn bis jetzt versucht? Zeig doch mal irgendwas. Oder besteht deine einzige Tätigkeit darin nur hier im Forum zu schreiben? Du zeigst ja nicht, was du machst. Und wenn du nichts zeigst, ist das gleichbedeutend mit du hast es nicht gemacht, zumindest für einen Außenstehenden.

                          Zitat von psygonis Beitrag anzeigen
                          Ich will das nicht zum hundertsten Mal durchkauen. Wenn jemand ein Skript hat, welches diese Funktion nutzt und eine sinnvolle Ausgabe in ein Textdokument schreibt, dann bin ich dankbar dafür, falls er mich an diesem Wissen teilhaben lässt.
                          Das steht auf der verlinkten Seite.

                          Zitat von psygonis Beitrag anzeigen
                          Aber wer mir weiter erzählen will, dass da alles steht und wer das nicht schnallt ist halt zu blöd, der möchte sich bitte zurückhalten.
                          Ich weiß nicht, was man noch für dich tun könnte. Soll ich zu dir persönlich hinfahren, den Code aus dem PHP-Handbuch kopieren und bei deinem Code einfügen, weil du das nicht schaffst?

                          Kommentar


                          • #14
                            ich wies, ich wieder- fporgeschritten und so ...
                            ich sehe eine private fuinction ich sehe sowas wie
                            PHP-Code:
                              $this -> debugGlue("/n in overlay finish | width: ".$outputWidth." /n height: ".$outputHeight"WebEditorRandshop/extensions/upload/debugGlueNeu.txt"); 
                            ich sehe keinen aufruf, nichts auf das norwendigste gekürzt, ich kann nichts testen.
                            ich weiss nichtmal was dir gwnau sorgen macht, nur das das so nicht geht.
                            wenn es am imagepng() liegt, hast du das mal mal so,
                            PHP-Code:
                            imagepng($imageRes$overlayOutputPath
                            nur eben nicht mit variablen sone3nr mit konktreten werten welche du ertwartest probiert, hast du die variabeln mal auf derenm wert getstest ?

                            Ich versuche seit zwei Tagen, das zu lösen. Mir dann Untätigkeit zu unterstellen, ist eine Frechheit.
                            was genau hast du in den zwei tagen gemacht ?
                            ich kann mich jedenfalls in der hitze nur schwer konzentrieren....

                            die art und weise in der du mit dem geschätzen moderator resdet ist indiskutabel, wenigstes dass solltest du sicher wissen.

                            Kommentar


                            • #15
                              Ganz an den Anfang der PHP-Datei, bzw. unterhalb von eventuellen header().
                              PHP-Code:
                              error_reporting(E_ALL);
                              ini_set("display_errors"1); 
                              Dann erscheint das Error-Log, also die Fehlermeldungen, direkt in der aufgerufenen Webpage.

                              Für absolute Pfade nutze:
                              PHP-Code:
                              $mein_pfad _DIR_ "/" "mein-pfad"
                              Dann bitte das Betriebssystem (Server) mitteilen.
                              Info an alle: Ubuntu hat mindestens ein Problem mit GDImage, das seit Jahren nicht gelöst wird. Eventuell hat es noch mehrere.

                              Kommentar

                              Lädt...
                              X