Skocz do zawartości
Zamknięcie Forum PC LAB

Szanowny Użytkowniku,

Informujemy, że za 30 dni tj. 30 listopada 2024 r. serwis internetowy Forum PC LAB zostanie zamknięty.

Administrator Serwisu Forum PC LAB - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie: wypowiada całość usług Serwisu Forum PC LAB z zachowaniem miesięcznego okresu wypowiedzenia.

Administrator Serwisu Forum PC LAB informuje, że:

  1. Z dniem 29 listopada 2024 r. zakończy się świadczenie wszystkich usług Serwisu Forum PC LAB. Ważną przyczyną uzasadniającą wypowiedzenie jest zamknięcie Serwisu Forum PC LAB
  2. Dotychczas zamowione przez Użytkownika usługi Serwisu Forum PC LAB będą świadczone w okresie wypowiedzenia tj. do dnia 29 listopada 2024 r.
  3. Po ogłoszeniu zamknięcia Serwisu Forum od dnia 30 października 2024 r. zakładanie nowych kont w serwisie Forum PC LAB nie będzie możliwe
  4. Wraz z zamknięciem Serwisu Forum PC LAB, tj. dnia 29 listopada 2024 r. nie będzie już dostępny katalog treści Forum PC LAB. Do tego czasu Użytkownicy Forum PC LAB mają dostęp do swoich treści w zakładce "Profil", gdzie mają możliwość ich skopiowania lub archiwizowania w formie screenshotów.
  5. Administrator danych osobowych Użytkowników - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie zapewnia realizację praw podmiotów danych osobowych przez cały okres świadczenia usług Serwisu Forum PC LAB. Szczegółowe informacje znajdziesz w Polityce Prywatności

Administrator informuje, iż wraz z zamknięciem Serwisu Forum PC LAB, dane osobowe Użytkowników Serwisu Forum PC LAB zostaną trwale usunięte ze względu na brak podstawy ich dalszego przetwarzania. Proces trwałego usuwania danych z kopii zapasowych może przekroczyć termin zamknięcia Forum PC LAB o kilka miesięcy. Wyjątek może stanowić przetwarzanie danych użytkownika do czasu zakończenia toczących się postepowań.

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

Shadowvip

[PHP]Sprawdzanie rozmiaru pliku zdalnego

Rekomendowane odpowiedzi

Na początek muszę zaznaczyć że CURL niestety nie daje rady w moim przypadku pobrać rozmiaru pliku więc chcę to zrobić za pomocą fsock ale tu pojawia się problem :/

W większości będą sprawdzane pliki XML które niestety mają rozmiar 80MB+ więc znalazłem coś takiego jak nagłówek[HTTP] RANGE: ale niestety nie chce zadziałać

 

Zwykły GET:

GET /xmlfile/xx1aq/ HTTP/1.1
Host: www.jakasdomena.pl
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive

 

Odp. do zwykłego GET-a:

HTTP/1.0 200 OK
Server: Apache/1.3.37 (Debian GNU/Linux) PHP/4.4.7
Content-Type: aplication/xml
Etag: "BJ0U3XTP"
Content-Length: 104756718
Content-Disposition: attachment
Cache-Control: private
Content-Transfer-Encoding: binary
Accept-Ranges: bytes

 

z tego co wyczytałem w przypadku odpowiedzi Accept-Ranges: bytes możliwe jest wysłanie żądania tylko części pliku, więc przygotowałem takiego GET-a:

GET /xmlfile/xx1aq/ HTTP/1.1
Host: www.jakasdomena.pl
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7
Connection: close
Range: bytes=-5
Pragma: no-cache
Cache-Control: no-cache

 

w tym wypadku powinienem otrzymać ostatnie 5 bajtów pliku i oczywiście Nagłówki zwrotne (z których będę mógł wyciągnąć rozmiar pliku, jednak zawsze w odpowiedzi otrzymuję cały plik)

Próbowałem różnych kombinacji Nagłówka RANGE np. 0-5, 10-20, -5 itp. niestety to nic nie daje.

 

Nagłówki testowałem w putty i w php.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Po pierwsze to nie iwme po co meczysz sie socketami. Moze uzyc curla albo get_file_contents/fopen i contextow.

Po drugie piszesz ze nie mozesz pobrac rozmiaru pliku a to co jest : Content-Length: 104756718 ?

po trzecie nie wiem czy cie dobrze zrozumialem bo w temacie i poscie piszesz o roznych problemach

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Po pierwsze pisałem CURL nie chce zadziałać w tym przypadku

przykładowa funkcja:

function remote_file_size($url){
		$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
	curl_setopt($ch, CURLOPT_HEADER, 1);
	curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
	curl_setopt($ch, CURLOPT_AUTOREFERER, true);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLINFO_EFFECTIVE_URL, true);
		curl_setopt($ch, CURLINFO_HTTP_CODE, true);
	curl_setopt($ch, CURLINFO_CONTENT_TYPE, true);
	curl_setopt($ch, CURLOPT_NOBODY, true);
	curl_exec($ch);

		$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);

		curl_close($ch);

		return $size;
}

 

Po drugie zgadza się ze otrzymuje rozmiar pliku ale plik jest pobierany w całości a ja potrzebuje tylko jego rozmiar (po co mam ściągać plik 80MB i tracić transfer jak nie muszę), już nie mówiąc o tym że jak miał bym pobrać 100plików to trochę by to zajęło.

 

Spróbuje jeszcze z "get_file_contents/fopen i contextow"

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak chcesz tylko rozmiar to (fopen + stream_context_create + stream_get_meta_data) lub (get_headers)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

zrobione

function get_remote_file_size($url){
$fp = fopen($url, 'r', false);
$meta = stream_get_meta_data($fp);
fclose($fp);
foreach ($meta["wrapper_data"] as $header){
	preg_match("/^Content-Length: (?<size>[0-9]{1,13})$/", $header, $match);
	if($match['size'] > 0){
		$size = $match['size'];
		break;
	}
}
return $size;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...