У меня есть функция, которая будет потоковой передачей файла CSV для клиента для загрузки. Я обнаружил, что через 5 секунд браузер прекратит соединение. Я использовал почтальон и Curl, и он завершает выход, чтобы я мог устранить, что буфер полон /не выводит. public function random_stream()
{
ini_set('zlib.output_compression', 'Off');
// Clear output buffering
while (ob_get_level()) {
ob_end_clean();
}
// Set headers first
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="test.csv"');
header('Pragma: no-cache');
header('Expires: 0');
// Now open output stream
$file = fopen('php://output', 'w');
// Optional: output a CSV header row
fputcsv($file, ['Column 1', 'Column 2', 'Column 3']);
$start_time = time();
while ((time() - $start_time) < 10) {
$row = [
$this->randomString(),
$this->randomString(),
$this->randomString()
];
fputcsv($file, $row);
flush(); // optional but ensures streaming output
}
fclose($file);
exit;
}
function randomString($length = 8)
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomStr = '';
for ($i = 0; $i < $length; $i++) {
$randomStr .= $characters[rand(0, $charactersLength - 1)];
}
return $randomStr;
}
< /code>
Я устанавливаю неправильные заголовки или неправильно промывая, чтобы браузер поддерживал?check what is wrong with this response:
GET /random_stream HTTP/1.1
Host: ***obscured***
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br, zstd
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Pragma: no-cache
Cache-Control: no-cache
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Cache-Control: no-cache
Connection: Keep-Alive
Content-Disposition: attachment; filename="test.csv"
Content-Type: text/csv;charset=UTF-8
Date: Wed, 06 Aug 2025 16:56:01 GMT
Expires: 0
Keep-Alive: timeout=5, max=100
Pragma: no-cache
Server: Apache/2.4.41 (Ubuntu)
Подробнее здесь: https://stackoverflow.com/questions/797 ... -5-seconds
Браузер (Chrome, Firefox) отменяет преждевременную загрузку потока, через 5 секунд ⇐ Php
Кемеровские программисты php общаются здесь
1754500177
Anonymous
У меня есть функция, которая будет потоковой передачей файла CSV для клиента для загрузки. Я обнаружил, что через 5 секунд браузер прекратит соединение. Я использовал почтальон и Curl, и он завершает выход, чтобы я мог устранить, что буфер полон /не выводит. public function random_stream()
{
ini_set('zlib.output_compression', 'Off');
// Clear output buffering
while (ob_get_level()) {
ob_end_clean();
}
// Set headers first
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="test.csv"');
header('Pragma: no-cache');
header('Expires: 0');
// Now open output stream
$file = fopen('php://output', 'w');
// Optional: output a CSV header row
fputcsv($file, ['Column 1', 'Column 2', 'Column 3']);
$start_time = time();
while ((time() - $start_time) < 10) {
$row = [
$this->randomString(),
$this->randomString(),
$this->randomString()
];
fputcsv($file, $row);
flush(); // optional but ensures streaming output
}
fclose($file);
exit;
}
function randomString($length = 8)
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomStr = '';
for ($i = 0; $i < $length; $i++) {
$randomStr .= $characters[rand(0, $charactersLength - 1)];
}
return $randomStr;
}
< /code>
Я устанавливаю неправильные заголовки или неправильно промывая, чтобы браузер поддерживал?check what is wrong with this response:
GET /random_stream HTTP/1.1
Host: ***obscured***
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br, zstd
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Pragma: no-cache
Cache-Control: no-cache
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Cache-Control: no-cache
Connection: Keep-Alive
Content-Disposition: attachment; filename="test.csv"
Content-Type: text/csv;charset=UTF-8
Date: Wed, 06 Aug 2025 16:56:01 GMT
Expires: 0
Keep-Alive: timeout=5, max=100
Pragma: no-cache
Server: Apache/2.4.41 (Ubuntu)
Подробнее здесь: [url]https://stackoverflow.com/questions/79727625/browser-chrome-firefox-cancels-download-stream-prematurely-after-5-seconds[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия