У меня есть веб-сайт с возможностью загрузки файлов.Однако не всем разрешено загружать каждый файл.Например, если я вхожу в систему как администратор, я могу загружать все файлы, но если я вхожу как пользователь, я могу загружать только определенные файлы.
В настоящее время все эти файлы хранятся в каталоге вне корневого веб-каталога,поэтому пользователи не могут загрузить их вручную.Я сделал PHP-скрипт для управления загрузкой файлов, но он очень глючный.Я попробовал несколько вещей:
1:
echo file_get_contents($file);
2:
readfile($file);
3:
if (($handle = fopen($file, "rb")) !== false)
{
while (!feof($handle))
{
echo fread($handle, 4096);
}
fclose($handle);
}
Я обнаружил, что все этиметоды очень ненадежны при тестировании файла размером 500 МБ.Первое и второе не работают со всеми браузерами и случайными процентами.Иногда они уже терпят неудачу после нескольких мегабайт, а иногда они достигают 80%.Но в итоге они просто перестанут скачивать без каких-либо ошибок.
Третий метод наиболее надежен.Он хорошо загружается в Firefox (хотя и слишком медленно; около 700 КБ / с, в то время как он от localhost и метод readfile работает со скоростью 25 МБ / с, когда он работает) и Chrome, но в Internet Explorer он в большинстве случаев дает сбой.В IE он сначала застревает при «получении информации о файле» без какого-либо диалога «Открыть / Сохранить».Когда я отменяю это и пытаюсь снова, я получаю диалоговое окно «Открыть / Сохранить».
Я искал в Интернете, и я не могу найти какой-либо удовлетворительный метод, который действительно работает хорошо.Предпочтительно, я просто хочу, чтобы Apache выполнял загрузку файлов, поскольку это всегда работает без проблем.Но я не хочу помещать все файлы в общедоступный каталог, поскольку каждый может загрузить все файлы.
Какие у меня варианты?Есть ли лучший метод?