eeagle
15.12.2014, 08:16:42
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

<?php
$plik = "pliki/plik_xs.jpg";
$domyslny = pliki/nophoto_xs.jpg";
$test = file_exists($plik);
if (!$test)
{
echo "<img src=". $domyslny ." /> ";
}
else
{
echo "<img src=". $plik ." /> ";
}
?>
nospor
15.12.2014, 08:20:12
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
15.12.2014, 08:36:13
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:
nospor
15.12.2014, 08:42:03
@Sami nie dosc ze to nie mazwiazku ze sprawą, to jeszcze piszesz nieprawdziwe rzeczy.... file_exists dla pustej zmiennej nie zwraca true....
eeagle
15.12.2014, 09:08:55
Cudzysłów zaginął przy przepisywaniu

.
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
15.12.2014, 09:11:45
nospor
15.12.2014, 09:14:15
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
15.12.2014, 09:16:02
No fakt, że zamysł jest inny

no to lista plików musi gdzieś być
SaMi
15.12.2014, 09:28:55
@nospor masz rację to był skrót myślowy chodziło mi o poniższe sytuacje.
// zwraca true
//zwraca true
//zwraca false
nospor
15.12.2014, 09:35:08
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
15.12.2014, 10:10:38
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
15.12.2014, 10:15:22
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
15.12.2014, 11:27:42
możesz mi to badziej wytłumaczyć?
nospor
15.12.2014, 11:28:35
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.phphttp://php.net/manual/en/functions.returning-values.php
eeagle
15.12.2014, 12:23:56
Nie jestem mistrzem w funkcjach

wymyśliłem taką :
function sprawdzenie ($plik = "pliki/plik_xs.jpg" , $domyslny = "pliki/nophoto_xs.jpg") {
if (!$test)
{
echo "<img src=". $domyslny ." /> "; }
else
{
echo "<img src=". $plik ." /> "; }
}
sprawdzenie();
robi to samo co poprzedni skrypt. Czyli ani kroczku do przodu
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.
<span class="inset"><a href="pliki/plik_xl.jpg"><img src="pliki/plik_xs.jpg" alt="" /></a></span>
nospor
15.12.2014, 12:29:29
Cytat
robi to samo co poprzedni skrypt. Czyli ani kroczku do przodu

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
15.12.2014, 12:43:53
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
15.12.2014, 12:52:35
Czarny scenariusz... Wyświetlasz listę 10 tyś obrazeczków. Pech chciał że 3/4 nie ma
Po co robić bezsensowne 10001 requestów skoro można tylko 3001
nospor
15.12.2014, 12:54:15
Bo z tamtego tematu wynika, ze by_ikar zaoszczedzil na tym 10000 file_exists
by_ikar
15.12.2014, 14:00:32
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.