PHP में किसी उपयोगकर्ता के लिए एक CSV फ़ाइल बनाएं


Answers

header("Content-Type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");

function outputCSV($data) {
  $output = fopen("php://output", "w");
  foreach ($data as $row)
    fputcsv($output, $row); // here you can change delimiter/enclosure
  fclose($output);
}

outputCSV(array(
  array("name 1", "age 1", "city 1"),
  array("name 2", "age 2", "city 2"),
  array("name 3", "age 3", "city 3")
));

php://output
fputcsv

Question

मेरे पास एक MySQL डेटाबेस में डेटा है। मैं उपयोगकर्ता को एक CSV फ़ाइल के रूप में अपना डेटा प्राप्त करने के लिए एक यूआरएल भेज रहा हूं।

मेरे पास लिंक का ई-मेलिंग है, MySQL क्वेरी, आदि शामिल है।

जब मैं लिंक पर क्लिक करता हूं, तो मैं कैसे MySQL से रिकॉर्ड के साथ एक सीवीएस डाउनलोड करने के लिए पॉप-अप कर सकता हूं?

मेरे पास पहले से ही रिकॉर्ड प्राप्त करने के लिए सारी जानकारी है। मैं सिर्फ यह नहीं देखता कि PHP को CSV फ़ाइल कैसे बनाएं और उन्हें एक .csv एक्सटेंशन के साथ फ़ाइल डाउनलोड करने दें।




PHP स्क्रिप्ट का उपयोग कर सीएसवी फ़ाइल में कैसे लिखें? वास्तव में मैं भी इसके लिए खोज रहा था। PHP के साथ यह आसान काम है। fputs (हैंडलर, सामग्री) - यह समारोह मेरे लिए कुशलतापूर्वक काम करता है। सबसे पहले आपको उस फ़ाइल को खोलने की आवश्यकता है जिसमें आपको फॉपेन ($ CSVFileName, 'w') का उपयोग करके सामग्री लिखने की आवश्यकता है।

$CSVFileName = “test.csv”;
$fp = fopen($CSVFileName, ‘w’);

//Multiple iterations to append the data using function fputs()
foreach ($csv_post as $temp)
{
    $line = “”;
    $line .= “Content 1″ . $comma . “$temp” . $comma . “Content 2″ . $comma . “16/10/2012″.$comma;
    $line .= “\n”;
    fputs($fp, $line);
}



पहले से ही सभी के अलावा, आपको जोड़ने की आवश्यकता हो सकती है:

header("Content-Transfer-Encoding: UTF-8");

लोगों के नामों या शहरों की तरह कई भाषाओं वाली फ़ाइलों को संभालने में यह बहुत उपयोगी होता है।




पहले से ही बहुत अच्छा समाधान आया था। मैं सिर्फ कुल कोड डाल रहा हूं ताकि एक नौसिखिया को कुल सहायता मिल सके

<?php
extract($_GET); //you can send some parameter by query variable. I have sent table name in *table* variable

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=$table.csv");
header("Pragma: no-cache");
header("Expires: 0");

require_once("includes/functions.php"); //necessary mysql connection functions here

//first of all I'll get the column name to put title of csv file.
$query = "SHOW columns FROM $table";
$headers = mysql_query($query) or die(mysql_error());
$csv_head = array();
while ($row = mysql_fetch_array($headers, MYSQL_ASSOC))
{
    $csv_head[] =  $row['Field'];
}
echo implode(",", $csv_head)."\n";

//now I'll bring the data.
$query = "SELECT * FROM $table";
$select_c = mysql_query($query) or die(mysql_error()); 

while ($row = mysql_fetch_array($select_c, MYSQL_ASSOC))
{
    foreach ($row as $key => $value) {
            //there may be separator (here I have used comma) inside data. So need to put double quote around such data.
        if(strpos($value, ',') !== false || strpos($value, '"') !== false || strpos($value, "\n") !== false) {
            $row[$key] = '"' . str_replace('"', '""', $value) . '"';
        }
    }
    echo implode(",", $row)."\n";
}

