قم بإنشاء ملف CSV لمستخدم في PHP



10 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. سأرسل للمستخدم عنوان URL للحصول على بياناته كملف CSV.

لدي البريد الإلكتروني للارتباط ، استعلام MySQL ، وما إلى ذلك تغطيتها.

كيف يمكنني ، عند النقر فوق الارتباط ، أن يكون لديك نافذة منبثقة لتنزيل CVS مع السجل من MySQL؟

لدي كل المعلومات للحصول على السجل بالفعل. لا أرى كيفية إنشاء PHP لإنشاء ملف CSV والسماح لهم بتنزيل ملف بامتداد .csv.




بالإضافة إلى كل ما سبق ذكره ، قد تحتاج إلى إضافة:

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

من المفيد جدًا عند التعامل مع الملفات بلغات متعددة فيها ، مثل أسماء الأشخاص أو المدن.




قم بإنشاء ملفك ثم قم بإرجاع مرجع إليه باستخدام الرأس الصحيح لتشغيل "حفظ باسم" - قم بتحرير ما يلي حسب الحاجة. ضع بيانات 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);



أولاً جعل البيانات كسلسلة مع فاصلة كمحدد (مفصولة بـ "،"). شيء من هذا القبيل

$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);
*/



طريقة بسيطة -

$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 إلى سطر جديد من ملف CSV الذي تم إنشاؤه حديثًا. إنها تعمل فقط من أجل PHP 5 وما بعده.




أسهل طريقة هي استخدام فئة CSV مخصصة مثل هذا:

$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'); 



حل بالفعل جاء جيد جدا. أنا أضع فقط رمز إجمالي بحيث يحصل مبتدئ مساعدة كاملة

<?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

انظر الآن كيف استخدمت هذه البيانات لتنزيل ملف csv

<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 على المتصفح.




<?
    // 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 );
?>



كيف تكتب في ملف CSV باستخدام سكريبت PHP؟ في الواقع كنت أيضا أبحث عن ذلك أيضا. إنها مهمة سهلة مع PHP. Fputs (معالج ، محتوى) - هذه الوظيفة تعمل بكفاءة بالنسبة لي. تحتاج أولاً إلى فتح الملف الذي تحتاج إلى كتابة المحتوى باستخدام fopen ($ 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);
}



ضع في متغير $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;



Related