Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odczyt wielkości pliku podczas jego zapisywania
Forum PHP.pl > Forum > PHP
mdoff
Mam taki problem,
jest skrypt w php który ściąga dość duży plik, jednocześnie chciałbym żeby inny skrypt odczytał ilość pobranych danych do tego pliku.
Jednak kiedy wywołuję w tym drugim skrypcie funkcję filesize() to ona czeka na zamknięcie tego pobieranego pliku i zwraca mi pełny rozmiar pliku (już po jego pobraniu).
Czy jest może jakiś sposób aby ominąć tą blokadę?

Z góry dziękuję za pomoc smile.gif
Michael2318
Takie rzeczy robi się w javascript i pochodne (jquery/ajax).
Fifi209
Cytat(Michael2318 @ 19.03.2013, 22:17:51 ) *
Takie rzeczy robi się w javascript i pochodne (jquery/ajax).

Ciekawa teoria, mógłbyś opisać?
Michael2318
@UP W twoim podpisie, pierwszy link smile.gif
Podpowiem tylko, że mając procent ilości przesłanych już informacji, można dojść do tego czego użytkownik oczekuje.
sowiq
@Michael2318, podłączam się do pytania, to bardzo mnie zainteresowało jak za pomocą JS/Ajax sprawdzić wielkość pliku (w dodatku na serwerze biggrin.gif). I nie odsyłaj mnie, proszę, do Google - jestem słaby w szukaniu.
pyro
@Michael2318, też jestem ciekaw. Chętnie bym poszukał, ale Google mi coś już od dawna nie działa (jak zarówno inne wyszukiwarki). Mógłbyś dać jakiś szczegółowy opis?
Sephirus
Przerób skrypt do pobierania tego pliku. Użyj w nim CURL aby pobierać plik.

Do tego dodaj CURLOPT_WRITEFUNCTION do ustawień CURLA. Zrob odpowiednią funkcję i podaj ją jako callback. W tej funkcji będziesz wiedział ile już ściągnęło się danego pliku - tą informację możesz gdzieś zapisywać (plik,baza itp) i odczytywać zupełnie innym skryptem.

To tak w skrócie. Odsyłam do Wujka G. z frazą "CURLOPT_WRITEFUNCTION download progress" itp... Powodzenia wink.gif

EDIT: tak w ogóle to coś robisz źle jeśli filesize() czeka na zakończenie pobierania pliku. Z jakiej funkcji korzystasz do jego zapisu? Może blokujesz dostęp do niego flock() lub coś w tym stylu? Bo to powinno normalnie śmigać...
Fifi209
Cytat(Michael2318 @ 20.03.2013, 07:25:00 ) *
@UP W twoim podpisie, pierwszy link smile.gif
Podpowiem tylko, że mając procent ilości przesłanych już informacji, można dojść do tego czego użytkownik oczekuje.

Ale on pobiera z jakieś serwera na swój serwer i użytkownik nie ma tutaj nic do gadania przykładem takiego serwisu jest np. twojlimit gdzie podajesz link do płatnego hostingu, oni pobierają Ci transfer i ściągają do siebie (to jedna z możliwości)

Więc powiedz mi jak u diabła sprawdzisz Javascriptem ile serwer pobrał danych?
Michael2318
Cytat
Ale on pobiera z jakieś serwera na swój serwer


chyba, że tak, zwracam honor smile.gif
mdoff
Cytat(Sephirus @ 20.03.2013, 12:04:11 ) *
Przerób skrypt do pobierania tego pliku. Użyj w nim CURL aby pobierać plik.

Do tego dodaj CURLOPT_WRITEFUNCTION do ustawień CURLA. Zrob odpowiednią funkcję i podaj ją jako callback. W tej funkcji będziesz wiedział ile już ściągnęło się danego pliku - tą informację możesz gdzieś zapisywać (plik,baza itp) i odczytywać zupełnie innym skryptem.

To tak w skrócie. Odsyłam do Wujka G. z frazą "CURLOPT_WRITEFUNCTION download progress" itp... Powodzenia wink.gif

EDIT: tak w ogóle to coś robisz źle jeśli filesize() czeka na zakończenie pobierania pliku. Z jakiej funkcji korzystasz do jego zapisu? Może blokujesz dostęp do niego flock() lub coś w tym stylu? Bo to powinno normalnie śmigać...


Dzięki wielkie, niedługo spróbuję przerobić skrypt, wcześniej plik ściągałem przez fopen/fread/fwrite ale tu chyba faktycznie curl będzie lepszy smile.gif

Niestety ani przerobienie tego na curl'owe zapytanie alni przerobienie skryptu tak:
  1. $file = fopen($video_url, "rb");
  2. flush();
  3. if(!$file)
  4. die();
  5.  
  6. while(!feof($file)) {
  7.  
  8. $wfile = fopen($folder.$Link.,"a+");
  9.  
  10. fwrite($wfile,fread($file, 8192)) ;
  11.  
  12. fclose($wfile);
  13.  
  14. }
  15. fclose($file);

nie pomogły, nadal funkcja filezise czeka aż się plik zakończy
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.