जवाबों:
मैं व्यक्तिगत रूप से किसी भी सरणी से CSV सामग्री बनाने के लिए इस फ़ंक्शन का उपयोग करता हूं।
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);
?>
पहले आपको mysql सर्वर से सरणी में डेटा लोड करना होगा
सिर्फ रिकॉर्ड के लिए, कॉन्फिडेंशियल है 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 पंक्तियों के तहत ठीक काम किया, लेकिन डेटा बड़ा होने पर विफल हो जाता है।
मैं parsecsv-for-php को नेस्टेड न्यूलाइन्स और कोट्स के साथ किसी भी समस्या के आसपास नंबर पाने के लिए सलाह देता हूं ।
100 से अधिक लाइनों के साथ काम करता है, यदि आप हेडर में फ़ाइल का आकार सरल निर्दिष्ट करते हैं, तो अपनी कक्षा में प्राप्त () विधि को कॉल करें
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