Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit imagepng() nach Umstieg auf PHP 5.1.4

Einklappen

Neue Werbung 2019

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

  • Problem mit imagepng() nach Umstieg auf PHP 5.1.4

    Guten Morgen zusammen!

    Ich habe bis vor kurzem noch auf der PHP-Version 5.1.1 gearbeitet, mit der folgender Code funktionierte:

    Code:
    class Captcha
    {
    	private $captchaImg 		 = NULL;
    	private $backgroundcolor = array ();
    	private $fontcolor  	   = array ();
    	private $str 						 = '';
    
    	public function __construct ()
    	{
    		session_start ();
    
    		$this->str = $this->generateNumber ();
    		$this->createCaptchaImgage ();
    	}
    
    	private function generateNumber ()
    	{
    		$num = mt_rand (microtime (), microtime ()*1000);
    		return substr (md5 ($num), 0, 6);
    	}
    
    	private function drawBackground ()
    	{
    		for ($i = 0; $i<10; $i++)
    		{
    			$bgcol = mt_rand (200, 255); # Nur Grautöne für Hintergrund
    			$this->backgroundcolor[] = imagecolorallocate ($this->captchaImg, $bgcol, $bgcol, $bgcol);
    			$this->fontcolor[] = imagecolorallocate ($this->captchaImg, mt_rand (0, 150), mt_rand (0, 150), mt_rand (0, 150));
    		}
    		
    		imagefilledrectangle ($this->captchaImg, 0, 0, 195, 30, $this->backgroundcolor[array_rand ($this->backgroundcolor)]);
    		
    		for ($j = 0; $j<20; $j++)
    			imageline ($this->captchaImg, mt_rand (0, 195), mt_rand (0, 25), mt_rand (0, 195), mt_rand (0, 25), $this->backgroundcolor[array_rand ($this->backgroundcolor)]);
    	}
    
    	private function createCaptchaImgage ()
    	{
    		$this->captchaImg = @imagecreatetruecolor (195, 30);
    		if (!$this->captchaImg)
    			 throw new Exception ('Initialisierung des GD-Bild-Streams fehlgeschlagen!', 1);
    
    		$this->drawBackground ();
    		
    		$_SESSION['pass'] = strtoupper ($this->str);
    		$x = 15;
    		$y = mt_rand (25, 20);
    		for ($i = 0; $i < 6; $i++)
    		{
    			$font = mt_rand (6, 16);
    
    			if (function_exists ('imagettftext'))
    				imagettftext ($this->captchaImg, 20, mt_rand(-13, 13), $x, $y, $this->fontcolor[array_rand ($this->fontcolor)], 'acquaintance.ttf', $this->str{$i});
    			else
    				imagestring ($this->captchaImg, $font, $x, $y, $this->str{$i}, $this->fontcolor[array_rand ($this->fontcolor)]);
    			$x = $x + 30;
    			$y = mt_rand (25, 20);
    		}
    	}
    	
    	public function show ()
    	{
    		header("Content-type: image/png");
    		imagepng ($this->captchaImg);		
    		imagedestroy ($this->captchaImg);
    	}
    }
    
    $class = new Captcha ();
    $class->show ();
    Aufgerufen wird die Datei folgendermaßen:
    Code:
    [img]includes/class.captcha.php[/img]
    Das hat in Version 5.1.1 noch funktioniert. Seit meine HP auf einem Server mit PHP 5.1.4 liegt (und ich ebenfalls 5.1.4 nutze) funktioniert der Aufruf nicht mehr. Die Ausgabe sieht immer so aus:



    Ich bin da jetzt ziemlich ratlos. Hat einer 'nen Tip woran es liegen könnte? Oder etwas wonach ich Suchen kann?

  • #2
    Zitat von PuppetMaster2k
    Ich bin da jetzt ziemlich ratlos. Hat einer 'nen Tip woran es liegen könnte? Oder etwas wonach ich Suchen kann?
    Werden vielleicht neuerdings wegen anderer Konfiguration Fehlermeldungen
    ausgegeben, die die Bilddatei "zerstören"?

    Kommentar


    • #3
      Fehlermeldungen erhalte ich keine (error_reporting = E_ALL).

      Ich glaube ich habe was gefunden. So wie es aussieht, wird die Datei gar nicht aufgerufen. Habe testweise mal im Konstruktor ein die() gesetzt um zu sehen ob der durchlaufen wird. Aber er "stirbt" nicht.

      Kommentar


      • #4
        KLAR bekommst du Fehler angezeigt ... *grml* ruf mal nur deine "class.captcha.php" auf und setz mal wirklich error_reporting(E_ALL);

        PHP-Code:
        <?php

          
        private function generateNumber ()
           {
            
        $von round(microtime());
            
        $bis round(microtime ()*1000);
              
        $num mt_rand ($von$bis);
              return 
        substr (md5 ($num), 06);
           }

        ?>

        Kommentar


        • #5
          Zitat von PuppetMaster2k
          Fehlermeldungen erhalte ich keine (error_reporting = E_ALL).
          Doch.

          Die Frage war, ob Du sie unnötigerweise zusammen mit den Bilddaten
          ausgeben lässt, sodass das Bild nicht mehr dargestellt werden kann?

          Fehlermeldungen kannst Du gesondert mitloggen - im Quelltext der
          Bilddaten haben sie aber nichts verloren...

          Kommentar


          • #6
            Zitat von M3g4Star
            KLAR bekommst du Fehler angezeigt ... *grml* ruf mal nur deine "class.captcha.php" auf und setz mal wirklich error_reporting(E_ALL);
            Hast recht. Danke für den Hinweis. Problem behoben.

            Kommentar

            Lädt...
            X