উত্তর:
আমি ব্যক্তিগতভাবে এই ফাংশনটি কোনও অ্যারে থেকে সিএসভি সামগ্রী তৈরি করতে ব্যবহার করি।
function array2csv(array &$array)
{
if (count($array) == 0) {
return null;
}
ob_start();
$df = fopen("php://output", 'w');
fputcsv($df, array_keys(reset($array)));
foreach ($array as $row) {
fputcsv($df, $row);
}
fclose($df);
return ob_get_clean();
}
তারপরে আপনি আপনার ব্যবহারকারীর এমন কিছু ব্যবহার করে সেই ফাইলটি ডাউনলোড করতে পারেন:
function download_send_headers($filename) {
// disable caching
$now = gmdate("D, d M Y H:i:s");
header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
header("Last-Modified: {$now} GMT");
// force download
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
// disposition / encoding on response body
header("Content-Disposition: attachment;filename={$filename}");
header("Content-Transfer-Encoding: binary");
}
ব্যবহারের উদাহরণ:
download_send_headers("data_export_" . date("Y-m-d") . ".csv");
echo array2csv($array);
die();
die();
আপনার ঠিক পরে একটি কল করা দরকার echo array2csv();
, আমার উত্তরটি সম্পাদনা করবে। আপনার পৃষ্ঠায় কিছু আউটপুট দেওয়ার আগে আপনার সিএসভি জেনার বিষয়ে নিশ্চিত হন।
আপনি এই আদেশটি ব্যবহার করে তারিখটি রফতানি করতে পারেন।
<?php
$list = array (
array('aaa', 'bbb', 'ccc', 'dddd'),
array('123', '456', '789'),
array('"aaa"', '"bbb"')
);
$fp = fopen('file.csv', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
?>
প্রথমে আপনাকে মাইএসকিএল সার্ভার থেকে একটি অ্যারেতে ডেটা লোড করতে হবে
কেবল রেকর্ডের জন্য, কনটেন্টেশনটি ওয়াআআআআএই দ্রুত (আমি এটি বোঝাতে চাইছি) এর চেয়েও বেশি fputcsv
বা এমনকি implode
; এবং ফাইলের আকার ছোট:
// The data from Eternal Oblivion is an object, always
$values = (array) fetchDataFromEternalOblivion($userId, $limit = 1000);
// ----- fputcsv (slow)
// The code of @Alain Tiemblo is the best implementation
ob_start();
$csv = fopen("php://output", 'w');
fputcsv($csv, array_keys(reset($values)));
foreach ($values as $row) {
fputcsv($csv, $row);
}
fclose($csv);
return ob_get_clean();
// ----- implode (slow, but file size is smaller)
$csv = implode(",", array_keys(reset($values))) . PHP_EOL;
foreach ($values as $row) {
$csv .= '"' . implode('","', $row) . '"' . PHP_EOL;
}
return $csv;
// ----- concatenation (fast, file size is smaller)
// We can use one implode for the headers =D
$csv = implode(",", array_keys(reset($values))) . PHP_EOL;
$i = 1;
// This is less flexible, but we have more control over the formatting
foreach ($values as $row) {
$csv .= '"' . $row['id'] . '",';
$csv .= '"' . $row['name'] . '",';
$csv .= '"' . date('d-m-Y', strtotime($row['date'])) . '",';
$csv .= '"' . ($row['pet_name'] ?: '-' ) . '",';
$csv .= PHP_EOL;
}
return $csv;
এটি দশ থেকে হাজার সারি পর্যন্ত বেশ কয়েকটি প্রতিবেদনের অপ্টিমাইজেশনের উপসংহার। তিনটি উদাহরণ 1000 সারিগুলির নিচে সূক্ষ্মভাবে কাজ করেছিল, তবে ডেটা বড় হলে ব্যর্থ হয়।
নেস্টেড নিউলাইন এবং কোটগুলি সহ যেকোন সমস্যা সমাধানের জন্য আমি পার্সেকসভ-ফর-পিএইচপি প্রস্তাব দিচ্ছি ।
100 টিরও বেশি লাইনের সাথে কাজ করে যদি আপনি শিরোনামগুলিতে ফাইলের আকার নির্দিষ্ট করেন তবে নিজের শ্রেণিতে get () পদ্ধতিটি কল করুন simple
function setHeader($filename, $filesize)
{
// disable caching
$now = gmdate("D, d M Y H:i:s");
header("Expires: Tue, 01 Jan 2001 00:00:01 GMT");
header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
header("Last-Modified: {$now} GMT");
// force download
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header('Content-Type: text/x-csv');
// disposition / encoding on response body
if (isset($filename) && strlen($filename) > 0)
header("Content-Disposition: attachment;filename={$filename}");
if (isset($filesize))
header("Content-Length: ".$filesize);
header("Content-Transfer-Encoding: binary");
header("Connection: close");
}
function getSql()
{
// return you own sql
$sql = "SELECT id, date, params, value FROM sometable ORDER BY date;";
return $sql;
}
function getExportData()
{
$values = array();
$sql = $this->getSql();
if (strlen($sql) > 0)
{
$result = dbquery($sql); // opens the database and executes the sql ... make your own ;-)
$fromDb = mysql_fetch_assoc($result);
if ($fromDb !== false)
{
while ($fromDb)
{
$values[] = $fromDb;
$fromDb = mysql_fetch_assoc($result);
}
}
}
return $values;
}
function get()
{
$values = $this->getExportData(); // values as array
$csv = tmpfile();
$bFirstRowHeader = true;
foreach ($values as $row)
{
if ($bFirstRowHeader)
{
fputcsv($csv, array_keys($row));
$bFirstRowHeader = false;
}
fputcsv($csv, array_values($row));
}
rewind($csv);
$filename = "export_".date("Y-m-d").".csv";
$fstat = fstat($csv);
$this->setHeader($filename, $fstat['size']);
fpassthru($csv);
fclose($csv);
}
প্রাক-তৈরি কোড এখানে সংযুক্ত। আপনি আপনার কোডটিতে কেবল অনুলিপি এবং আটকানোর মাধ্যমে এটি ব্যবহার করতে পারেন:
https://gist.github.com/umairidrees/8952054#file-php-save-db-table-as-csv