Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Domyślne zdjęcie jeżeli brak odpowiedniego na serwerze
eeagle
post
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 18.11.2014

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


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 (IMG:style_emoticons/default/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. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
SaMi
post
Post #3





Grupa: Zarejestrowani
Postów: 173
Pomógł: 14
Dołączył: 27.03.2004
Skąd: Białystok

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


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)){ ... }
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@Sami nie dosc ze to nie mazwiazku ze sprawą, to jeszcze piszesz nieprawdziwe rzeczy.... file_exists dla pustej zmiennej nie zwraca true....
Go to the top of the page
+Quote Post
eeagle
post
Post #5





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 18.11.2014

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


Cudzysłów zaginął przy przepisywaniu (IMG:style_emoticons/default/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 .
Go to the top of the page
+Quote Post
Turson
post
Post #6





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


glob
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
Turson
post
Post #8





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


No fakt, że zamysł jest inny (IMG:style_emoticons/default/wink.gif) no to lista plików musi gdzieś być
Go to the top of the page
+Quote Post
SaMi
post
Post #9





Grupa: Zarejestrowani
Postów: 173
Pomógł: 14
Dołączył: 27.03.2004
Skąd: Białystok

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


@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


Ten post edytował SaMi 15.12.2014, 09:30:16
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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)){ ... }
?
Go to the top of the page
+Quote Post
eeagle
post
Post #11





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 18.11.2014

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


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.
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
eeagle
post
Post #13





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 18.11.2014

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


możesz mi to badziej wytłumaczyć?
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
eeagle
post
Post #15





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 18.11.2014

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


Nie jestem mistrzem w funkcjach (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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>
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
robi to samo co poprzedni skrypt. Czyli ani kroczku do przodu
(IMG:style_emoticons/default/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....
Go to the top of the page
+Quote Post
by_ikar
post
Post #17





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


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
Go to the top of the page
+Quote Post
Pyton_000
post
Post #18





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Czarny scenariusz... Wyświetlasz listę 10 tyś obrazeczków. Pech chciał że 3/4 nie ma (IMG:style_emoticons/default/wink.gif)
Po co robić bezsensowne 10001 requestów skoro można tylko 3001 (IMG:style_emoticons/default/wink.gif)

Ten post edytował Pyton_000 15.12.2014, 12:52:44
Go to the top of the page
+Quote Post
nospor
post
Post #19





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Bo z tamtego tematu wynika, ze by_ikar zaoszczedzil na tym 10000 file_exists (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
by_ikar
post
Post #20





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 17:50