Andris Posted September 12, 2007 Report Share Posted September 12, 2007 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 More sharing options...
andrisp Posted September 12, 2007 Report Share Posted September 12, 2007 Kādi nāk headeri no servera, kad pieprasi caur PHP failu, un kādi, kad pieprasi pa taisno ar URL ? Link to comment Share on other sites More sharing options...
Andris Posted September 12, 2007 Author Report Share Posted September 12, 2007 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 More sharing options...
andrisp Posted September 12, 2007 Report Share Posted September 12, 2007 Pamēģini sūtīt visus headerus tādus pašus no php kādi tiek sūtīti, ja pieprasa pa taisno. Link to comment Share on other sites More sharing options...
Andris Posted September 13, 2007 Author Report Share Posted September 13, 2007 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 More sharing options...
Recommended Posts