Jump to content
php.lv forumi

Resume download ar IE


Andris

Recommended Posts

Ir radusies savdabīga problēma. Uztaisīju skriptu, kas padod failu caur PHP, taču ar Resume funkciju, jo reizēm faili būs palielāki. Viss notiek jauki ar CuteFTP un Mozilla (citus Download manager-us vēl nemēģināju), bet ar IE fails tiek atkal lādēts no sākuma (http://xxx.xx/?abcdefgh). Taču, ja failu lādē pēc tiešās adreses (http://xxx.xx/yy/xx.zip), tad aizverot ielādes lodziņu ar X, otrreiz uzklikšķinot uz saites IE turpina ielādi no pārtrauktās vietas. Diemžēl, visbiežākais pielietojums būs tieši ar IE, tādēļ nevaru atmest ar roku. Ilgi pētīju salīdzinot sesijas logus no CuteFTP, tā arī nesapratu, kas liek IE resumēt ielādi vai kas to neļauj. Cache-control? Pragma? Last-Modified?

Link to comment
Share on other sites

Kādi nāk headeri no servera, kad pieprasi caur PHP failu, un kādi, kad pieprasi pa taisno ar URL ?

 

Šādi izskatās atbildes no CuteFTP 8

 

 

Tiešā saite (http://xxx.xx/yy/xx.zip)

 

Pirmais pieprasījums

 

[2007.09.11. 18:07:39] Receiving reply...

[2007.09.11. 18:07:39] HTTP/1.1 200 OK

Date: Tue, 11 Sep 2007 15:07:13 GMT

Server: Apache

Last-Modified: Wed, 21 Feb 2007 13:35:46 GMT

ETag: "8455-1af448c-a2cded2a"

Accept-Ranges: bytes

Content-Length: 28263564

Keep-Alive: timeout=15, max=100

Connection: Keep-Alive

Content-Type: application/zip

 

Atkārtotais pieprasījums

 

[2007.09.11. 18:07:39] Receiving reply...

[2007.09.11. 18:07:40] HTTP/1.1 206 Partial Content

Date: Tue, 11 Sep 2007 15:07:13 GMT

Server: Apache

Last-Modified: Wed, 21 Feb 2007 13:35:46 GMT

ETag: "8455-1af448c-a2cded2a"

Accept-Ranges: bytes

Content-Length: 28263564

Content-Range: bytes 0-28263563/28263564

Keep-Alive: timeout=15, max=99

Connection: Keep-Alive

Content-Type: application/zip

 

Caur PHP (http://xxx.xx/?abcdefgh)

 

Pirmais pieprasījums

 

[2007.09.12. 15:07:56] Receiving reply...

[2007.09.12. 15:07:57] HTTP/1.1 200 OK

Date: Wed, 12 Sep 2007 12:07:27 GMT

Server: Apache

X-Powered-By: PHP/5.1.4

Expires: Mon, 31 Dec 2007 23:00:00 GMT

Cache-Control: public

Pragma: 0

Last-Modified: Thu, 26 Jul 2007 15:13:54 GMT

Content-Transfer-Encoding: binary

Accept-Ranges: bytes

Content-Disposition: attachment; filename="xx.zip"

Content-Length: 28263564

Keep-Alive: timeout=15, max=100

Connection: Keep-Alive

Content-Type: application/zip

 

Atkārtotais pieprasījums

 

[2007.09.12. 15:07:57] Receiving reply...

[2007.09.12. 15:08:00] HTTP/1.1 206 Partial Content

Date: Wed, 12 Sep 2007 12:07:28 GMT

Server: Apache

X-Powered-By: PHP/5.1.4

Expires: Mon, 31 Dec 2007 23:00:00 GMT

Cache-Control: public

Pragma: 0

Last-Modified: Thu, 26 Jul 2007 15:13:54 GMT

Content-Transfer-Encoding: binary

Accept-Ranges: bytes

Content-Disposition: attachment; filename="xx.zip"

Content-Length: 28263564

Content-Range: bytes 0-28263563/28263564

Keep-Alive: timeout=15, max=99

Connection: Keep-Alive

Content-Type: application/zip

Link to comment
Share on other sites

Problēma ir atrisināta. Vaina bija nevis atbildē (response headers), kas sūtīta no PHP, bet gan pieprasījumā (request headers), ko nosūta IE. Tā vietā, lai korekti nosūtītu "Range: bytes=8786463-28263563", IE sūtīja "Range: bytes=8786463-" Nepētīju smalki, varbūt HTTP specifikācija to pieļauj, taču manā skriptā tas nebija paredzēts. Palīdzēja funkcijas apache_request_headers() un apache_response_headers(), kuru rezultātus aizsūtīju uz log failu :)

Link to comment
Share on other sites

×
×
  • Create New...