Я использую X-SendFile Apache Module для загрузки больших файлов с сервера. Загрузки работают хорошо. Однако, когда начинается загрузка, мне нужно вывести некоторый текст в браузер, например: «Спасибо, что загрузил файл ...»PHP, X-SendFile: отправка файла вместе с выводом текста в браузер (через echo)
Моя проблема заключается в том, что я не могу выполнять оба сценария. Я могу либо загрузить файл, а затем текст не выводится на экран. Или, я могу вывести текст на экран, но тогда сценарий загрузки не запустится.
Как выполнить обе задачи в одном скрипте 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, файл получает загружены, но nothign вторит в браузере:
echo "SUCCESS!!!";
ob_flush();
Constraint:
Мне нужно, чтобы иметь возможность загрузить файл eaisly через URL. Пример: www.mydomain.com/?fileID=asl523n53twteHLfga
. Другими словами, сценарий загрузки PHP находится в пределах index.php
. Когда пользователь вводит www.mydomain.com
, отображается целевая страница домена. Однако, когда передается дополнительная переменная $_GET
, скрипт PHP распознает это и должен отображать Спасибо за скачивание ... вместо целевой страницы.
Обходное решение приветствуется. Важно следить за желаемым результатом, сохраняя вышеуказанное ограничение. Тыкн ты очень.
Невозможно. Большинство сторонних браузеров не поддерживается (или поддерживается хорошо). ответ обычно состоит из ОДНОГО потока данных. большинство людей обходятся, выбирая промежуточную страницу с благодарностью, а затем мета-обновление, указывающее на фактическую ссылку для скачивания. –
Марк Б, спасибо за ваш ответ. Я понимаю, что вы имеете в виду. Это готовое решение. Я буду ждать, чтобы собрать еще несколько ответов, и если ничего лучше не придет, я пойду в направлении, которое вы указали. Спасибо и +1. –