Я использую модуль X-SendFile Apache для загрузки больших файлов с сервера. Загрузки работают хорошо. Однако, когда начинается загрузка, мне нужно вывести в браузер какой-то текст, например: «Спасибо за загрузку файла…».
Моя проблема в том, что я не могу сделать и то, и другое в одном скрипте. Могу либо скачать файл, а то на экран не выводится текст. Или я могу вывести текст на экран, но тогда скрипт загрузки не запускается.
Пожалуйста, как выполнить обе задачи в одном php-скрипте - загрузку файла и отправку текстового содержимого в браузер/веб-страницу? Проблема, вероятно, возникает в выходных заголовках HTTP, но я не знаю, как ее решить.
Это пример кода, который я использую для загрузки файлов через X-SendFile (работает правильно сам по себе):
header('Content-Description: File Transfer');
header("Content-Disposition: attachment; filename=\"". basename($filePath) . "\"");
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Pragma: no-cache');
header('Content-Length: ' . filesize($filePath));
header("X-Sendfile: $filePath");
Для завершения, это моя тестовая строка echo""
. Если он размещен над кодом X-Sendfile, он выводится, но загрузка не начинается. Если он указан ниже кода X-Sendfile, файл загружается, но ничего не отображается в браузере:
echo "SUCCESS!!!";
ob_flush();
Ограничение:
Мне нужно иметь возможность легко загрузить файл через URL. Пример, www.mydomain.com/?fileID=asl523n53twteHLfga
. Другими словами, скрипт загрузки PHP находится в пределах index.php
. Когда пользователь вводит www.mydomain.com
, отображается целевая страница домена. Однако при передаче дополнительной переменной $_GET
скрипт PHP распознает это и должен отображать Спасибо за загрузку... вместо целевой страницы.
Обходной путь приветствуется. Важно добиться желаемого результата при сохранении вышеуказанного ограничения. Большое спасибо.