Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

PHP: Dynamisches Bild mit Text -> Text fehlt sehr oft

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 10.04.2010, 10:25

Hallo zusammen,

ich habe ein kleines Script das mit ein Captcha erstellt, also nix besonderes, aber es macht mich noch kirre...

Die grobe Abarbeitung:
1. Ein Code wird generiert
2. Der Code wird in der Session gespeichert
3. Im eigentlichen Template wird das Bild über ein extra Script generiert (Hintergrund und Code)

Und bei Punkt 3 liegt irgendwo der Hund begraben. Der Hintergrund ist immer da, der Code fehlt sehr oft - ca. in 6 Fällen von 10. Das war aber nicht immer so, erst seit meinem Serverumzug.

Dabei kann ich schon mal sagen, dass der Code aus der Session immer vorhanden ist (direkte Ausgabe im Template). Auch eine direkte Ausgabe im "Bild-Script" anstelle der Bilderstellung ist immer möglich. Der Code ist immer vorhanden. Schalte ich aber wieder zurück zur Bilderstellung, dann fehlt er fast immer wieder.

Hat einer von euch eine Idee was das sein könnte? Ist zwar nicht so wichtig, aber nach nun fast einem Jahr würde ich das nun doch schon mal gerne lösen.

Probleme mit dem Caching könnte ich eigentlich ausschließen, denn da habe ich eigentlich schon alles durch, bis hin zur kompletten Abschaltung. Auch die direkte Auslieferung hatte ich schon umgangen und jedes einzelne Bild auf der Platte abgelegt. Auch dort dann meist ohne Code. Schriftarten hatte ich auch schon in Verdacht (obwohl die gleiche wie sonst) und hab die gewechselt - ohne Erfolg.

Debug-Ausgaben im Bild-Script hatte ich auch, damit der mir entsprechende Meldungen bringt, wenn irgendwo was fehlt, Session leer ist, Code falsch oder ein Fehler bei einer der Bildfunktionen. Nichts da, keine Meldungen, aber Code fehlt.

Eine der Optionen war z.B., dass "imagettfbbox" eventuell einen Wert außerhalb des Bildes hätte und der Code somit nicht geschrieben wird, aber das ist nicht der Fall, die Werte dort stimmen alle und immer.

Anzeige von ABAKUS

von Anzeige von ABAKUS »

Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 10.04.2010, 11:08

Du vermutest einen Fehler in deinem Code, nennst deinen Code aber nicht. Wie soll man dazu Tipps geben, geschweige denn was Konkretes sagen?

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 10.04.2010, 11:15

Hi Mork,
das ist natürlich richtig. Der Code ist

Code: Alles auswählen

// Leerräume zwischen Zeichen einfügen
$ImgSecCode = '';
for &#40;$i = 0; $i < 6; $i++&#41;
&#123;
	$ImgSecCode .= $SecCode&#91;$i&#93;.' ';
&#125;

$ImgSecCode = trim&#40;$ImgSecCode&#41;;
$schrift = $_SERVER&#91;'DOCUMENT_ROOT'&#93;.'/mistral.ttf';


# Berechnung der Grafikmaße
$rahmenmass = imagettfbbox&#40;20, 0, $schrift, $ImgSecCode&#41;;
$rahmenmass&#91;5&#93; *= -1;
$TextBreite = &#40;200-$rahmenmass&#91;2&#93;&#41; / 2;
$TextHoehe = &#40;&#40;50-$rahmenmass&#91;5&#93;&#41; + &#40;$rahmenmass&#91;5&#93;*2&#41;&#41; / 2;

# Grafik erzeugen
$grafik = imagecreatefrompng&#40;$_SERVER&#91;'DOCUMENT_ROOT'&#93;.'/hintergrund.png'&#41;;

# Schrift einfügen
$schriftfarbe = imagecolorallocate&#40;$grafik, 128, 128, 128&#41;;

$imagettftext = imagettftext&#40;$grafik, 20, 0, $TextBreite, $TextHoehe, $schriftfarbe, $schrift, $ImgSecCode&#41;;

# Grafik ausgeben
header&#40;'Content-type&#58; image/jpeg'&#41;;
imagejpeg&#40;$grafik&#41;;
imagedestroy&#40;$grafik&#41;;
Und ja, da muss ein Fehler sein. Erstmals sehe ich nun auch in etwa wo

das schaut noch normal aus, auch wenn nur bedingt.

Code: Alles auswählen

rahmenmass
array&#40;8&#41; &#123; &#91;0&#93;=>  int&#40;-2&#41; &#91;1&#93;=>  int&#40;2&#41; &#91;2&#93;=>  int&#40;102&#41; &#91;3&#93;=>  int&#40;2&#41; &#91;4&#93;=>  int&#40;102&#41; &#91;5&#93;=>  int&#40;21&#41; &#91;6&#93;=>  int&#40;-2&#41; &#91;7&#93;=>  int&#40;-21&#41; &#125;

