Captcha werkt niet meer??
Ik gebruik al jaren dezelfde script voor mijn CAPTCHA en altijd al met succes eigenlijk nooit problemen tot van de week....Niks geupload, niks veranderd.... Wie kan mij helpen ik gebruik de volgende code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
// Start de Session die nodig is om de Captcha code te gebruiken.
session_start();
// Lijst met alle letters en cijfers die gebruikt worden om de Captcha aan te maken.
// Ik heb ervoor gekozen om een aantal letters en cijfers weg te laten aangezien deze veel op elkaar lijken (1, i).
$Characters = '23456789abcdefghjklmnpqrstuvwxyz';
// Aantal tekens dat gebruikt wordt om de Captcha aan te maken.
// Ik heb het aantal ingesteld op 5
$chars = 5;
// Stel hieronder de afmetingen voor de Captcha afbeelding in.
// Ik heb gekozen voor 150 pixels breed bij 50 pixels hoog.
$Width = 150;
$Height = 50;
// Maak de Captcha code aan. De code hieronder kiest willekeurig het aantal tekens uit dat is vastgelegd.
// In het geval van dit voorbeeld worden er 5 willekeurige tekens gekozen uit de lijst $Characters
$i = 0;
while ($i < $chars)
{
$randomnr .= substr($Characters, mt_rand(0, strlen($Characters)-1), 1);
$i++;
}
// Schrijf de aangemaakte Captcha code weg in een Session.
// Ik versleutel de code met een md5 hash zodat de code niet zomaar uit de Session te lezen is.
$_SESSION['randomnr2'] = md5($randomnr);
// Start met het aanmaken van de afbeelding.
$im = imagecreatetruecolor($Width, $Height);
// Bepaal de kleuren die je wilt gebruiken. Deze Captcha maakt gebruik van 3 kleuren.
// Kleur 1: $front is de Captcha Code waar het uitenidelijk om draait.
// Kleur 2: $shadow is de schaduw die ik achter de Captcha Code schrijf.
// Kleur 3: $background is de achtergrond kleur van de gehele Captcha afbeelding.
$front = imagecolorallocate($im, 255, 255, 255);
$shadow = imagecolorallocate($im, 128, 128, 255);
$background = imagecolorallocate($im, 6, 51, 125);
// Vul de aangemaakt afbeelding met de hierboven ingestelde achtergrond kleur.
imagefilledrectangle($im, 0, 0, $Width, $Height, $background);
// Stel het True Type Font in dat je wilt gaan gebruiken.
// Zorg ervoor dat je de juiste locatie van je .ttf bestand invult.
// Voor deze Captcha maak ik gebruik van Artbrush.ttf
$font = 'includes/ArtBrush.ttf';
// Stel de max. en min. hoek in waarmee je de Captcha weg wilt schrijven. Gebruik hiervoor een getal tussen de 0 en 15.
// Deze hoeken worden hierna willekeurig bepaalt aan de hand van de ingestelde max. en min. waarden.
// $angle1 is de hoek waarin de Schaduw van de Captcha code wordt weergegeven.
// $angle2 is de hoek waarin de Captcha code zelf wordt weergegeven.
$angle1 = rand(-12, 12);
$angle2 = rand(-12, 12);
// Schrijf de Schaduw van de Captcha op de afbeelding.
// Het eerste getal (hier 25) is de grootte van de tekens die weggeschreven worden.
// Het tweede getal (hier 20) is de afstand in pixels dat de tekens van de rechterkant af weggeschreven worden.
// Het derde getal (hier 28) is de afstand in pixels dat de tekens van de bovenkant af weggeschreven worden.
imagettftext($im, 25, $angle1, 20, 28, $shadow, $font, $randomnr);
// Schrijf de Captcha Code op de afbeelding.
// Het eerste getal (hier 20) is de grootte van de tekens die weggeschreven worden.
// Het tweede getal (hier 30) is de afstand in pixels dat de tekens van de rechterkant af weggeschreven worden.
// Het derde getal (hier 32) is de afstand in pixels dat de tekens van de bovenkant af weggeschreven worden.
imagettftext($im, 20, $angle2, 30, 32, $front, $font, $randomnr);
// Voorkom dat de afbeelding ge-cached wordt door headers te versturen.
header("Expires: Wed, 1 Jan 1997 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
// Verzend de aangemaakte afbeelding naar de browser.
header ("Content-type: image/gif");
imagegif($im);
imagedestroy($im);
?>
// Start de Session die nodig is om de Captcha code te gebruiken.
session_start();
// Lijst met alle letters en cijfers die gebruikt worden om de Captcha aan te maken.
// Ik heb ervoor gekozen om een aantal letters en cijfers weg te laten aangezien deze veel op elkaar lijken (1, i).
$Characters = '23456789abcdefghjklmnpqrstuvwxyz';
// Aantal tekens dat gebruikt wordt om de Captcha aan te maken.
// Ik heb het aantal ingesteld op 5
$chars = 5;
// Stel hieronder de afmetingen voor de Captcha afbeelding in.
// Ik heb gekozen voor 150 pixels breed bij 50 pixels hoog.
$Width = 150;
$Height = 50;
// Maak de Captcha code aan. De code hieronder kiest willekeurig het aantal tekens uit dat is vastgelegd.
// In het geval van dit voorbeeld worden er 5 willekeurige tekens gekozen uit de lijst $Characters
$i = 0;
while ($i < $chars)
{
$randomnr .= substr($Characters, mt_rand(0, strlen($Characters)-1), 1);
$i++;
}
// Schrijf de aangemaakte Captcha code weg in een Session.
// Ik versleutel de code met een md5 hash zodat de code niet zomaar uit de Session te lezen is.
$_SESSION['randomnr2'] = md5($randomnr);
// Start met het aanmaken van de afbeelding.
$im = imagecreatetruecolor($Width, $Height);
// Bepaal de kleuren die je wilt gebruiken. Deze Captcha maakt gebruik van 3 kleuren.
// Kleur 1: $front is de Captcha Code waar het uitenidelijk om draait.
// Kleur 2: $shadow is de schaduw die ik achter de Captcha Code schrijf.
// Kleur 3: $background is de achtergrond kleur van de gehele Captcha afbeelding.
$front = imagecolorallocate($im, 255, 255, 255);
$shadow = imagecolorallocate($im, 128, 128, 255);
$background = imagecolorallocate($im, 6, 51, 125);
// Vul de aangemaakt afbeelding met de hierboven ingestelde achtergrond kleur.
imagefilledrectangle($im, 0, 0, $Width, $Height, $background);
// Stel het True Type Font in dat je wilt gaan gebruiken.
// Zorg ervoor dat je de juiste locatie van je .ttf bestand invult.
// Voor deze Captcha maak ik gebruik van Artbrush.ttf
$font = 'includes/ArtBrush.ttf';
// Stel de max. en min. hoek in waarmee je de Captcha weg wilt schrijven. Gebruik hiervoor een getal tussen de 0 en 15.
// Deze hoeken worden hierna willekeurig bepaalt aan de hand van de ingestelde max. en min. waarden.
// $angle1 is de hoek waarin de Schaduw van de Captcha code wordt weergegeven.
// $angle2 is de hoek waarin de Captcha code zelf wordt weergegeven.
$angle1 = rand(-12, 12);
$angle2 = rand(-12, 12);
// Schrijf de Schaduw van de Captcha op de afbeelding.
// Het eerste getal (hier 25) is de grootte van de tekens die weggeschreven worden.
// Het tweede getal (hier 20) is de afstand in pixels dat de tekens van de rechterkant af weggeschreven worden.
// Het derde getal (hier 28) is de afstand in pixels dat de tekens van de bovenkant af weggeschreven worden.
imagettftext($im, 25, $angle1, 20, 28, $shadow, $font, $randomnr);
// Schrijf de Captcha Code op de afbeelding.
// Het eerste getal (hier 20) is de grootte van de tekens die weggeschreven worden.
// Het tweede getal (hier 30) is de afstand in pixels dat de tekens van de rechterkant af weggeschreven worden.
// Het derde getal (hier 32) is de afstand in pixels dat de tekens van de bovenkant af weggeschreven worden.
imagettftext($im, 20, $angle2, 30, 32, $front, $font, $randomnr);
// Voorkom dat de afbeelding ge-cached wordt door headers te versturen.
header("Expires: Wed, 1 Jan 1997 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
// Verzend de aangemaakte afbeelding naar de browser.
header ("Content-type: image/gif");
imagegif($im);
imagedestroy($im);
?>
Opgeroepen d.m.v.
Kan iemand mij helpen of heeft iemand een idee hoe het in ene kan veranderen??
Gewijzigd op 01/05/2015 17:58:24 door Mark van den Brink
Wat gaat er precies mis.
De aangemaakte afbeelding word niet meer weergegeven sinds begin van deze week. Terwijl er deze week geen aanpassingen zijn gedaan aan de bestanden...
Haal je Content-Type header weg zodat je eventuele foutmeldingen kunt zien.
Zet ook het melden en weergeven van fouten aan:
Voeg de hierboven beschreven wijzigingen door in captcha.php en roep vervolgens dit bestand rechtstreeks aan.
Welke foutmelding(en) krijg je dan?
Precies gedaan wat Thomas zei en dit is de output:
Code (php)
1
2
2
GIF87a?2?2|???Df??????tv?4V???????\z?t??F????\f???L^???4Z?????????B????Tf????|????????,R?Tr?|??dr?>????4N?,J?????Tj?DZ???????DV????Ln?t~????t????????????????6|???|z????lz?dj?L^??????lr???????????DZ??????????<??O???,5xK??? "g!?zT??G ?B???E*#SD?9?YcQ?p????+.?nl??&?<???@? 5@2????B??1????\<??K??? R?H?>??k?p? W?R??q??-?0 ????qS?E |?D?2i?xa???2r?R???-aL??d??e??7??_??OJl?D?K????S ??;??o?soL?0<??s?X?3 <?????vP%U?@??B??(1?96?H Rq?7d??8???q}N%?5?F?YK?D ??? ?9?C?S?F??7??E$??!D????s? ?YP$??xD????"?[B??` y??? *?k?????6t?)????Z?[? @4 F0?6c8!?????0?? ???(a??? ?Gax??U-!pT ?J*?8y@???I?b?N????- <?N?8??T@?\?Y?Sh???p???sP!?0l?xLK??3*X 'N(0p? ?JE,B??=? ?9???P?B ??S?C?%1Q??H`AV !8????@g?P@??+lay??z?7?a a Ery-* ???s6???!???Y$??5d+}k????@MQAw?qA(??7????&?? PE1???@?A?q??Pm?7J??"g&??sG??J?##A#?N?X?(???.?@a|??0Z?@??)?)????? 58??2'h?? ??5?4`?y????G?DHK?????5 @)D?&?acax?/8??"?Kd??M???0l+,,-lA????TxB?1M??????Od??x08u??g???|5?? +uQ?]?X?-?J?y?`c??Bx?p c8???_?B?Fd????p?k???"?'??S?mc??By/?]????d?a??(1?`??b??-???????=?o!r?Nps?????{??Y?w;<????^m?pq?#%?^??X?:d??? f?V?*?X?6?X?JO0??+1??+|???#,o~#T?+???J?_??J?H)s?5?????G0?%??|??~'??9?H??B?,?C?Y??;?\&4l?<?6s90 ??? ??:s??6?=WX?h??s?^??<??i???c;
@Thomas: Dat had ik reeds al gedaan.
$font = 'includes/ArtBrush.ttf';
Toevoeging op 01/05/2015 23:22:10:
Het script werkt (direct aangeroepen) prima. Wel even een ander bij mij beschikbaar font gebruikt:
'/usr/share/fonts/truetype/freefont/FreeSerif.ttf';
PHP hier is 5.4.39 en Apache 2.0
Wel zoals eerder opgemerkt door Thomas een notice: Undefined variable: randomnr in /var/www/test/httpdocs/testgif.php on line 24.
Mogelijk breekt dat af bij jou hoster die misschien (sinds kort) deze notice niet (meer) accepteert. Dus ook even doen wat Thomas aangeeft.
Gewijzigd op 01/05/2015 23:31:22 door Aad B
Op zich wel apart dat hij na een jaar dat hij zonder problemen gewerkt heeft nu op zo'n punt vastloopt?
Mag ik jullie allemaal bedanken voor de hulp! Hij is weer gefixt!
Komt waarschijnlijk omdat je hoster een update heeft uitgevoerd en waarbij de vroegere notice nu een error is en je script stopt. Het is handig om de versies bij je hoster in de gaten te houden om bijvoorbeeld bij dit soort acties te achterhalen wat er gebeurt is. Helaas zijn er veel hosters die zonder enige aankondiging systeemchanges doorvoeren.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
$path = "images/winkel/".$HTTP_POST_FILES['afbeelding']['name'][0];
$afbeelding= "".$HTTP_POST_FILES['afbeelding']['name'][0];
if($afbeelding == "") {
}else{
copy($HTTP_POST_FILES['afbeelding']['tmp_name'][0], $path);
$filesize1=$HTTP_POST_FILES['afbeelding']['size'][0];
if($filesize1==0) {
$userErrors[] = "Kon afbeelding niet uploaden!<br>";
}
$afbeelding= "".$HTTP_POST_FILES['afbeelding']['name'][0];
if($afbeelding == "") {
}else{
copy($HTTP_POST_FILES['afbeelding']['tmp_name'][0], $path);
$filesize1=$HTTP_POST_FILES['afbeelding']['size'][0];
if($filesize1==0) {
$userErrors[] = "Kon afbeelding niet uploaden!<br>";
}
Dit werkt ook niet meer als ik deze code verwijder kan ik rustig mijn artikel toevoegen via PHP en MYSQL maar emt dit stukje code breekt hij me code af.
Tijd voor een code revisie.
Ook zou je kunnen nakijken / navragen (bij je host) of je PHP versie recent is veranderd. En tis niet erg gebruiksvriendelijk dat dit zonder enige aankondiging gebeurt inderdaad.
Bedankt voor je hulp!
Gebruiksvriendelijk? Jij als programmeur moet het bijhouden en geen oude shit gebruiken. Refactoren dus
Zelfs al was de code up-to-date is er nog steeds geen enkele garantie dat alles werkt / blijft werken op het moment dat je host out-of-the-blue besluit webservers te upgraden. Je argument gaat dus niet helemaal op.