Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Filter na img z formularza...
Forum PHP.pl > Forum > PHP
Ania-678
Witam serdecznie.

Chcę zrobić "filtrowanko" na linki wkładane pomiędzy znaczniki bbcode (jak to jest na wielu skryptach for), które są wyciągane z przychodzącego (z formularza) do skryptu tekstu. Wymodziłam takie coś:


  1. <?php
  2. $str = $_POST['test'];
  3. preg_match_all('#[img](.*?)[/img]#si', $str, $img);
  4. $i = 0;
  5. foreach ($img as $val)
  6. {
  7. $val[$i] = preg_replace('#[img](.*?)[/img]#si', '1', $val[$i]);
  8. if(getimagesize($val[$i]))
  9. {
  10. echo '<br />OK<br />';
  11. }
  12. $i++;
  13. }
  14.  
  15. ?>


Jednak jest pewne ALE...

...jeśli w tekście jest więcej niż 2x [ img] [ /img] to sprawdza tylko dwa razy (2 razy echo'uje się...).

Dlaczego tak się dzieje - nie wiem, już kombinowałam na różne sposoby ale nic z tego nie wychodzi dry.gif Tak więc przychodzę z tym problemem na te forum rolleyes.gif
rzymek01
bardzo proszę:

  1. <?php
  2. $str = $_POST['test'];
  3.  
  4. preg_match_all('#[img](.*?)[/img]#si', $str, $img);
  5.  
  6. $val = &$img[1];
  7. for ($i = 0, $count = count($val); $i < $count; ++$i)
  8. {
  9. if (getimagesize($val[$i]))
  10. {
  11. echo '<br />OK<br />';
  12. }
  13. }
  14.  
  15. ?>


smile.gif

zgodnie z manualem jesli nie ma ustawionej zadnej flagi to preg_match_all przyjmuje flagę PREG_PATTERN_ORDER
zgodnie z którą w indeksie [0] tablicy $img masz wyniki wraz z tagami [img][/img]
a w indeksie [1] tylko to co kazałaś zapamiętać, więc w naszym przypadku chodzi o indeks [1]

i teraz juz wszystko co chciałaś znaleźć masz w $img[1] i nie potrzeba już dalej szukać w pętli,
teraz można już spokojnie wykonać wszystkie operacje na wynikach smile.gif

Pozdrawiam!
Ania-678
Działa idealnie, dziękuję bardzo. smile.gif

Tylko pozostaje mały problemik, a mianowicie próba sprawdzenia Nieistniejącego pliku to wywala:

Cytat
Warning: getimagesize(http://localhost/test/2.jpg)[function.getimagesize]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in D:Program FilesWebServhttpd\testindex.php on line 35


i nie bardzo potrafię się tego pozbyć ohmy.gif
rzymek01
daj znak małpy @ przed nazwą funkcji

Pozdrawiam!
Shili
Cytat
daj znak małpy @ przed nazwą funkcji
To nie jest dobry pomysł, błędy należy eliminować, a nie maskować.

Dodaj
  1. <?php
  2. if file_exists($val[$i]))
  3. ?>
tam, gdzie to potrzebne.
rzymek01
i po co?
i potem jeszcze getimagesize?

fukcja getimagesize po prostu wysyła nam powiadomienie, że takiego pliku nie ma

a co jesli serwer nie ma włączonych wraperów url? kolejny błąd biggrin.gif
Shili
A co tutaj robi getimagesize? Sprawdza czy plik istnieje i wyświetla komunikat, w przeciwnym przypadku warning.

O wyłączonych wrapperach programista raczej wie na wstępie, o tym czy plik wpisany przez użytkownika istnieje niekoniecznie i należy wręcz zakładać (zgodnie z zasadą ograniczonego zaufania do użytkowników), że jednak część z nich istniała nie będzie. I tym należy się odpowiednio zająć, a nie problem maskować winksmiley.jpg
rzymek01
jesli chodzi o pliki - masz rację, ale tu chodzi czy ten plik to obrazek, a nie czy plik który wpisał user istnieje sadsmiley02.gif
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.