О приложении
Я работаю над приложением электронной коммерции в PHP. Чтобы сохранить URL-адрес безопасным, ссылки на скачивание продукта хранятся за PHP. Существует файл, скажем download.php, который принимает несколько параметров через GET и проверяет их на базе данных. Если все идет хорошо, оно служит файлу с использованием функции readfile() в PHP.
О проблеме
Теперь проблема возникает, когда файл, который должен быть передан readfile(), больше, чем ограничение памяти, установленное в php.ini Поскольку это приложение будет использоваться многими пользователями на общедоступном хостинге, мы не можем ретранслировать изменения параметров php.ini.
В наших попытках найти обходные пути я сначала подумал, что мы можем пойти на вызовы fread() в цикле while, но, похоже, это наложит проблемы, а также подчеркнет здесь Загрузка достоверных файлов в PHP
Итак, мой лучший вариант - обнаружить/проверить, поддерживает ли сервер X-Accel-Redirect (в случае Nginx)/X-Sendfile (в случае Apache)
Если сервер поддерживает X-Accel-Redirect/X-Sendfile, я могу использовать их и в блоке else, я могу сообщить администратору системы об ограничении памяти, установленном php.ini
В идеале я хочу использовать поддержку на стороне сервера, такую как X-Accel-Redirect/X-Sendfile, где бы это ни было возможно, и если это не сработает - я бы хотел иметь резервный код для чтения файлов без readfile().
Я еще не уверен, как readfile() и fread() в то время, когда цикл отличается, но кажется, что цикл будет создавать проблему, опять же, как предложено в Загрузка достоверных файлов в PHP
Надеемся получить помощь, предложения, коды, рекомендации.
Спасибо за чтение.