Myślałem o zrobieniu wniosku głową z cURL, zastanawiałem się, czy to jest droga?Najprostszym sposobem na pobranie pliku ze zdalnego pliku w PHP?
Odpowiedz
Tak. Ponieważ plik jest zdalny, jesteś całkowicie zależny od wartości nagłówka Content-Length
(chyba że chcesz pobrać cały plik). Będziesz chciał curl_setopt($ch, CURLOPT_NOBODY, true)
i curl_setopt($ch, CURLOPT_HEADER, true)
.
Zgaduję, że użycie curl do wysłania żądania HEAD jest fajną możliwością; coś w tym pewnie zrobić:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://sstatic.net/so/img/logo.png');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
var_dump($size);
I będzie Ci:
float 3438
ten sposób używasz żądania HEAD, a nie pobierania całego pliku - nadal, trzeba polegać na zdalny serwer wysyła prawidłowy nagłówek długości treści.
Inną opcją może myślisz o byłoby użyć filesize
... Ale to zawiedzie: dokumentacja stwierdza (cytowanie):
Od PHP 5.0.0 to, funkcja może może być również używana w niektórych opakowaniach adresów URL. Listazawiera opakowania z funk() rodziny funkcji.
I, niestety, z HTTP and HTTPS wrappers, stat()
nie jest obsługiwany ...
Jeśli spróbujesz, dostaniesz błąd, tak:
Warning: filesize() [function.filesize]: stat failed
for http://sstatic.net/so/img/logo.png
Szkoda :-(
Korzystanie z żądania HEAD i sprawdzanie pod kątem Content-Length
jest standardowym sposobem wykonania tej operacji, ale nie można na nim polegać w ogóle, ponieważ serwer może nie obsługiwać tego. Nagłówekjest opcjonalny, a ponadto serwer może nawet nie implementować metody HEAD. Jeśli wiesz, który serwer próbujesz, możesz sprawdzić, czy działa, ale jako ogólne rozwiązanie nie jest to punktor kuloodporny.
Jeśli nie potrzebują kuloodporną rozwiązanie można po prostu zrobić:
strlen(file_get_contents($url));
To zadziała, ale najpierw pobierze plik. Prawdopodobnie chce poznać rozmiar przed pobraniem go przez sieć. – troelskn
Najlepszym rozwiązaniem, które kieruje się zasadą KISS
$head = array_change_key_case(get_headers("http://example.com/file.ext", TRUE));
$filesize = $head['content-length'];
Zdecydowanie najlepsza odpowiedź. Ładnie wykonane. –
To polecenie nie zwraca mi klucza "długość treści", tutaj jest tablica, którą zwraca: ''connection' => string 'close' (length = 5) 'date' => string 'wt., 03 czerwca 2014 20:55:55 GMT '(długość = 29) ' serwer '=> ciąg' Microsoft-IIS/6.0 '(długość = 17) ' x-powered-by '=> ciąg' ASP.NET "(długość = 7) 'x-aspnet-version' => ciąg '4.0.30319' (długość = 9) 'kontrola pamięci podręcznej' => ciąg 'prywatny' (długość = 7) 'typ zawartości '=> string' image/gif'' –
Szybkie pytanie, dlaczego potrzebuje array_change_key_case? – mario
- 1. Najprostszym sposobem sprawdzenia rozszerzenia pliku w bashu?
- 2. php - Jak wymusić pobranie pliku?
- 3. Git: pobranie określonego obiektu ze zdalnego
- 4. Najlepszy sposób na pobranie pliku ze zdalnego serwera i skopiowanie go na serwer lokalny za pomocą php
- 5. DENY bezpośrednie pobranie pliku przy użyciu php
- 6. Najprostszy sposób na pobranie pliku?
- 7. Najprostszym sposobem na odzyskanie między przeglądarkami XmlHttpRequest
- 8. Najprostszym sposobem na połączenie NSString i int
- 9. Git: Najprostszym sposobem na zgniecenia zobowiązuje pana
- 10. Najprostszym sposobem na usunięcie dwukierunkowych relacji rekurencyjnych?
- 11. Jak wymusić pobranie pliku za pomocą php?
- 12. Najprostszym sposobem analizowania odpowiedzi JSON
- 13. Eclipse: Pobranie aktualnego pliku?
- 14. Najprostszym sposobem na usunięcie klawiszy z tablicy 2D?
- 15. Czy istnieje sposób na pobranie nazwy pliku z pliku `FILE *`?
- 16. Lepszy sposób na pobranie pliku binarnego?
- 17. Najprostszym sposobem na wyeliminowanie NULL w SELECT DISTINCT?
- 18. Pobranie katalogu ze ścieżki pliku lub adresu URL
- 19. Najprostszym sposobem serializowania i przechowywania obiektów wC#?
- 20. Pobieranie PHP ze zdalnego serwera przez sftp
- 21. Pobierz nazwę pliku ze wskaźnika pliku
- 22. Groovy: najprostszym sposobem wykrywania duplikatów, bez kolejnych wartości w liście
- 23. Najprostszym sposobem na spakowanie/minięcie wielu plików javascript?
- 24. Najprostszym sposobem na przeglądanie przefiltrowanej listy za pomocą VBA?
- 25. Najprostszym sposobem na dodanie GWT do aplikacji Spring MVC?
- 26. Pobranie bieżącego elementu w pliku scipy.ndimage.filters.generic_filter
- 27. Najprostszym sposobem na skopiowanie/sklonowanie instancji dokumentu mongoose?
- 28. "Content-Type: text/plain" wymusza pobranie pliku
- 29. Jak odczytać i zapisać dane ze zdalnego pliku plist
- 30. PHP: strumień zdalnego pliku PDF do przeglądarki klienta
Tak, z tego: http: // php. net/manual/en/function.get-headers.php – Merlinox