我一直在開發一個iPad應用程序,它使用ASIHTTPRequest下載一些PDF文件。我一直在使用進度代理來顯示用戶的進度條,顯示文件的下載進度。這是ASIHTTPRequest設置代碼。無法顯示從新服務器下載文件的進度(在以前的服務器上工作)
request = [ASIHTTPRequest requestWithURL:url];
[request setShouldContinueWhenAppEntersBackground:YES];
[request setDownloadDestinationPath:issue.pdfFilepath];
[request setDownloadProgressDelegate:vc.progressView];
request.showAccurateProgress = YES;
[request setDelegate:self];
[request startAsynchronous];
這一切都工作奇妙從我的開發服務器(「好服務器」)閱讀。但是,是時候將此應用程序的服務器端移動到我的客戶端服務器(「壞服務器」)。我把所有東西都移動了,並且仍然能夠成功下載PDF,但是在下載完成之前不會更新進度條(而不是整個下載過程)。
下面是我一直用來輸出PDF的PHP:(請注意,我也會根據請求的URL在數據庫中增加視圖數等,因此我無法直接從應用程序直接訪問PDF我需要輸出從PHP腳本的PDF)。
header('Content-type: application/pdf');
header('Content-Disposition:inline filename="downloaded.pdf"');
header('Content-Length: '.remote_filesize($pdfUrl));
readfile($pdfUrl);
我已經能夠確定應用程序沒有更新進度條,因爲應用程序不知道PDF的總規模開始。我通過在Safari中打開這兩個文件來確定這一點。
- 打開「良好服務器」的URL,狀態欄顯示「完成了20.3 MB的1.4」。
- 打開「壞服務器」的URL,狀態欄顯示「已完成1.4 MB?」。
我已經檢查,並且我的remote_filesize()函數在兩臺服務器上返回21331445(約20 MB)。
因此,我現在的結論是,由於某些原因,即使我已經指定它,「壞服務器」也沒有正確設置Content-Length標頭。有沒有在php.ini文件中可能會阻止這種情況的任何設置?任何人都可以提供任何其他建議如何進一步解決或排除故障?
謝謝!
更新11-5-18
由於AJ的在Firefox檢查頭很好的建議,我發現「壞服務器」使用gzip壓縮,而不是設置我的Conent-長度。這裏的比較:
好的服務器
Server: Apache
X-Powered-By: PHP/5.3.3
Content-Disposition: inline filename="downloaded.pdf"
Content-Length: 21331445
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: application/pdf
200 OK
壞服務器
Server: Apache
X-Powered-By: PHP/5.2.17
Content-Disposition: inline filename="downloaded.pdf"
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=10, max=30
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/pdf
200 OK
我發現了一些文章建議通過確保 「output_buffering =關」,把gzip的關閉「 zlib.output_compression = Off「在php.ini文件中。儘管如此,兩臺服務器的phpinfo()都顯示output_buffering和output_compression關閉。
我們當然在正確的軌道上。來自這裏的任何建議,爲什麼這是gzipped?以及如何預防它?
謝謝!
最後更新:解決
我發現了託管服務提供商的網站上的論壇,有人解釋說,gzip的最近被打開,並詳細介紹瞭如何阻止它。 http://www.bluehostforum.com/showthread.php?18996-Turning-off-Gzip
基本上,我將以下內容添加到我的.htaccess文件中,該文件關閉了gzip壓縮。然後,我得到Content-Length標題和我的進度條。
SetEnv no-gzip dont-vary
非常感謝!
比較兩臺服務器上'phpinfo()'的輸出 – 2011-05-19 01:00:03
謝謝,AJ。我一直在尋找,但還沒有看到任何解釋給我的東西。我同意這可能是正確的地方。有沒有人有什麼特別要尋找的建議?或者甚至哪一部分最有可能在?核心,環境,PHP變量? – jmac 2011-05-19 01:35:57
你可以肯定地做一件事:你推理「Content-Length」沒有被正確設置...... **調查**。檢查返回給客戶端的HTTP響應頭。如果您使用Firefox,則可以使用Information - > View Response Headers下的Web Developer插件來完成此操作。 – 2011-05-19 01:40:54