/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Captcha og PHP 5.3.3
Fra : Karl-Arne Gjersøyen


Dato : 21-09-10 21:35

På min hjemmeside har jeg en captcha i tilbakemeldingsskjemaet. Det
virker under PHP 5.2.14 men ikke under PHP 5.3.3.

Her er captcha.php
------------------
<?php
//Start the session so we can store what the code actually is.
session_start();

//Now lets use md5 to generate a totally random string
$md5 = md5(microtime() * mktime());

/*
We dont need a 32 character long string so we trim it down to 7
*/
$string = substr($md5,0,7);

/*
Now for the GD stuff, for ease of use lets create
the image from a background image.
*/

$captcha = imagecreatefrompng("./captcha.png");
/*
Lets set the colours, the colour $line is used to generate lines.
Using a blue misty colours. The colour codes are in RGB
*/

$black = imagecolorallocate($captcha, 0, 0, 0);
$line = imagecolorallocate($captcha,233,239,239);

/*
Now to make it a little bit harder for any bots to break,
assuming they can break it so far. Lets add some lines
in (static lines) to attempt to make the bots life a little harder
*/
imageline($captcha,0,0,39,29,$line);
imageline($captcha,40,0,64,29,$line);

/*
Now for the all important writing of the randomly generated string to
the image.
*/
imagestring($captcha, 5, 20, 10, $string, $black);


/*
Encrypt and store the key inside of a session
*/

$_SESSION['key'] = md5($string);

/*
Output the image
*/
header("Content-type: image/png");
imagepng($captcha);

?>


Det hentes inn i fila function.emtpy_form.php slik:
----------------------------------------------------
$html .= "<p><img src=\"captcha.php\" alt=\"Security Image\"
width=\"100\" height=\"40\" />\n";

return $html;

Hvofor virker ikke dette i versjon 5.3.3?
Hva må jeg gjøre annerledes for at captcha skal virke?

Takk for all hjelp!

Vennlig hilsen
Karl-Arne
--
My home pages: http://www.karl-arne.name/

 
 
scootergrisen (21-09-2010)
Kommentar
Fra : scootergrisen


Dato : 21-09-10 14:53

Jeg bruger også PHP 5.3.3 og jeg kan godt få billedet frem hvis jeg
laver et captcha.png billed i samme mappe.
Har du stadig captcha.png billedet i samme mappe som captcha.php ?

Og har du GD installeret ?

Hvis ikke du har GD installeret til PHP så er det nok derfor.

Karl-Arne Gjersøyen (21-09-2010)
Kommentar
Fra : Karl-Arne Gjersøyen


Dato : 21-09-10 22:06

Den 21.09.2010 22:53, skrev scootergrisen:
> Jeg bruger også PHP 5.3.3 og jeg kan godt få billedet frem hvis jeg
> laver et captcha.png billed i samme mappe.
> Har du stadig captcha.png billedet i samme mappe som captcha.php ?

Function.empty_form.php includeres i index.php og captcha ligger i root
katalogen. Jeg prøvde å kopiere bilde inn i katalogen der funksjon
filene er lagret, men fikk samme resultat. Bildet vises ikke.
Så endret jeg img src til functions/capatcha.php men samme resultat. Det
vises ikke

>
> Og har du GD installeret ?

Ja, det har jeg :)

>
> Hvis ikke du har GD installeret til PHP så er det nok derfor.

Det virker helt OK under PHP 5.2.14 som du kan se på min hjemmeside, men
på versjon 5.3.3 vises bare teksten i alt attributten til img taggen.

Mvh Karl-Arne
--
My home pages: http://www.karl-arne.name/

Ole Gaarde Kristense~ (22-09-2010)
Kommentar
Fra : Ole Gaarde Kristense~


Dato : 22-09-10 00:10

"Karl-Arne Gjersøyen" <karlgjer@online.no> skrev i en meddelelse
news:YOudneay6tH-gwTRnZ2dnUVZ876dnZ2d@telenor.com...
> Den 21.09.2010 22:53, skrev scootergrisen:
>> Jeg bruger også PHP 5.3.3 og jeg kan godt få billedet frem hvis jeg
>> laver et captcha.png billed i samme mappe.
>> Har du stadig captcha.png billedet i samme mappe som captcha.php ?
>
> Function.empty_form.php includeres i index.php og captcha ligger i root
> katalogen. Jeg prøvde å kopiere bilde inn i katalogen der funksjon filene
> er lagret, men fikk samme resultat. Bildet vises ikke.
> Så endret jeg img src til functions/capatcha.php men samme resultat. Det
> vises ikke
>
>>
>> Og har du GD installeret ?
>
> Ja, det har jeg :)
>
>>
>> Hvis ikke du har GD installeret til PHP så er det nok derfor.
>
> Det virker helt OK under PHP 5.2.14 som du kan se på min hjemmeside, men
> på versjon 5.3.3 vises bare teksten i alt attributten til img taggen.
>
> Mvh Karl-Arne
> --
Hej Karl-Arne

Det der formentlig er problemet er stien til din font-fil.

Hvis du kan kalde den fil der danner billedet direkte vil du - hvis det er
der problemet er - se en fejl noget i stil med "Warning - Cannot open font
file in..."

Tilføj
putenv('GDFONTPATH=' . realpath('.'));
inden du danner billedet, og sørg for guds skyld for at der ikke er nogen
mellemrum i filnavnet.
Hvis så blot font-filen ligger i samme bibliotek som det script der danner
billedet, skulle det virke.

--
Med venlig hilsen
Ole Gaarde Kristensen



Karl-Arne Gjersøyen (22-09-2010)
Kommentar
Fra : Karl-Arne Gjersøyen


Dato : 22-09-10 09:01

Den 22.09.2010 01:09, skrev Ole Gaarde Kristensen:
> "Karl-Arne Gjersøyen"<karlgjer@online.no> skrev i en meddelelse
> news:YOudneay6tH-gwTRnZ2dnUVZ876dnZ2d@telenor.com...
>> Den 21.09.2010 22:53, skrev scootergrisen:
>>> Jeg bruger også PHP 5.3.3 og jeg kan godt få billedet frem hvis jeg
>>> laver et captcha.png billed i samme mappe.
>>> Har du stadig captcha.png billedet i samme mappe som captcha.php ?
>>
>> Function.empty_form.php includeres i index.php og captcha ligger i root
>> katalogen. Jeg prøvde å kopiere bilde inn i katalogen der funksjon filene
>> er lagret, men fikk samme resultat. Bildet vises ikke.
>> Så endret jeg img src til functions/capatcha.php men samme resultat. Det
>> vises ikke
>>
>>>
>>> Og har du GD installeret ?
>>
>> Ja, det har jeg :)
>>
>>>
>>> Hvis ikke du har GD installeret til PHP så er det nok derfor.
>>
>> Det virker helt OK under PHP 5.2.14 som du kan se på min hjemmeside, men
>> på versjon 5.3.3 vises bare teksten i alt attributten til img taggen.
>>
>> Mvh Karl-Arne
>> --
> Hej Karl-Arne
>
> Det der formentlig er problemet er stien til din font-fil.
>
> Hvis du kan kalde den fil der danner billedet direkte vil du - hvis det er
> der problemet er - se en fejl noget i stil med "Warning - Cannot open font
> file in..."
>
> Tilføj
> putenv('GDFONTPATH=' . realpath('.'));
> inden du danner billedet, og sørg for guds skyld for at der ikke er nogen
> mellemrum i filnavnet.
> Hvis så blot font-filen ligger i samme bibliotek som det script der danner
> billedet, skulle det virke.
>

Feilen lå her:
//Now lets use md5 to generate a totally random string
//$md5 = md5(microtime() * mktime()); // This work in PHP 5.2.14 and not
in PHP 5.3.3
$md5 = md5(date("H:i:s")); // Work in PHP 5.3.3

Mvh Karl-Arne
--
My home pages: http://www.karl-arne.name/

Martin (22-09-2010)
Kommentar
Fra : Martin


Dato : 22-09-10 11:05

On 22-09-2010 10:00, Karl-Arne Gjersøyen wrote:
>
> Feilen lå her:
> //Now lets use md5 to generate a totally random string
> //$md5 = md5(microtime() * mktime()); // This work in PHP 5.2.14 and not
> in PHP 5.3.3
> $md5 = md5(date("H:i:s")); // Work in PHP 5.3.3

Note:

As of PHP 5.1, when called with no arguments, mktime() throws an
E_STRICT notice: use the time() function instead.

Så mit gæt er at din error_reporting er sat til E_STRICT

Så bare ændre
$md5 = md5(microtime() * mktime());
til
$md5 = md5(microtime() * time())

Bemærk at
$md5 = md5(date("H:i:s"));
ALTID vil få den samme kode ud hvert sekund
Så hellere bruge
md5(date('His') * microtime());

Martin (22-09-2010)
Kommentar
Fra : Martin


Dato : 22-09-10 11:07

On 22-09-2010 12:04, Martin wrote:
> On 22-09-2010 10:00, Karl-Arne Gjersøyen wrote:
>>
>> Feilen lå her:
>> //Now lets use md5 to generate a totally random string
>> //$md5 = md5(microtime() * mktime()); // This work in PHP 5.2.14 and not
>> in PHP 5.3.3
>> $md5 = md5(date("H:i:s")); // Work in PHP 5.3.3
>
> Note:
>
> As of PHP 5.1, when called with no arguments, mktime() throws an
> E_STRICT notice: use the time() function instead.

og lige changelog
5.3.0     mktime() now throws E_DEPRECATED notice if the is_dst parameter
is used.

så error_reporting er sat til E_DEPRECATED (hvilket er standard i en
PHP5.3x løsning)

Martin (22-09-2010)
Kommentar
Fra : Martin


Dato : 22-09-10 11:08

On 22-09-2010 12:07, Martin wrote:
> On 22-09-2010 12:04, Martin wrote:
>> On 22-09-2010 10:00, Karl-Arne Gjersøyen wrote:
>>>
>>> Feilen lå her:
>>> //Now lets use md5 to generate a totally random string
>>> //$md5 = md5(microtime() * mktime()); // This work in PHP 5.2.14 and not
>>> in PHP 5.3.3
>>> $md5 = md5(date("H:i:s")); // Work in PHP 5.3.3
>>
>> Note:
>>
>> As of PHP 5.1, when called with no arguments, mktime() throws an
>> E_STRICT notice: use the time() function instead.
>
> og lige changelog
> 5.3.0 mktime() now throws E_DEPRECATED notice if the is_dst parameter is
> used.
>
> så error_reporting er sat til E_DEPRECATED (hvilket er standard i en
> PHP5.3x løsning)

Hov - det var da en helt anden funktion jeg kiggede på - glem det

Ole Gaarde Kristense~ (22-09-2010)
Kommentar
Fra : Ole Gaarde Kristense~


Dato : 22-09-10 19:13

"Karl-Arne Gjersøyen" <karlgjer@online.no> skrev i en meddelelse
news:y8idnWB_sdo3KgTRnZ2dnUVZ87-dnZ2d@telenor.com...
>
> Feilen lå her:
> //Now lets use md5 to generate a totally random string
> //$md5 = md5(microtime() * mktime()); // This work in PHP 5.2.14 and not
> in PHP 5.3.3
> $md5 = md5(date("H:i:s")); // Work in PHP 5.3.3
>
Super den er fundet!
Den har jeg ikke set før, men så har man da lært noget nyt igen

--
Med venlig hilsen
Ole Gaarde Kristensen



Søg
Reklame
Statistik
Spørgsmål : 177429
Tips : 31962
Nyheder : 719565
Indlæg : 6407948
Brugere : 218878

Månedens bedste
Årets bedste
Sidste års bedste