![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 110 Pomógł: 0 Dołączył: 3.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Tworzę tokena z tutoriala bo nigdy wcześniej nie rozbiłem takiego czegoś, i mam taki kod:
Kod <?php $slowa=file('hasla.txt'); if(isset($_GET['id'])) $nr=$_GET['id']; else $nr=rand(0,count($slowa)-1); $slowo=$slowa[$nr]; $wysokosc=20; $szerokosc=60; $pic=ImageCreate($szerokosc,$wysokosc); $bialy=ImageColorAllocate($pic,255,255,255); $czarny=ImageColorAllocate($pic,0,0,0); $szary=ImageColorAllocate($pic,150,150,150); ImageFill($pic,1,1,$bialy); for($i=0;$i<100;$i++) { $los1=rand(0,$szerokosc); $los2=rand(0,$wysokosc); ImageLine($pic,$los1,$los2,$los1,$los2,$szary); } for($i=0;$i<count($slowa);$i++) { $rozmiar=rand(2,5); ImageString($pic,$rozmiar,$i*10+7,3,trim($slowo[$i]),$czarny); } Header("Content-type: image/gif"); ImageGIF($pic); ?> i co do powyższego kodu mam kilka zasadniczych pytań, od początku czyli: else $nr=rand(0,count($slowa)-1); jakie zadanie ma -1 ? bo po testach zauważyłem, że gdy jest -1 to zawsze wyświetli się wyraz, a jeżeli nie ma tego -1 to niekiedy nie wyświetla się wyraz tylko samo tło tokenu, nie rozumiem tego(?) druga sprawa to druga pętla for: Kod for($i=0;$i<count($slowa);$i++) { $rozmiar=rand(2,5); ImageString($pic,$rozmiar,$i*10+7,3,trim($slowo[$i]),$czarny); } i dokładnie nie rozumiem tam tego: $i*10+7, to jest 3 argument tej funkcji, który ma być punktem zaczęcia napisu z lewej górnej strony, tak pisze w manualu w takim razie dlaczego $i*10 to jest przerwa pomiędzy kolejnymi literami, a 7 to odległość napisu z lewej strony? testowałem inny obrazek bez pętli to działał normalnie czyli 3 argument to była poprostu odległość od lewego górnego pkt. nie rozumiem jednak tej pętli, z góry dzięki za cierpliwosc i wytlumaczenie :] pzdr. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 1 Dołączył: 22.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Pozwolę sobie Panu odpowiedzieć.
Jeśli chodzi o linijkę: CODE else $nr=rand(0,count($slowa)-1); count($slowa) oznacza po prostu długość tablicy $slowa. Jak wiemy, w PHP indeksy tablicy zaczynają się od zera, a nie od 1. Długość tablicy jest więc o 1 większa niż indeks jej ostatniego elementu. Gdybyśmy nie odjęli 1, funkcja rand() mogłaby wylosować element leżący poza tablicą (stąd czasami pojawia się Panu puste tło). Odnośnie pętli: CODE for($i=0;$i<count($slowa);$i++) Zawiera ona rażący błąd (byćmoże autor Tutoriala pomylił się). Zamiast count($slowa) powinno być strlen($slowo). Nie wątpię jednak, że token uruchamia się Panu pozornie prawidłowo. Proszę jednak zauważyć, że jeżeli długość słowa jest większa od ilości wpisów w pliku "hasla.txt", to nie zostanie wyświetlone pełne słowo. Jeżeli słów jest dużo, to problem jest niezauważalny. Niestety, jeżeli mamy np. 5 słów w pliku, z których jedno brzmi np. "Parasaurolofus", to na tokenie zobaczymy tylko literki "Paras". Dzieje się tak, ponieważ count($slowa) oznacza długość tablicy $slowa, czyli ilość tekstów z pliku. Zamiast tego powinno być: CODE for ($i=0;$i<strlen($slowo);$i++) Teraz wyświetli się Panu tyle literek, ile zawiera ich tekst w zmiennej $slowo. Odnośnie linijki: CODE ImageString($pic,$rozmiar,$i*10+7,3,trim($slowo[$i]),$czarny); Punktem, od którego zaczniemy rysowanie tekstu w poziomie będzie 7, ponieważ w pierwszym przebiegu pętli wartość zmiennej $i będzie wynosić 0, a więc 0*10+7 = 7. W kolejnym przebiegu wartość zmiennej $i będzie wynosić 1, a więc 1*10+7 = 17. Jak więc Pan widzi, odległość między początkami kolejnych liter wynosi 10. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 110 Pomógł: 0 Dołączył: 3.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
dziękuję bardzo
![]() słuszna uwaga z tym: Kod for($i=0;$i<count($slowa);$i++) nawet tego nie zauważyłem, bo każde moje słowo w pliku hasla.txt miało 5 znaków a wyrazów było o wiele więcej ![]() pozdrawiam. p.s mam jeszcze pytanie czy jest sens działania tej pętli: Kod for($i=0;$i<100;$i++) { $los1=rand(0,$szerokosc); $los2=rand(0,$wysokosc); ImageLine($pic,$los1,$los2,$los1,$los2,$szary); } skoro kropki są koloru innego niż tekst (są koloru szarego) więc nie utrudni to botom rozszyfrowania tekstu, prawda? zrobić więc czarne kropki? da to coś? czy w ogóle zrezygnować z kropek? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 1 Dołączył: 22.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli bot jest pisany specjalnie do złamania tokena na Pańskiej stronie, to cracker na pewno każe mu odrzucić wszystko co jest w kolorze innym niż czarny. Radziłbym Panu wprowadzić kolorowe tło, oraz tekst i kropki w losowanych barwach.
Poza tym, rada na przyszłość: jeżeli rysujemy pojedyncze piksele, to jest do tego prostsza instrukcja niż imageline(): imagesetpixel($obraz,x,y,$kolor); Również pozdrawiam :-) Tak nawiasem, to lepiej od imagestring() do tworzenia tekstów nadaje się funkcja imagettftext(); Ta pierwsza pozwala tworzyć tekst tylko z jednym krojem czcionki, poza tym nie ma możliwości obrócenia liter - to gratka dla botów :-( Funkcja imaggettftext() służy do utworzenia czcionki z pliku. Przyjmuje argumenty w następującej kolejności: - $obraz - wskaźnik do obrazu; - rozmiar - kąt obrotu - lewy dolny wierzchołek tekstu (x,y) - wskaźnik do koloru - ścieżka do pliku z czcionką (z roszerzeniem .ttf) - tekst do wypisania. Ciekawym rozwiązaniem byłoby napisanie każdej litery pod losowym kątem (na przykład z przedziału (-45 do 45 stopni) innym (również losowym) krojem czcionki. |
|
|
![]() ![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 11.09.2006 Skąd: wawa Ostrzeżenie: (0%) ![]() ![]() |
a ja mam mały problem, ponieważ mam uruchomioną bibliotekę gd i exif oraz mbstring i mi jak nie chce działać tak nie działa (zrobiłem to zgodnie z tym jak napisane jest w php.net) a skopiowany skrypt mi nie działa. Wyświetla mi tylko napis że:
nie wiem co się dzieje. Czy ktoś może pomóc z tym? Z góry dzięki |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Skomentuj wywołania header" title="Zobacz w manualu PHP" target="_manual i zobacz, jakie błedy sypie.
-------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]() ![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 11.09.2006 Skąd: wawa Ostrzeżenie: (0%) ![]() ![]() |
header("Content-type: image/gif"); jak zakomentuje to pokazuje mi
Notice: Uninitialized string offset: od 7 do 20 in C:\wamp\www\token.php on line 23 no i dodatkowo znaczki |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
No to znaczy, że nie masz takich znaków o takich pozycjach w zmiennej tekstowej. Jakbyś chciał odczytać znaki 7-20 z sześcioznakowego ciągu.
-------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 11.09.2006 Skąd: wawa Ostrzeżenie: (0%) ![]() ![]() |
nie rozumiem o co chodzi. Możesz jaśniej?
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Masz np:
A chcesz wyciągnąć czwartą literę z $str. -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 11.09.2006 Skąd: wawa Ostrzeżenie: (0%) ![]() ![]() |
jest mały problem, ponieważ jak dodałem po jednym znaku to nic mi się nie zmieniło. A możesz mi podpowiedzieć co mam zrobić, aby mi sie normalnie wyświetlało??
Ten post edytował linuxoida 7.03.2009, 12:57:53 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 00:52 |