SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 30.01.2006, 00:02:47
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
seltsames verhalten

hallo!

ich weiß nicht genau, ob das hier ein bug im php ist oder ob ich einen fehler im script habe:

PHP-Code:
<?php 
#groesse eines quadrates
$size         50;
#groesse des bildes
$bigsize     400;
#abstand der quadrate zum rand
$margin     2;
#farben
$cols    = array( 'FFFF00' 'ff8000' '80ff00' 'ff0000' '00ff00' 'FF0080' '00ff80' 'ff00ff' '00ffff' '8000ff' '0080ff''0000ff'  );

header("Content-type: image/png");
#bild erstellen
$im     imagecreate$bigsize $bigsize );
#hintergrund weiß färben
$bg     imagecolorallocate($im0xFF0xFF0xFF );
imagefill$im00$bg );

#nun quadrate zeichnen, erst die zeilen dann die spalten
for( $i 0$i $bigsize $size $i++ ) {

    for( 
$j 0$j $bigsize $size $j++ ) {

#zufälligen schlüssel bestimmen
        
$k    rand, ( count$cols ) - ) );
#farbe aussuchen
        
$fill    imagecolorallocate($imhexdecsubstr$cols$k ] , ) ) , hexdecsubstr$cols$k ] , ) ) , hexdecsubstr$cols$k ] , ) ) );
#quadrat malen
        
imagefilledrectangle$im , ( $i $size ) + $margin , ( $j $size ) + $margin , ( ( $i ) * $size ) - $margin , ( ( $j ) * $size ) - $margin $fill );

    }

}
#ausgabe und cache leeren
imagepng($im);
imagedestroy($im);

?>
dies funktioniert im prinzip wunderbar, wähle ich $size sehr klein oder $bigsize sehr groß, so werden die hinteren spalten alle in der gleichen farbe eingefärbt. wieso ist das so?

ich habe das ganze ohne srand gemacht, da ich php5 benutze und es dort nicht nötig ist. exakte version: 5.0.5-2

Geändert von feuervogel (30.01.2006 um 00:03:45 Uhr)
Mit Zitat antworten
  #2  
Alt 30.01.2006, 10:16:37
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: seltsames verhalten

Mit PHP 4.4.1 kann ich das Problem nicht nachvollziehen. Aber warum benutzt du eigentlich rand() statt array_rand()?
Mit Zitat antworten
  #3  
Alt 30.01.2006, 10:21:04
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: seltsames verhalten

Zitat:
Zitat von xabbuh
Mit PHP 4.4.1 kann ich das Problem nicht nachvollziehen.
hm, okay, dann liegts wohl am php5.

Zitat:
Aber warum benutzt du eigentlich rand() statt array_rand()?
oh? kannte ich gar nicht, werd ich aber mal ausprobieren. danke!
Mit Zitat antworten
  #4  
Alt 30.01.2006, 10:49:44
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: seltsames verhalten

Zitat:
Zitat von feuervogel
hm, okay, dann liegts wohl am php5.
Trotzdem recht merkwürdig. Ich werde das heute abend mal mit meiner 5er Version testen. Mal sehen, ob ich das Problem da dann wenigstens nachvollziehen kann.
Mit Zitat antworten
  #5  
Alt 30.01.2006, 10:50:37
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: seltsames verhalten

also, ich habs jetzt mit array_rand probiert - genau der gleiche fehler:

http://www.julianmoritz.de/dl/bg.png
Mit Zitat antworten
  #6  
Alt 30.01.2006, 10:57:43
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: seltsames verhalten

Ok, jetzt weiß ich, was du mit kleinen Werten für $size meinst (mit 25 hat es bei mir nämlich funktioniert). Bei der Größe, die du in deinem Beispielbild hast, kann ich das Problem nun auch beobachten.
Mit Zitat antworten
  #7  
Alt 30.01.2006, 22:52:03
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: seltsames verhalten

Ich habe gerade noch einmal ein wenig getestet. Anscheinend hat PHP ab einer bestimmten Anzahl an Aufrufen von imagecolorallocate() Probleme. Wenn du den Rückgabewert von imagecolorallocate() zwischenspeicherst und nur bei einer neuen Farbe neu generierst, funktioniert es:
PHP-Code:
<?php
#groesse eines quadrates
$size         50;
#groesse des bildes
$bigsize     400;
#abstand der quadrate zum rand
$margin     2;
#farben
$cols    = array( 'FFFF00' 'ff8000' '80ff00' 'ff0000' '00ff00' 'FF0080' '00ff80' 'ff00ff' '00ffff' '8000ff' '0080ff''0000ff'  );
$generatedColors = array();

