所以我有一堆文件,有些可以高達30-40mb 和我想用PHP來處理文件的安全性,所以我可以控制誰有權訪問他們php大多數內存有效的方式來返回文件
這意味着我有一個劇本有點像這個粗略的例子
$has_permission = check_database_for_permission($user, filename);
if ($has_permission) {
header('Content-Type: image/jpeg');
readfile ($filename);
exit;
} else {
// return 401 error
}
我會恨的每個請求加載完整的文件到內存中,因爲它很快就會嚼了所有的記憶我的服務器上一些同時請求
所以一對q問題
- readfile是最有效的內存方式嗎?
- 是否有一些更好的方法來實現相同的結果,我忽略了?
服務器:Apache/PHP5
感謝
+1刪除我的答案,當你看着很明顯。 – 2010-06-09 21:59:37
我在Pekka的回答中輸入了這條評論,它被刪除了:「readfile()這樣做,直接從文件中將文件複製到網絡服務器的內存中。循環將數據從文件複製到PHP內存中,然後從PHP內存到網絡服務器 隨着readfile()系統可以選擇一個最好的塊大小,它可能不是8192「 – johannes 2010-06-09 22:03:26
只要記住,在整個過程中,一個用戶正在下載一個文件,一個PHP進程將被阻止。因此,如果您的服務器上運行了8個PHP進程並且有8個用戶正在下載文件,您的網站將無法處理任何涉及PHP的更多請求,這通常意味着網站將完全凍結。 – 0scar 2010-06-09 23:10:26