Ваша проблема в том, что fread($fp2, 1000000000000)
пытается выделить 1 терабайт большой буфер для чтения файла и явно достигает допустимого предела памяти, если только вы не на 32-битной платформе, где целое число происходит переполнение . В любом случае это не работает.
Если вы хотите прочитать весь файл в выходной буфер и сделать это быстро, используйте readfile()
примерно так:
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=$filename.csv");
readfile("$filename.csv")
Обязательно проверьте журнал ошибок в следующий раз.
Также, если вы не планируете хранить полученные файлы на диске, я рекомендую переделать ваш скрипт, чтобы использовать более безопасный подход:
$fp = tmpfile(); // creates a handle for a temporary file with a unique name
foreach ($csv as $fields) {
fputcsv($fp, $fields);
}
rewind($fp);
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=report.csv");
fpassthru($fp);
fclose($fp); // this removes the file