?>

मैंने इस कोड को csv-download.php में सहेजा है

अब देखें कि मैंने सीएसवी फ़ाइल डाउनलोड करने के लिए इस डेटा का उपयोग कैसे किया है

<a href="csv-download.php?table=tbl_vfm"><img title="Download as Excel" src="images/Excel-logo.gif" alt="Download as Excel" /><a/>

इसलिए जब मैंने लिंक पर क्लिक किया है तो यह मुझे ब्राउज़र पर csv-download.php पेज पर ले जाकर फ़ाइल डाउनलोड करता है।




$output चर को CSV डेटा में रखें और सही शीर्षलेखों के साथ गूंजें

header("Content-type: application/download\r\n");
header("Content-disposition: filename=filename.csv\r\n\r\n");
header("Content-Transfer-Encoding: ASCII\r\n");
header("Content-length: ".strlen($output)."\r\n");
echo $output;



इस तरह एक समर्पित सीएसवी कक्षा का उपयोग करना सबसे आसान तरीका है:

$csv = new csv();
$csv->load_data(array(
    array('name'=>'John', 'age'=>35),
    array('name'=>'Adrian', 'age'=>23), 
    array('name'=>'William', 'age'=>57) 
));
$csv->send_file('age.csv'); 



अपनी फ़ाइल बनाएं, फिर सेव को ट्रिगर करने के लिए सही शीर्षलेख के साथ इसका संदर्भ दें - आवश्यकतानुसार निम्न संपादित करें। अपने सीएसवी डेटा को $ csvdata में रखें।

$fname = 'myCSV.csv';
$fp = fopen($fname,'w');
fwrite($fp,$csvdata);
fclose($fp);

header('Content-type: application/csv');
header("Content-Disposition: inline; filename=".$fname);
readfile($fname);



<?
    // Connect to database
    $result = mysql_query("select id
    from tablename
    where shid=3");
    list($DBshid) = mysql_fetch_row($result);

    /***********************************
    Write date to CSV file
    ***********************************/

    $_file = 'show.csv';
    $_fp = @fopen( $_file, 'w' );

    $result = mysql_query("select name,compname,job_title,email_add,phone,url from UserTables where id=3");

    while (list( $Username, $Useremail_add, $Userphone, $Userurl) = mysql_fetch_row($result))
    {
        $_csv_data = $Username.','.$Useremail_add.','.$Userphone.','.$Userurl . "\n";
        @fwrite( $_fp, $_csv_data);
    }
    @fclose( $_fp );
?>



सरल विधि -

$data = array (
    'aaa,bbb,ccc,dddd',
    '123,456,789',
    '"aaa","bbb"');

$fp = fopen('data.csv', 'w');
foreach($data as $line){
    $val = explode(",",$line);
    fputcsv($fp, $val);
}
fclose($fp);

तो $data सरणी की प्रत्येक पंक्ति आपकी नव निर्मित सीएसवी फ़ाइल की एक नई पंक्ति पर जाएगी। यह केवल PHP 5 और बाद में ही काम करता है।




सबसे पहले डेटा को ड्रेमिटर के रूप में एक स्ट्रिंग के रूप में बनाएं ("," से अलग)। कुछ इस तरह

$CSV_string="No,Date,Email,Sender Name,Sender Email \n"; //making string, So "\n" is used for newLine

$rand = rand(1,50); //Make a random int number between 1 to 50.
$file ="export/export".$rand.".csv"; //For avoiding cache in the client and on the server 
                                     //side it is recommended that the file name be different.

file_put_contents($file,$CSV_string);

/* Or try this code if $CSV_string is an array
    fh =fopen($file, 'w');
    fputcsv($fh , $CSV_string , ","  , "\n" ); // "," is delimiter // "\n" is new line.
    fclose($fh);
*/



Related