PHP CSV File Download
April 1, 2025 · AI Conversations
—
### ✅ PHP Script to Stream a 3 GB CSV File
This approach **streams the file** instead of loading everything into memory.
<?php
// Set headers to force download
header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename="large-file.csv"');
// Open output stream
$handle = fopen('php://output', 'w');
// Output column headings
fputcsv($handle, ['ID', 'Name', 'Email', 'Date']);
$rows = 100000000; // Approximate row count to reach ~3 GB depending on content
for ($i = 1; $i <= $rows; $i++) {
$row = [
$i,
'User_' . $i,
'user' . $i . '@example.com',
date('Y-m-d', strtotime("+$i days"))
];
fputcsv($handle, $row);
// Flush the output buffer every 1000 rows to free memory
if ($i % 1000 == 0) {
flush();
}
}
fclose($handle);
exit;
—
### 🔁 How it works:
– Uses `php://output` to stream data directly.
– Flushes every 1000 rows to avoid memory issues.
– You can adjust `$rows` or row content to control file size.
—
### 🧪 Tips:
– Run it via browser or API endpoint like `download-csv.php`.
– For CLI or cron job, replace headers with file write logic (e.g., `fopen('large.csv', 'w')`).
– You may need to adjust `max_execution_time` and `memory_limit` in `php.ini`.
Would you prefer a version in **Python**, **Node.js**, or another language instead?
—
### ✅ PHP Script to Force CSV File Download
<?php
$file = 'path/to/large-file.csv'; // Example: /var/www/html/downloads/large-file.csv
if (file_exists($file)) {
// Set headers
header('Content-Description: File Transfer');
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
// Clear output buffer to avoid corruption
ob_clean();
flush();
// Read and output the file
readfile($file);
exit;
} else {
http_response_code(404);
echo "File not found.";
}
—
### 📌 Usage:
– Save it as `download.php`.
– Place it in your web root (e.g., `public_html/` or `public/`).
– Access it via: `https://yourdomain.com/download.php`
Let me know if the file is stored outside web root or on S3/remote storage—you might need a different method then.
—
### ✅ Zip All Contents of Current Directory (without including the folder itself)
zip -r archive-name.zip ./*
– This zips everything **inside the current directory**.
– The `-r` flag means **recursive**, so it includes all subfolders/files.
– The `./*` ensures **only the contents** are zipped, **not the current folder**.
—
### ✅ Example
cd /var/www/myproject
zip -r myproject.zip ./*
This will create `myproject.zip` with all files and folders inside `/var/www/myproject`.
—
### 📁 If You Want to Include the Parent Folder Too:
cd /var/www/
zip -r myproject.zip myproject/
This way, the zip will contain the `myproject/` folder itself.
—
Let me know if you want to **exclude files/folders**, password-protect it, or send it via SCP.