Witam, jestem nowy na forum smile.gif
Napisałem skrypt do downloadu nadający unikalne ID każdemu plikowi pobieranemu z mojego serwera.
Żeby przyspieszyc dzialanie skryptu wymyslilem prosty schemat:

1) przekierowanie przegladarki do pobrania pliku np. 100/pliczek.zip
2) wygenerowanie kolejnego pliku np. 101/pliczek.zip

W założeniu gosc na mojej stronie nie musi czekac, az skrypt wygeneruje mu plik, gdyz zrobil to dla niego poprzedni uzytkownik.
Niestety, przegladarka otrzymuje wyslane jej naglowki, lecz caly czas czeka, az skrypt zakonczy dzialanie
Czy da się jakoś zamknąć połączenie i przejsc na nastepna strone PRZED koncem dzialania skryptu?

Patrzyłem w dokumentacji php: http://pl.php.net/manual/en/features.connection-handling.php
Nawet był poruszony ten temat przez jednego użytkownika (tom lgold2003 at gmail dot com 10-Sep-2009 06:43), lecz to rozwiązanie nie sprawdza sie w moim przypadku
Moj serwer wirtualny wspiera php 4, 5, 5.3, 6
Oto mój uproszczony kod:
  1. <?php
  2. function licznik() {
  3. //prosty licznik tekstowy
  4. return $liczba;
  5. }
  6.  
  7. function pobierz_plik($num) {
  8. header('Pragma: no-cache');
  9. header('Content-Transfer-Encoding: binary');
  10. header('Content-Type: application/x-unknown');
  11. header("Content-Disposition: attachment; filename=pliczek.zip");
  12. header("Location: /100/unsigned/out/$num/pliczek.zip");
  13. header("Connection: close");
  14. }
  15.  
  16. function generuj_plik($num) {
  17. sleep(5);
  18. }
  19.  
  20. $id = licznik();
  21. pobierz_plik($id);
  22. generuj_plik($id+1);
  23. ?>


Z góry dziękuję za pomoc
Pozdrawiam

***************************
EDIT

Znalazlem dość proste rozwiązanie mojego problemu, chociaz to bedzie dzialac tylko z przegladarkami, ktore pozwalaja na tego typu przeladowania strony
  1. function pobierz_plik($num) {
  2. header("Connection: close\r\n");
  3. header("Content-Encoding: none\r\n");
  4. <html>
  5. <head>
  6. <meta HTTP-EQUIV="REFRESH" content="0; url=out/'.$num.'/pliczek.zip">
  7. </head>
  8. </html>
  9. ';
  10. $size = ob_get_length();
  11. header("Content-Length: $size");
  12. }