Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Domyślne zdjęcie jeżeli brak odpowiedniego na serwerze
Forum PHP.pl > Forum > Przedszkole
eeagle
Poszukuję pomocy w jaki sposób sprawdzić i zamienić wszystkie pliki jpg (zdjęcia) na domyślny jeżeli brakuje go na serwerze.
Poniżej kod który się sprawdza ale tylko podaniu konkretnego pliku, co przy większej ilości niż 1 robi problem sad.gif
  1. <?php
  2. $plik = "pliki/plik_xs.jpg";
  3. $domyslny = pliki/nophoto_xs.jpg";
  4. $test = file_exists($plik);
  5. if (!$test)
  6. {
  7. echo "<img src=". $domyslny ." /> ";
  8. }
  9. else
  10. {
  11. echo "<img src=". $plik ." /> ";
  12. }
  13.  
  14. ?>
nospor
Cytat
co przy większej ilości niż 1 robi problem
To napisz jaki problem bo ja osobiscie nie widze zadnego problemu nie liczac faktu, ze masz spierniczone cudzysłowia
SaMi
Jeśli zmienna $plik jest pusta, to i tak katalog utrzymuje status true, ponieważ file_exists zwraca true dla plików i katalogów.

Można użyć is_file() w połączeniu z nim:

  1. if(file_exists($plik) && is_file($plik)){ ... }
nospor
@Sami nie dosc ze to nie mazwiazku ze sprawą, to jeszcze piszesz nieprawdziwe rzeczy.... file_exists dla pustej zmiennej nie zwraca true....
eeagle
Cudzysłów zaginął przy przepisywaniu smile.gif.
Może pytanie zadałem nie tak.
Problem polega na tym że skrypt ten sprawdza konkretny plik. W tym wypadku plik_xs.jpg.
Nie bardzo umiem sobie poradzić aby sprawdzał każdy plik np. z rozszerzeniem jpg .
Turson
glob
nospor
Turson po co glob..przeciez glob zwraca pliki ktore istnieją a jego interesują tez pliki, ktore nie istnieją.

@eeagle no ale gdzies te liste plikow masz przeciez zapisaną no nie? No to w czym problem?
zamiast $plik = "pliki/plik_xs.jpg"; podstawiaj kolejny plik z listy
Turson
No fakt, że zamysł jest inny wink.gif no to lista plików musi gdzieś być
SaMi
@nospor masz rację to był skrót myślowy chodziło mi o poniższe sytuacje.
  1. if(file_exists('images/zdjecie.jpg')) echo 'true';
  2. else echo 'false';
  3. // zwraca true
  4. if(file_exists('images/')) echo 'true';
  5. else echo 'false';
  6. //zwraca true
  7. if(file_exists('imag')) echo 'true';
  8. else echo 'false';
  9. //zwraca false
nospor
Skrot myslowy? Wyraznie napisales o pustej zmiennej.
Poza tym po co wyjezdzasz z katalogami, skoro user wyraźnie napisal, że sprawdza pliki. Ale czasami plik nie istnieje. Ani razu nie bylo mowy o sprawdzaniu katalogow i problemow z nimi związanymi
Tak wiec nie ma sensu bawic sie w
if(file_exists($plik) && is_file($plik)){ ... }
skoro zawsze sprawdzane są pliki
A nawet jesli byloby inaczej, to po co tak? Czemu nie lepiej od razu:
if(is_file($plik)){ ... }
?
eeagle
Listy to nie ma , ale to nie problem. Mi nie chodzi tylko o sprawdzenie czy istnieje ale jeszcze umieszczenie (nophoto.jgp) w to samo miejsce ( w kodzie html) gdzie powinien być brakujący plik.
nospor
No to przeciez to masz juz zrobione....

Od biedy jak chcesz miec ładnie, to załaduj to w funkcje, jako parametr funkcji przekazuj sciezke do pliku i po sprawie
eeagle
możesz mi to badziej wytłumaczyć?
nospor
Czy wiesz co to są funkcje?
Jesli wiesz, to kod co masz masz wlozyc w funkcję.
Jak nie wiec co to są funkcje, to wpierw doczytaj.

http://php.net/manual/en/functions.arguments.php
http://php.net/manual/en/functions.returning-values.php
eeagle
Nie jestem mistrzem w funkcjach sad.gif wymyśliłem taką :

  1. function sprawdzenie ($plik = "pliki/plik_xs.jpg" , $domyslny = "pliki/nophoto_xs.jpg") {
  2. $test = file_exists($plik);
  3. if (!$test)
  4. {
  5. echo "<img src=". $domyslny ." /> ";
  6. }
  7. else
  8. {
  9. echo "<img src=". $plik ." /> ";
  10. }
  11.  
  12.  
  13. }
  14.  
  15. sprawdzenie();


robi to samo co poprzedni skrypt. Czyli ani kroczku do przodu sad.gif
Poniżej kod html w jaki sposób wyświetlam pliki - w tym miejscu chciałbym aby mi sprawdzało czy plik jest czy nie i wrzucanie odpowiednio nophoto_xl , nophoto_xs a jeżeli jest to zostawić tak jak jest.

  1.  
  2. <div class="main-image">
  3. <div class="outer">
  4. <span class="inset"><a href="pliki/plik_xl.jpg"><img src="pliki/plik_xs.jpg" alt="" /></a></span>
  5. </div>
  6. </div>
nospor
Cytat
robi to samo co poprzedni skrypt. Czyli ani kroczku do przodu
facepalmxd.gif
No toc ci mowilem, ze masz tam wstawiac potem nazwy plikow jakie chcesz miec... no same sie nie wstawią....

sprawdzenie('jakisplik');
sprawdzenie('jakisplik2');
sprawdzenie('jakispli3');
itd....
by_ikar
Tylko po co do tego w ogóle angażować php, jak zwyczajnie można zrobić tło dla tego diva z klasą outer, czy tam spana z klasą inset ? Kiedyś ktoś miał podobny problem: http://forum.php.pl/index.php?s=&showt...st&p=920180
Pyton_000
Czarny scenariusz... Wyświetlasz listę 10 tyś obrazeczków. Pech chciał że 3/4 nie ma wink.gif
Po co robić bezsensowne 10001 requestów skoro można tylko 3001 wink.gif
nospor
Bo z tamtego tematu wynika, ze by_ikar zaoszczedzil na tym 10000 file_exists wink.gif
by_ikar
PHP działa synchronicznie, więc sprawdzenie czy działa 10 tysięcy plików, będzie dużo wolniejsze i zasobożerne niż w przypadku sprawdzenia tego przez webserwer. Wolniejsze, bo w przypadku rozłożenia tego na background, połączenia do sprawdzenia czy obrazki istnieją wykonywane są asynchronicznie (po kilka na raz, w zależności od limitu połączeń przeglądarki), więc nie czekasz na skrypt a na szybkość odpowiedzi przez webserwer który będzie dla statycznego contentu kilka razy szybszy niż PHP. Dodatkowo, tworzysz sobie jakiś loader obrazków w javascript, który będzie pobierać background dopiero kiedy user dojedzie scrollem do obrazka (lazy loading).

Się śmiejecie, a zobaczcie jak to ma zrobione allegro, czy jakieś inne większe strony, które nie trzymają obrazków w obrębie tego samego webserwera.. Powodzenia z file_exists do jakiegoś cdn'a.
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.