2011-05-18 63 views
3

我一直在開發一個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 

非常感謝!

+0

比較兩臺服務器上'phpinfo()'的輸出 – 2011-05-19 01:00:03

+0

謝謝,AJ。我一直在尋找,但還沒有看到任何解釋給我的東西。我同意這可能是正確的地方。有沒有人有什麼特別要尋找的建議?或者甚至哪一部分最有可能在?核心,環境,PHP變量? – jmac 2011-05-19 01:35:57

+1

你可以肯定地做一件事:你推理「Content-Length」沒有被正確設置...... **調查**。檢查返回給客戶端的HTTP響應頭。如果您使用Firefox,則可以使用Information - > View Response Headers下的Web Developer插件來完成此操作。 – 2011-05-19 01:40:54

回答

3

只需將結果發佈爲答案,以便我可以將問題標記爲已回答。感謝所有有用的意見!

我在託管服務提供商的網站上找到了一個論壇,有人解釋說gzip最近已經打開,並且詳細說明了如何阻止它。 http://www.bluehostforum.com/showthread.php?18996-Turning-off-Gzip

基本上,我將以下內容添加到我的.htaccess文件中,該文件關閉了gzip壓縮。然後,我得到Content-Length標題和我的進度條。

SetEnv no-gzip dont-vary 
相關問題