Muszę sprawdzić, czy na moim CDN istnieje określony obraz.
Próbowałem następujących rzeczy i to nie działa:
if (file_exists(http://www.example.com/images/$filename)) {
echo "The file exists";
} else {
echo "The file does not exist";
}
Nawet jeśli obraz istnieje lub nie istnieje, zawsze mówi „Plik istnieje”. Nie wiem, dlaczego to nie działa ...
file_exists
w odległej lokalizacji będzie bardzo powolne.Odpowiedzi:
Potrzebujesz nazwy pliku przynajmniej w cudzysłowie (jako ciąg znaków):
Upewnij się również, że
$filename
jest prawidłowo zweryfikowany. A potem będzie działać tylko wtedy, gdyallow_url_fopen
jest aktywowany w konfiguracji PHPźródło
To nie zadziałało dla mnie. Sposób, w jaki to zrobiłem, to użycie getimagesize.
Zauważ, że '@' będzie oznaczać, że jeśli obraz nie istnieje (w takim przypadku funkcja zwykle zwróci błąd
getimagesize(http://www.mydomain.com/images/filename.png) [function.getimagesize]: failed
:), zwróci false.źródło
@getimagesize('//path/to/image.jpg')
nie zadziała).Cóż,
file_exists
nie mówi, czy istnieje plik, ale mówi, czy istnieje ścieżka . ⚡⚡⚡⚡⚡⚡⚡Tak więc, aby sprawdzić, czy jest to plik, powinieneś używać
is_file
razem z,file_exists
aby wiedzieć, czy za ścieżką naprawdę znajduje się plik, w przeciwnym raziefile_exists
zwrócitrue
każdą istniejącą ścieżkę.źródło
Spróbuj tak:
źródło
Oto najprostszy sposób sprawdzenia, czy plik istnieje:
źródło
Najpierw musisz zrozumieć: nie masz plików .
Plik jest przedmiotem systemu plików , ale wykonujesz żądanie przy użyciu protokołu HTTP, który nie obsługuje plików, ale adresy URL.
Musisz więc zażądać nieistniejącego pliku za pomocą przeglądarki i zobaczyć kod odpowiedzi. jeśli nie jest to 404, nie możesz użyć żadnych opakowań, aby sprawdzić, czy plik istnieje i musisz zażądać cdn za pomocą innego protokołu, na przykład FTP
źródło
źródło
Jeśli plik znajduje się w Twojej domenie lokalnej, nie musisz wpisywać pełnego adresu URL. Tylko ścieżka do pliku. Jeśli plik znajduje się w innym katalogu, musisz poprzedzić ścieżkę znakiem „.”
Często „.” zostanie pominięty, co spowoduje, że plik zostanie pokazany jako nieistniejący, podczas gdy w rzeczywistości tak jest.
źródło
Istnieje zasadnicza różnica między
is_file
ifile_exists
.is_file
zwraca prawdę dla (zwykłych) plików:file_exists
zwraca prawdę dla plików i katalogów:Uwaga: sprawdź również to pytanie dotyczące przepełnienia stosu, aby uzyskać więcej informacji na ten temat.
źródło
Musisz użyć ścieżki bezwzględnej, aby sprawdzić, czy plik istnieje.
Jeśli piszesz dla CMS lub frameworka PHP, to o ile wiem, wszystkie mają zdefiniowaną stałą dla ścieżki głównej dokumentu.
np. WordPress używa ABSPATH, który może być używany globalnie do pracy z plikami na serwerze przy użyciu Twojego kodu, jak również adresu URL witryny.
Przykład Wordpress:
Idę o krok dalej :). Ponieważ ten kod nie wymagałby wiele konserwacji i byłby całkiem solidny, napisałbym go jako skróconą instrukcję if:
Skrócona instrukcja IF wyjaśniła:
źródło
możesz użyć cURL. Możesz ustawić cURL tak, aby podawał tylko nagłówki, a nie treść, co może przyspieszyć działanie. Zła domena może zawsze zająć trochę czasu, ponieważ będziesz czekać na przekroczenie limitu czasu żądania; prawdopodobnie możesz zmienić długość limitu czasu za pomocą cURL.
Oto przykład:
źródło
Możesz użyć tej
file_get_contents
funkcji, aby uzyskać dostęp do plików zdalnych. Szczegółowe informacje można znaleźć pod adresem http://php.net/manual/en/function.file-get-contents.php .źródło
Jeśli używasz curl, możesz wypróbować następujący skrypt:
}
Referencyjny adres URL: https://hungred.com/how-to/php-check-remote-email-url-image-link-exist/
Spróbuj tego :
źródło
Jeśli ścieżka do twojego obrazu jest względna w stosunku do katalogu głównego aplikacji, lepiej użyć czegoś takiego:
Przykład użycia tej funkcji:
Myślę, że dobrym pomysłem jest stworzenie czegoś w rodzaju biblioteki, aby sprawdzić istnienie obrazu mającego zastosowanie w różnych sytuacjach. Powyżej wiele świetnych odpowiedzi, których możesz użyć do rozwiązania tego zadania.
źródło
Przeczytaj pierwsze 5 bajtów z HTTP używając,
fopen()
afread()
następnie użyj tego:do wykrywania obrazu.
źródło
file_exists
czyta nie tylko pliki, ale także ścieżki. więc gdy$filename
jest puste, polecenie działałoby tak, jakby było napisane w ten sposób:jeśli katalog / obrazy / istnieje, funkcja nadal zwróci
true
.Zwykle piszę to tak:
źródło
file_exists($filepath)
zwróci prawdziwy wynik dla katalogu i pełnej ścieżki pliku, więc nie zawsze jest rozwiązaniem, gdy nie podano nazwy pliku.is_file($filepath)
zwróci true tylko dla pełnych ścieżek plikówźródło
potrzebujesz ścieżki serwera z file_exists
na przykład
źródło
Pracuje dla mnie.
źródło