Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Odczyt wielkości pliku podczas jego zapisywania
mdoff
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 19.03.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Michael2318
post
Post #2





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


Takie rzeczy robi się w javascript i pochodne (jquery/ajax).
Go to the top of the page
+Quote Post
Fifi209
post
Post #3





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(Michael2318 @ 19.03.2013, 22:17:51 ) *
Takie rzeczy robi się w javascript i pochodne (jquery/ajax).

Ciekawa teoria, mógłbyś opisać?


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Michael2318
post
Post #4





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


@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.

Ten post edytował Michael2318 20.03.2013, 06:32:30
Go to the top of the page
+Quote Post
sowiq
post
Post #5





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@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.

Ten post edytował sowiq 20.03.2013, 10:29:45
Go to the top of the page
+Quote Post
pyro
post
Post #6





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


@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?


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
Sephirus
post
Post #7





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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ć...

Ten post edytował Sephirus 20.03.2013, 12:05:48


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
Fifi209
post
Post #8





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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?


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Michael2318
post
Post #9





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


Cytat
Ale on pobiera z jakieś serwera na swój serwer


chyba, że tak, zwracam honor smile.gif
Go to the top of the page
+Quote Post
mdoff
post
Post #10





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 19.03.2013

Ostrzeżenie: (0%)
-----


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

Ten post edytował mdoff 23.03.2013, 14:38:32
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 22:19