過去3個月,我的網站一直在使用PHP文件處理程序與htaccess的組合。 用戶訪問該站點的上傳文件夾將被重定向到處理程序這樣:文件處理程序返回亂碼文件
RewriteRule ^(.+)\.*$ downloader.php?f=%{REQUEST_FILENAME} [L]
文件處理機的目的是僞以下編碼,隨後實際代碼。
//Check if file exists and user is downloading from uploads directory; True.
//Check against a file type white list and set the mime type(); $ctype = mime type;
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
截至昨天,處理程序開始返回亂碼文件,無法讀取的圖像,並且必須被繞過。我想知道什麼設置可能會導致此錯誤。
CNC中
發現問題,但沒有解決。包括我用於與Wordpress集成的php庫的路徑是破壞文件。刪除該代碼塊可解決損壞問題,但會使文件無需所需的身份驗證即可訪問。
@include_once($_SERVER['DOCUMENT_ROOT'].'/wp-blog-header.php');
if(!is_user_logged_in())
{
auth_redirect(); //Kicks the user to a login page.
}
//resume download script
您可能會收到一些錯誤消息,然後將其作爲文件內容進行處理。看看文件內容。 – Gumbo 2010-04-09 18:45:17
您不需要將'$ filename'作爲'readfile'的參數包裝在一個字符串中。這很好:'readfile($ filename)'。任何時候你都可以避免字符串插值是好的。 – 2010-04-09 19:00:07
字符串插值是固定的,但沒有區別。文件越來越受損,並且其中有很多原始數據,而.pdfs不受影響。圖像,微軟格式都變得亂碼。 – ForCripeSake 2010-04-09 19:05:29