Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Blad podczas wyswietlania grafiki
marcio
post
Post #1





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Witam wiem ze temat walkowany ale ja na gd i buforuwaniu sie nie znam.
Wchodzac na www.marcio.ekmll.com/captcha.php widac ze wszystko dziala.
Jak ze wziolem sie za pisanie biblioteki do obslugi grafiki chcialem ja wczoraj przetestowac jednak nie dziala gdy chce ja wykorzystac w jakims komponencie/pluginie lub na stronie index.php w czasie testow co jest denerwujace bo nawet jesli dziala w fw poki co nie moge uzyc.
Tak wyglada index.php z testowana biblioteka:
  1. <?php
  2.  
  3. require_once('frontcontroller/Init.php');
  4. require_once('libraries/Captcha.php');
  5.  
  6. $core = new Dispatcher();
  7. $core -> Exec($router);
  8.  
  9. $captcha = new Captcha();
  10. echo('<img src='.$captcha -> Render().'>');
  11.  
  12. ?>

Probowalem uzywac ob_flush()/ob_end_flush()/ob_clean() i ob_end_clean co najwyzej wyswietlala sie strona z bledem header'a bez captch'y lub sama captcha bez strony.
Tutaj jest klasa Captcha: http://3paste.com/hash/b21a2b54dba5810aa9301fa01215c1b1
Moze mam zastosowac jakos buforowanie w __construct()/__destruct zeby zadzialalo jednak z pomoca zwracam sie do was.

P.S nie ma to jak niezle wciecia na 3paste smile.gif

?


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Wklej jeszcze libraries/drivers/Captcha/Math_Driver.php
bo nie widzę, żebyś coś zwracał, albo gdzieś miał echo lub print. Sprawdź jeszcze czy masz bibliotekę GD włączoną.


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
marcio
post
Post #3





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat(darko @ 12.02.2010, 17:50:01 ) *
Wklej jeszcze libraries/drivers/Captcha/Math_Driver.php
bo nie widzę, żebyś coś zwracał, albo gdzieś miał echo lub print. Sprawdź jeszcze czy masz bibliotekę GD włączoną.

To jest tylko sterownik ktory zwraca losowy ciag w przypadku Random i dzialanie matematyczne w przypadku Math.
Sam lib dziala ale tylko gdy go wywoluje jako osobny plik: http://marcio.ekmll.com/captcha.php
Jednak jesli chce to uzyc we FW w jakims komponencie to nie dziala bo jak wiadomo mamy juz naglowek z html'a.
Chce zeby dzialalo jak to jest w kohana ze biblioteke captcha/image moge wywolac gdzie chce i ma dzialac a nie z osobnego pliku bo dla mnie to zadne rozwiazanie.

Ten post edytował marcio 12.02.2010, 22:47:14


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
darko
post
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Nadpisz metodę RenderCaptcha() tak, żeby nie wysyłała utworzonego obrazka captcha do przeglądarki, ale żeby zapisywała tymczasowo na serwerze plik, do którego zresztą intuicyjnie próbujesz podać ścieżkę pisząc:

  1. echo('<img src='.$captcha -> Render().'>');


i po problemie.


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
marcio
post
Post #5





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat(darko @ 13.02.2010, 04:04:18 ) *
Nadpisz metodę RenderCaptcha() tak, żeby nie wysyłała utworzonego obrazka captcha do przeglądarki, ale żeby zapisywała tymczasowo na serwerze plik, do którego zresztą intuicyjnie próbujesz podać ścieżkę pisząc:

i po problemie.

Tzn cos takiego?
  1. public function RenderCaptcha() {
  2.  
  3. header("Content-type: image/".$this -> CaptchaType);
  4. $func = 'image'.$this -> CaptchaType;
  5. $func($this -> img, 'image/captcha.png', 5);
  6. imagedestroy($this -> img);
  7.  
  8. }

Potem mam robic?
  1. echo('<img src=''image/captcha.png">');

Lub poprostu w metodzie Render() mam zwracAC sciezke o to chodzi?
IMHO totalny bezsens szkoda transferu wiecej czasu to zajmie potem musialbym usuwac captche albo nadpisywac za kazdym razem.

Sprobowalem tak jak opisalem wyzej chyba zgodne z tym co ty napisales.
Wszystko wporzo obrazek sie zapisuje i mozna go wyswietlic tylko za kazdym przeladowaniem strony captcha ma byc inny wiec trzeba usunac stary i utworzyc nowy, problem w tym ze obraz oprocz tego ze jest zapisywany jest tez wysylany odrazy do przegladarki i nie dziala.

Ten post edytował marcio 13.02.2010, 14:42:28


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
darko
post
Post #6





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


zakomentuj linię:
  1. header("Content-type: image/".$this -> CaptchaType);

i zrób taki mały "trik", że jak zwrócisz ścieżkę do obrazka i wyplujesz kod html to wywołaj wtedy metodę (którą sobie napiszesz), która usunie fizycznie plik z serwera.


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
marcio
post
Post #7





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Ok dziala:
  1. protected function RenderCaptcha() {
  2.  
  3. $func = 'image'.$this -> CaptchaType;
  4. $func($this -> img, $this -> ImgCaptchaName);
  5. imagedestroy($this -> img);
  6.  
  7. }
  8.  
  9.  
  10. protected function Render() {
  11.  
  12. if(file_exists($this -> ImgCaptchaName)) {
  13.  
  14. unlink($this -> ImgCaptchaName);
  15.  
  16. }
  17.  
  18. $func = $this -> Driver.'Captcha';
  19. $code = $this -> ObjectRandom -> $func();
  20. $this -> CreateCaptcha($code);
  21. $this -> RenderCaptcha();
  22.  
  23. }
  24.  
  25.  
  26. public function getCaptcha() {
  27.  
  28. $this -> Render();
  29.  
  30. return '<img src="'. $this -> ImgCaptchaName.'" alt="captcha" />';
  31.  
  32. }

W komponencie robie np:
  1. $captcha = new Captcha();
  2. echo($captcha -> getCaptcha());

Dzialac dziala tylko teraz mam pytanie jak mam teraz kombinowac z biblioteka do obrobki obrazkow?
Raczej nie moge postapic tak samo bo:
1)Co jesli w locie chce zrobic kilka czynnosci na jednym img musialbym znac sciezke do ktorej kazda funkcja bedzie zapisywac img za kazdym razem.
2)Co jesli bede chcial zapisac img bo bedzie to avatar user'a ktore zostal juz pomniejszony jedyne co mi przychodzi do glowy to kombinowac z arg. funkcji robic coa takiego:
  1. public funtion Resize($imagePath, $height = 60, $width = 120, $save = false) {
  2.  
  3. }

Gdy $save = false funkcja resize zapisuje tymczasowo img do images/resize.png gdy $save != false to zapisujemy do sciezki podanej wlasnie w tym arg.
Poterm znow za kazda obrobka kazda metoda bedzie musiala sprawdzac czy istnieje plik dla danej funkcji jesli tak usunac go by stworzyc nowy itp...
Troche duzo kombinowania tzn mi to tam wisi bo dzialac bedzie ale troche bez sensu i malo profesjonalne.

Podgladalem zrodla kohany ale tam tez maja naglowki i wszystko dziala.

P.S
  1. i zrób taki mały "trik", że jak zwrócisz ścieżkę do obrazka i wyplujesz kod html to wywołaj wtedy metodę (którą sobie napiszesz), która usunie fizycznie plik z serwera.

Zeby juz nic nie wywolywac to destruct bedzie chyba lepszy.

Ten post edytował marcio 13.02.2010, 18:00:44


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 01:58