TextBreite
int&#40;49&#41;

TextHoehe
float&#40;35.5&#41;

imagettftext
array&#40;8&#41; &#123; &#91;0&#93;=>  int&#40;47&#41; &#91;1&#93;=>  int&#40;38&#41; &#91;2&#93;=>  int&#40;152&#41; &#91;3&#93;=>  int&#40;38&#41; &#91;4&#93;=>  int&#40;152&#41; &#91;5&#93;=>  int&#40;14&#41; &#91;6&#93;=>  int&#40;47&#41; &#91;7&#93;=>  int&#40;14&#41; &#125; 
das aber nicht

Code: Alles auswählen

rahmenmass
array&#40;8&#41; &#123; &#91;0&#93;=>  int&#40;-2&#41; &#91;1&#93;=>  int&#40;2&#41; &#91;2&#93;=>  int&#40;-2147483648&#41; &#91;3&#93;=>  int&#40;2&#41; &#91;4&#93;=>  int&#40;-2147483648&#41; &#91;5&#93;=>  int&#40;21&#41; &#91;6&#93;=>  int&#40;-2&#41; &#91;7&#93;=>  int&#40;-21&#41; &#125; 

TextBreite
float&#40;1073741924&#41;

TextHoehe
float&#40;35.5&#41;

imagettftext
array&#40;8&#41; &#123; &#91;0&#93;=>  int&#40;1073741922&#41; &#91;1&#93;=>  int&#40;38&#41; &#91;2&#93;=>  int&#40;1073742027&#41; &#91;3&#93;=>  int&#40;38&#41; &#91;4&#93;=>  int&#40;1073742027&#41; &#91;5&#93;=>  int&#40;14&#41; &#91;6&#93;=>  int&#40;1073741922&#41; &#91;7&#93;=>  int&#40;14&#41; &#125;
Irgendwo hat der da ein Problem mit der Breite und dem float.... Soweit war ich allerdings noch nie, das sehe ich nun zum ersten mal. Nur float darf der Wert ja gar nicht sein. Werde das nun mal ändern. Nur das Ding lief ja schon einige Jahre, da gab es das Problem nie (anderer Server)

Wo zum Geier das rahmenmass (imagettfbbox) den Wert "[2]=> int(-2147483648)" (untere rechte Ecke, X-Position) her bekommt wäre wohl der Punkt... An dem liegt es nämlich, so wie es aussieht.

Edit: Nun finde ich es langsam witzig: Endlich mal ein sichtbarer Fehler nach dem man suchen kann, und dann gleich das: https://bugs.php.net/bug.php?id=50014

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 10.04.2010, 19:37

Synonym hat geschrieben:Nur das Ding lief ja schon einige Jahre, da gab es das Problem nie (anderer Server)
Anderer Server, andere PHP-Version, andere gd-Version.
Wo zum Geier das rahmenmass (imagettfbbox) den Wert "[2]=> int(-2147483648)" (untere rechte Ecke, X-Position) her bekommt wäre wohl der Punkt... An dem liegt es nämlich, so wie es aussieht.
Die 2147483648 in Hexadezimal dargestellt, sehen gleich viel logischer aus: 0x80000000. Die 1073741924 übrigens auch: 0x40000064 (0x64 = 100). Nicht, dass diese Erkenntnis das Problem lösen täte, aber es liegt zumindest definitiv nicht an deinem Code.

Vielleicht hast du ja Glück und er verschluckt sich ja einfach an dieser Schriftartdatei. Ansonsten denk' dir was ganz anderes aus, solche Captchas taugen meist wenig.

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 11.04.2010, 12:25

Anderer Server, andere PHP-Version, andere gd-Version.
Jep, andere PHP-Version. War noch eine 4er, nun eine 5er

Das liegt auch nicht an meinem Code, da konnte ich lange suchen, testen und ändern. Immer wieder das gleiche Spiel (schrift hatte ich ja auch schon mehrfach gewechselt). Ist und bleibt ein Bug in meinem PHP5, aber den kann man nun ja umgehen wenn man es weiß.

Ich frage nun einfach ab, ob der Wert besagte "-2147483648" sind. Wenn ja, dann überschreibe ich es einfach mit default-Werten. Ist dann zwar nicht wirklich immer mittig ausgerichtet, aber es funktioniert wenigstens.

Ansonsten, das Captcha erfüllt genau seinen Zweck. Umgehen kann man es, das ist mir klar, aber davon haben die Spammer auch nichts. Ich will nur nicht, dass jeder Depp automatisierte Anfragen an mich versendet, der das Formular zufällig mal irgendwo gefunden hat.

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag