Создать файл CSV для пользователя в PHP - PullRequest
208 голосов
/ 20 октября 2008

У меня есть данные в базе данных MySQL. Я отправляю пользователю URL-адрес, чтобы вывести его данные в виде файла CSV.

У меня есть ссылка на электронную почту, запрос MySQL и т. Д.

Как я могу, когда они нажимают на ссылку, иметь всплывающее окно для загрузки CVS с записью из MySQL?

У меня есть вся информация, чтобы получить запись уже. Я просто не понимаю, как заставить PHP создать файл CSV и позволить ему загрузить файл с расширением .csv.

Ответы [ 20 ]

2 голосов
/ 06 марта 2015

Вы можете просто записать свои данные в CSV, используя функцию fputcsv . давайте посмотрим на пример ниже. Записать массив списка в файл CSV

$list[] = array("Cars", "Planes", "Ships");
$list[] = array("Car's2", "Planes2", "Ships2");
//define headers for CSV 
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=file_name.csv');
//write data into CSV
$fp = fopen('php://output', 'wb');
//convert data to UTF-8 
fprintf($fp, chr(0xEF).chr(0xBB).chr(0xBF));
foreach ($list as $line) {
    fputcsv($fp, $line);
}
fclose($fp);
1 голос
/ 25 июля 2011

Самый простой способ - использовать выделенный класс 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'); 
1 голос
/ 17 декабря 2012

Уже очень хорошее решение пришло. Я просто помещаю полный код, чтобы новичок получил полную помощь

<?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 в браузере.

1 голос
/ 29 октября 2010

Вместо:

$query = "SELECT * FROM customers WHERE created>='{$start} 00:00:00'  AND created<='{$end} 23:59:59'   ORDER BY id";
$select_c = mysql_query($query) or die(mysql_error()); 

while ($row = mysql_fetch_array($select_c, MYSQL_ASSOC))
{
    $result.="{$row['email']},";
    $result.="\n";
    echo $result;
}

Использование:

$query = "SELECT * FROM customers WHERE created>='{$start} 00:00:00'  AND created<='{$end} 23:59:59'   ORDER BY id";
$select_c = mysql_query($query) or die(mysql_error()); 

while ($row = mysql_fetch_array($select_c, MYSQL_ASSOC))
{
    echo implode(",", $row)."\n";
}
0 голосов
/ 11 декабря 2008
<?
    // 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, 'wb' );

    $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 );
?>
0 голосов
/ 22 октября 2012

Как записать в файл CSV, используя скрипт PHP? На самом деле я тоже искал это. Это довольно простая задача с PHP. fputs (обработчик, контент) - эта функция работает для меня эффективно. Сначала вам нужно открыть файл, в который вам нужно написать контент, используя fopen ($ CSVFileName, 'wb').

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

//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);
}
0 голосов
/ 16 октября 2010

Вот один из тех, что я сделал раньше, собирая данные между определенными датами. Надеюсь, это поможет.

<?php
    header("Content-type: application/csv");
    header("Content-Disposition: attachment; filename=file.csv");
    header("Pragma: no-cache");
    header("Expires: 0");

    ini_set('display_errors',1);
    $private=1;
    error_reporting(E_ALL ^ E_NOTICE);

    mysql_connect("localhost", "user", "pass") or die(mysql_error());
    mysql_select_db("db") or die(mysql_error());

    $start = mysql_real_escape_string($_GET["start"]);
    $end = mysql_real_escape_string($_GET["end"]);

    $query = "SELECT * FROM customers WHERE created>='{$start} 00:00:00'  AND created<='{$end} 23:59:59'   ORDER BY id";
    $select_c = mysql_query($query) or die(mysql_error());

    while ($row = mysql_fetch_array($select_c, MYSQL_ASSOC))
    {
        $result.="{$row['email']},";
        $result.="\n";
        echo $result;
    }
?>
0 голосов
/ 18 ноября 2010

Введите в переменную $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;
0 голосов
/ 06 июня 2017

Написание собственного CSV-кода, вероятно, является пустой тратой вашего времени, просто используйте пакет, такой как league / csv - он разбирается со всеми сложными для вас вещами, документация хороша и очень стабильна / надежна:

http://csv.thephpleague.com/

Вам нужно будет использовать композитор. Если вы не знаете, что такое композитор, я настоятельно рекомендую вам посмотреть: https://getcomposer.org/

0 голосов
/ 20 октября 2008

Чтобы отправить его в формате CSV и дать ему имя файла, используйте header ():

http://us2.php.net/header

header('Content-type: text/csv');
header('Content-disposition: attachment; filename="myfile.csv"');

Что касается создания самого CSV, вы просто просматриваете набор результатов, форматируете вывод и отправляете его, как и любой другой контент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...