header("Content-type: image/png");
#bild erstellen
$im     imagecreate$bigsize $bigsize );
#hintergrund weiß färben
$bg     imagecolorallocate($im0xFF0xFF0xFF );
imagefill$im00$bg );

#nun quadrate zeichnen, erst die zeilen dann die spalten
for( $i 0$i $bigsize $size $i++ ) {

    for( 
$j 0$j $bigsize $size $j++ ) {

#zufälligen schlüssel bestimmen
        
$k    rand, ( count$cols ) - ) );

        if(!
array_key_exists($k$generatedColors))
            
$generatedColors[$k] = imagecolorallocate($imhexdecsubstr$cols$k ] , ) ) , hexdecsubstr$cols$k ] , ) ) , hexdecsubstr$cols$k ] , ) ) );
#quadrat malen
        
imagefilledrectangle$im , ( $i $size ) + $margin , ( $j $size ) + $margin , ( ( $i ) * $size ) - $margin , ( ( $j ) * $size ) - $margin $generatedColors[$k] );

    }

}
#ausgabe und cache leeren
imagepng($im);
imagedestroy($im); 
?>
Beispiel: http://xabbuh.de/image.php

Nachtrag: Anscheinend lassen sich lediglich 255 verschiedene Farben definieren. Jedenfalls liefert imagecolorallocate() ab dem 256. Aufruf -1 zurück.

Geändert von xabbuh (30.01.2006 um 23:14:08 Uhr)
Mit Zitat antworten
  #8  
Alt 31.01.2006, 00:13:40
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: seltsames verhalten

also was mir vorhin aufgefallen ist, ist dass die verteilung der schlüssel relativ ausgeglichen ist. es liegt also nicht an den randomfunktionen.

wenn man sehr viele kästchen zeichnet, wird das der funktion imagecolorallocate anscheinend "zu schnell". erst wenn man in der äußeren schleife dann zurückspringt, bleibt ein wenig zeit, dass sich die funktion anscheinend "erholt".

zum nachtrag: werde das ganze mal in der bug-database posten, danke für die hilfe, hab schon an mir gezweifelt...

edit: habe jetzt mal versucht mit usleep etwas rumzufrickeln, hat aber nichts genützt, meine überlegungen zu dem "erholen" waren also schwachsinn.

Geändert von feuervogel (31.01.2006 um 00:31:58 Uhr)
Mit Zitat antworten
  #9  
Alt 31.01.2006, 00:38:54
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: seltsames verhalten

so, das folgende script umgeht das problem.
PHP-Code:
<?php 

$size     
5;
$bigsize     540;
$margin     1;
$colours    = array( 'FFFF00' 'ff8000' '80ff00' 'ff0000' '00ff00' 'FF0080' '00ff80' 'ff00ff' '00ffff' '8000ff' '0080ff''0000ff'  );

//don't change anything under this line

//bild erstellen
header("Content-type: image/png");
$im     imagecreate$bigsize $bigsize );

//weisser hintergrund
$bg     imagecolorallocate($im0xFF0xFF0xFF );
imagefill$im00$bg );

//farben erstellen
$fills    = array();

foreach(
$colours as $v) {

    
$fills[]    = imagecolorallocate($imhexdecsubstr$v ) ) , hexdecsubstr$v ) ) , hexdecsubstr$v ) ) );


}

//mit quadraten fuellen
for( $i 0$i $bigsize $size $i++ ) {

    for( 
$j 0$j $bigsize $size $j++ ) {

        
$k    array_rand$fills );
        
imagefilledrectangle$im , ( $i $size ) + $margin , ( $j $size ) + $margin , ( ( $i ) * $size ) - $margin , ( ( $j ) * $size ) - $margin $fills$k ] );

    }

}

//ausgeben
imagepng($im);
imagedestroy($im);

?>
beweis: http://www.julianmoritz.de/dl/bg2.png
Mit Zitat antworten
  #10  
Alt 31.01.2006, 01:41:02
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: seltsames verhalten

weiteres siehe der eintrag im bugtracker, anscheinend ist das ganze gar kein bug:

http://bugs.php.net/bug.php?id=36218
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Seltsames Verhalten bei Mail mit Anhang - e-Card Funktion NightDragon PHP für Fortgeschrittene und Experten 2 22.01.2004 18:47:43
Seltsames Problem, das nur indirekt mit PHP zu tun hat Hiyanha PHP Grundlagen 7 30.06.2002 12:04:24


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:58:11 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt