Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Skrypt captcha nie wyświetla obrazka tylko "robaki"
Forum PHP.pl > Forum > Przedszkole
bogdanh
Wczytuje standardowy skrypt dla prostego captcha ale zamiast obrazka dostaję błąd PHP i "robaki zamiast grafiki".
Poniżej skrypt, który wczytuję poprzez include do pliku index.php...
Kod
header("Content-type: image/png");
$string = "abcdefghijklmnopqrstuvwxyz0123456789";
for($i=0;$i<6;$i++)
{
    $pozycja_znaku = rand(0,strlen($string));
    $szesc_znakow .= $string{$pozycja_znaku};
}
$obrazek = ImageCreate(60, 20) or die("Serwer posiada biblioteke GD?");
$kolor_tla = ImageColorAllocate($obrazek, 255, 255, 255);
$kolor_tekstu = ImageColorAllocate($obrazek, 0, 0, 0);
ImageString($obrazek, 32, 5, 0, $szesc_znakow, $kolor_tekstu);
Imagepng($obrazek);


Błąd:Warning: Cannot modify header information - headers already sent by...
Zamiast obrazka dostaję coś takiego:
�PNG  IHDR<����jPLTE
lobopol
Obstawiam kodowanie pliku, zmień na utg8 bez bom i kolejna rzecz czy coś jest wyświetlane przed tym includem (nawet spacja przed <?php może to powodować)
bogdanh
Cytat(lobopol @ 2.05.2013, 16:43:40 ) *
Obstawiam kodowanie pliku, zmień na utg8 bez bom i kolejna rzecz czy coś jest wyświetlane przed tym includem (nawet spacja przed <?php może to powodować)

Całość mam kodowaną w UTF-8. Próbowałem zmieniać jak piszesz kodowanie, ale dalej pisze "robakami".
Skrypt jest includowany do kodu html. Poniżej wycinek:
Kod
<div class="form_row"><label class="left">Email: </label><input type="text" class="form_input"/></div><?php include("captcha.php");?>                    
                    <div style="float:right; padding:10px 25px 0 0;">

Żeby nie dostawać komunikatu o wysyłaniu nagłowka zastosowałem ob_start() i ob_end_flush() ale bez efaktu.

lobopol
To nie ma się co dziwić, że masz źle skoro ustawiasz całemu plikowi mime obrazka to krzaki będą. musisz sobie generować w oddzielnym adresie i dodawać obrazek w tagu img
  1. <img src="captcha.php?tujakiś randomblokujący cacheowanie"/>
bogdanh
Oczywiście, że masz rację - doczytałem tą informację. Niestety nie wyświetla nic jako <img...
Kodowanie sprawdziłem (używam notepad++) mam UTF8 bez BOM.
Co prawda nie mogę znaleźć nic na temat przesłania parametru do blokowania casch, ale to teraz jest nieważne. smile.gif
Skrypt generuje grafike, bo wczytany sam działa.
Czyli na przeszkodzie stoi ten cholerny nagłówek. sad.gif
lobopol
pokaż jak teraz wczytujesz. Masz jeszcze błędy kodowe:
1. używasz niezainicjalizowanych zmiennych $szesc_znakow
2.
  1. $pozycja_znaku = rand(0,strlen($string));

może wcelować w nieistniejący znak jeżeli wylosuje liczbę równą ilości znaków

co do randomowego geta możesz użyć time albo microtime
bogdanh
Kod
<div class="form_row"><label class="left">Email: </label><input type="text" class="form_input"/></div>
<img scr="captcha.php"/>
lobopol
src a nie scr w img
bogdanh
Cholera - przepraszam za mój debilizm. Tak się zasugerowałem teorią, że palce źle piszą.
Zmienna poprawiona.
Dziękuję działa. smile.gif
P.s.
Pisałeś: "może wcelować w nieistniejący znak jeżeli wylosuje liczbę równą ilości znaków".
Można to w prosty sposób zmienić?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.