безопасный и возобновить загрузку файлов поддержки с php - PullRequest
1 голос
/ 22 сентября 2009

Я хочу дать разрешение некоторым пользователям моего сайта загружать определенный файл. загрузка должна быть возобновлена ​​поддержка только для удобства пользователя.

По этой причине мне пришло в голову защитить файл с помощью этого кода:

// Check for user session and privileges if it's okay continue
ob_end_clean();
$data = file_get_contents("c:\\newdata.pdf");
$showname = "newdata.pdf";

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=\"".$showname."\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".strlen($data));
echo $data;

проблема в том, что он не только не поддерживает возобновление, но и дает моему веб-серверу большие издержки, а также много памяти, необходимой для file_get_contents для больших файлов, а также для файлов размером более 134217728 байт, вы получите это сообщение об ошибке:

Допустимый объем памяти 134217728 байт исчерпал (пытался выделить 188862464 байт)

Есть предложения?

Ответы [ 2 ]

1 голос
/ 22 сентября 2009
1 голос
/ 22 сентября 2009

Используйте readfile($fileName) для прямой передачи данных файла клиенту.

Редактировать: если вы хотите возобновить поддержку, вам нужно написать версию readfile, которая позволит вам указать начальный байт. Это легко сделать с помощью fopen/fread. Нет необходимости читать все в память - вы просто читаете кусок, отправляете его, читаете другой, отправляете его и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...