Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]preg_replace ominięcie podmienionego
Forum PHP.pl > Forum > PHP
szmerak
  1. function jest_plik($url)
  2. {
  3. $file = @fopen ("$url", "r");
  4. return ($file ? true : false);
  5. }
  6.  
  7. $url = preg_match_all("@\[img\](http:\/\/[a-zA-Z0-9\/._-]+)\[\/img\]@i", $tekst, $image);
  8. if($url != 0) {
  9. foreach( $image[1] as $imageurl )
  10. {
  11. if(jest_plik($imageurl))
  12. {
  13. $attr = getimagesize($imageurl);
  14. if($attr[0] > 500)
  15. {
  16. $tekst = preg_replace("#\[img\](.*?)\[/img\]#si",'<img src="\\1" alt="" width=500 />',$tekst);
  17. }else{
  18. $tekst = preg_replace("#\[img\](.*?)\[/img\]#si",'<img src="\\1" alt="" />',$tekst);
  19. }
  20.  
  21. }
  22.  
  23. }
  24.  
  25. }

Mam taki kodzik który zmniejsza obrazek jeśli jest większy od 500 do 500 a jeśli mniejszy to taki jaki jest.
I odziwo kod jest napisany dobrze ja przynajmniej nie znalazłem błędów.
I wszystko pięknie działa na localhoscie
Tylko gdy wrzuce to na serwer to już nie zmiejsza tylko wstawia całe zdjęcie.

Nieprawda że dziwne?


niee jednak nie działa na localhoscie jak powinno
Rid
Ktoś może i by pomógł,ale to skrawek kodu -nie wiadomo co niektóre zmienne przedstawiają.
NP. $tekst-nie widać co to jest.
szmerak
  1. $sql = "Select text from.....";
  2. $row = mysqli_fetch_array($query);
  3. $tekst = $row[text];
  4.  
  5. i tak ogólnie zmiana
  6. if($url) na if($url != 0) {


Chyba nie ma więcej niewiadomych
pmir13
Czy funkcja jest_plik() na pewno zwraca poprawną wartość? Czy pliki na pewno tam są? Czy php ma prawa do czytania tych plików?
plej
Też tak mam że na localhost działa potem nie:/


co oznacza ta linijka:

  1. $tekst = preg_replace("#\[img\](.*?)\[/img\]#si",'<img src="\\1" alt="" width=500 />',$tekst);
  2. }else{
  3. $tekst = preg_replace("#\[img\](.*?)\[/img\]#si",'<img src="\\1" alt="" />',$tekst);
  4. }


Może preg_replace("#\[img\](.*?)\[/img\]#si",'<img src="\\1" alt="" width=500 />',$tekst);

daj do else i zadziała? chyba że tak jak napisał pmir13
szmerak
Tak za każdym razem gdy obrazek istnieje zwraca true. Tak więc nie ma problemu z ta funkcja,
Sprawdziłem to teraz.

Tak jak napisałem jednak nie działa ani na serwerze ani na localhoscie.

Ale odziwo wczesniej działało tongue.gif

Plej masz tutaj odpowiedz na twoje pytanie
  1. $attr = getimagesize($imageurl);
  2. if($attr[0] > 500)
Rid
drobna poprawka do kodu wątpię ,żeby pomogła,ale to błąd:
width=500 zmienić na:
width="500" w linice:
Cytat
$tekst = preg_replace("#\[img\](.*?)\[/img\]#si",'<img src="\\1" alt="" width=500 />',$tekst);
szmerak
nie pomogło
Ja wsumie domyślam się gdzie jest błąd
$attr[0] > 500
Poprostu ten warunek jest nie spełniony a to jest właśnie to czego nie rozumiem ;/
próbowałem też z listowaniem ale nic z tego ;/ list($width ... $attr) = getimage...
a gdy daje echo $attr[0] tablica ta zawiera np. 1024 to jak logicznie biorąc ten warunek może być niespełniony?
Czyżby błąd w PHP(żart tongue.gif)

Naprawde opadam z rąk nie wiem jak to zrobić.
Rid
Hmm
$attr = getimagesize($imageurl);

if($attr[0] > 500)

Pobiera ,Pan rozmiar $attr a ,potem
porównuje rozmiar zadeklarowany jako tablica i w tym może być problem.
próbował Pan tak:
if($attr > 500) questionmark.gifquestionmark.gif
szmerak
Gdy usunę index z tej tablicy wtedy każde zdjęcie powiększa do 500 niezależnie czy jest większe czy mniejsze ;/
napoczątku gdy zmiejszyło myslalem ze wkoncu dziala ;/
ale znow problem z innymi obrazkami

Teraz chcial bym poruszyc jedna rzecz. $attr[0] powinnien zawierac width tak więc czemu w moim przykladzie w warunku (to nie dziala czy nie wiem sam co ;/)
thek
Może więc zobacz co zmienna $attr zawiera. Ogólnie zrób debug zmiennych od których coś uzależniasz. Może jakiś if ma problem. Poza tym zerknij wpierw na przyklejony temat Jak zadawać pytania. Tam mas wiele o debugu napisane.
szmerak
$attr zawiera width kazdego obrazka czyli tak jak powinno wszystko pięknie działa tylko ten warunek if($attr[0] > 500)
...nie wiem co z nim nie tak

i jeszcze podkreśle to że z jednym obrazkiem nie ma problemu ale gdy są już dwa skrypt nawala

//edit
już znalazłem w czym problem
  1. if($attr[0] > 500)
  2. {
  3. $tekst = preg_replace("#\[img\](.*?)\[/img\]#si",'<img src="\\1" alt="" width=500 />',$tekst);
  4. }else{
  5. $tekst = preg_replace("#\[img\](.*?)\[/img\]#si",'<img src="\\1" alt="" />',$tekst);
  6. }

Podmienia za pierwszym razem <img src bez width> gdy obrazek mniejszy od 500
a gdy znajdzie z widthem wiekszym to już drugie obkrążenie się tylko liczy czyli podmienia wszedzie width=500 dla niejasności gdyby w ostatnim okrążeniu był obrazek mniejszy wszędzie by wstawił bez width=500.
Wniosek ostatnie obkrążenie jest ważne

to teraz pytanie jak zrobić aby po zamienieniu jednego omijał go i przechodził do nastepnego a nie wszedzie podmienial
pewnie źle to jest zrobione prosze o jakies wskazowki hmm... myślałem aby jakoś je posortować...
Rid
Proszę sprawdzić zmienną $attr[0] - echo " {$attr[0]}",pewnie jest pusta.Ja na miejscu Pana zrobił bym tak jak powiedział thek-zobaczył co zawierają zmienne i wychwycić ,gdzie leży problem.
szmerak
Teraz jest inny problem tongue.gif do tego już doszłem napisałem to w poście wyżej tongue.gif więc nie bede doublował

Nie trzeba na Pan tongue.gif poprostu Szmerak smile.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.