2010-01-18 54 views
1

動態提供的文件,我使用的輸出,諸如服務了上通過PHP動態Zip和PDF文件:登錄APACHE

header('Content-Disposition: attachment; filename="'.$project->name .'.zip"'); 
echo($zipfile->zl_pack()); 

我無法找到我的Apache日誌到這些下載的任何引用雖然。是否因動態而未記錄?

我需要實際寫入文件到網絡服務器和接發球,結果達把它記錄還是我失去了一些東西?

乾杯, Niggles

回答

0

正確的。 httpd不會查看用於日誌記錄的傳出標頭。 error_log()將向httpd的錯誤日誌發送消息,但無法將某些內容放入訪問日誌中。

0

到產生該頭應記錄PHP程序的請求。內容處置標題中提到的文件名不會是。

我相信mod_個perl would allow you to add custom logging,我不知道是不是mod_php,並且提供類似的功能。

+0

我會看看的mod_perl。這種日誌記錄的主要原因是我們得到的信息不正確,即我可以將完整的Zip文件大小記錄到數據庫中,但無法確定他們是否在完成之前終止了下載並記錄了ACTUAL交付的數量字節代替。 – niggles 2010-01-18 06:27:51

0

正如你可以使用mod_rewrite有* .zip文件記錄,並仍擔任其通過PHP,而無需實際將其寫入到文件系統的一個解決方法,客戶將不得不雖然發送兩個請求。

1)改變當前的腳本,使其不產生文件,而是把需要在會議文件創建的參數;而不是現在的頭和文件內容,你會放header('Location: '.$project->name .'.zip');

2)這將導致第二個請求。由於請求的文件不存在,你會使用mod_rewrite請求更改爲* .zip文件到相同或其他一些PHP腳本讀取會話參數和生產就像你正在做的文件現在。如果您使用相同的PHP腳本,你還讓mod_rewrite的像「?行動= produceFile」添加一些參數的請求,然後測試的腳本參數。

這樣,你會在你的Apache日誌兩個漂亮的條目,而無需物理保存文件(以後可能刪除)。

0

僅供參考,我發現一個很好的變通。問題的

部分原因是,我們想強制「另存爲」對話框,因爲許多用戶感到困惑的地方的文件被保存。所以這就是爲什麼我去了

Content-Disposition : attachment 

方法。

仍然調用對話更好的方法是添加此爲.htaccess

<Files *.zip> 
ForceType application/octet-stream 
Header set Content-Disposition attachment 
</Files> 

寫郵編到文件服務器和頁面重定向到拉鍊。

當然,我每天晚上要清理,但它被記錄下來,它仍然迫使他們選擇他們下載的文件(在幾乎一切,但Safari瀏覽器[總有一個])。

乾杯, Niggles