Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Ramka wokół obrazka z podpisem. Ciężki skrypt., Jak na wikipedii i innych wiki.
igors
post
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 6.02.2006

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


Napisałem skrypt, którego działanie opisałem w komentarzach.
Powinien zamieniać
Cytat
[img=adres]podpis[/img]


na

  1. <div class="divimg" style="width: szerokość_adres px;">
  2. <div>
  3. <img src="adres" alt="" />
  4. </div>
  5. <div>podpis</div>
  6. </div>


Oto skrypt.

  1. <?php
  2. //$str to zawartość artykułu.
  3.  
  4. //Funkcja sprawdzająca, czy plik z zewnętrznego serwera istnieje. Nie mojego autor
    stwa.
  5.  
  6. function remote_file_exists($filename) {
  7. $ch = curl_init($filename);
  8. curl_setopt($ch, CURLOPT_NOBODY, true);
  9. curl_exec($ch);
  10. $response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  11. curl_close($ch);
  12. return ($response_code == 200);
  13. }
  14.  
  15. //Funkcja pobierająca szerokość obrazka
  16.  
  17. function img_width($imgwidthcheck) {
  18. if (!remote_file_exists($imgwidthcheck)) {
  19. $image = 'http://mojastrona.pl/brak.gif';
  20. }
  21. else { $imagewidth = $imgwidthcheck; }
  22. $dane = getimagesize($imagewidth);
  23. $szer = $dane[0];
  24. return $szer;
  25. }
  26.  
  27. //Funkcja sprawdzająca, czy obrazek istnieje. Jeżeli nie, obrazek zostaje zastąpio
    ny przez
  28. //http://mojastrona.pl/brak.gif
  29.  
  30. function obrazek_exists($imgcheck) {
  31. if (!remote_file_exists($imgcheck)) {
  32. $image = 'http://mojastrona.pl/brak.gif';
  33. }
  34. else { $image = $imgcheck; }
  35. return $image;
  36. }
  37.  
  38. //Funkcja BBCODE
  39.  
  40. Function bbcode($str){
  41.  
  42. $naco = <<<EOPHP
  43. '<div class="divimg" style="width: '.img_width('2').'px;">
  44. <div>
  45. <img src="'.obrazek_exists('2').'" alt="" />
  46. </div>
  47. <div>4</div>
  48. </div>'
  49. EOPHP;
  50.  
  51. $zamien = '#[img=(W?)(.*?)(W?)](.*?)[/img]#e';
  52.  
  53. $str = preg_replace($zamien, $naco, $str);
  54.  
  55. //(...)
  56.  
  57. }
  58. ?>


Działa strasznie wolno. Nie sprawdzałem, jaki jest czas wykonania skryptu, ale kiedy przechodzę na stronę z użytym [img=adres]podpis[/img], to strona ładuje się dużo wolniej, a czasami wywala błąd:
Cytat
MySQL server has gone away
i zawartość strony po błędzie nie ładuje się.

Czy pomógłby mi ktoś odchudzić ten skrypt?
A może wiecie, jak zostało to rozwiązane na wikipedii? (wiem, na wikipedii skrypt ten jest bardziej rozbudowany i funkcjonalny)
http://wiesz.squarezone.pl/WIESZ:Uwagi_o_w...3.C5.82_obrazka

Dziękuję.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


curl_setopt" title="Zobacz w manualu PHP" target="_manual - Poczytaj sobie o CURLOPT_CONNECTTIMEOUT i CURLOPT_TIMEOUT bo najwięcej czasu zajmuje sprawdzenie, czy obrazek na zewnętrznym serwerze istnieje.


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
igors
post
Post #3





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 6.02.2006

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


Jeżeli mam być szczery i nie udawać mądrzejszego z php niż w rzeczywistości jestem, powiem tak:
ta funkcja to jakaś wyższa szkoła jazdy.
Zrozumiałem jedynie, że CURLOPT_TIMEOUT to maksymalna liczba sekund na wykonanie funkcji cURL,
a CURLOPT_CONNECTTIMEOUT maksymalna liczba sekund czekania na połączenie, a w przypadku, gdy wartość jest 0, będzie próbowało się łączyć dopóty, dopóki się nie połączy.
Dobrze zrozumiałem?

Niby teoria (jakaś tam marna) za mną, ale nie umiem tego wcielić w życie i zastosować do tego konkretnego przykładu.

Mogę liczyć na pomoc?

EDIT
Może jednak?
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: 19.08.2025 - 09:24