Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Ramka wokół obrazka z podpisem. Ciężki skrypt.
Forum PHP.pl > Forum > PHP
igors
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ę.
Kicok
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.
igors
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?
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.