복붙노트

PHP에서 사용자를위한 CSV 파일 만들기

PHP

PHP에서 사용자를위한 CSV 파일 만들기

MySQL 데이터베이스에 데이터가 있습니다. 사용자에게 URL을 보내서 데이터를 CSV 파일로 가져옵니다.

링크, 전자 메일 쿼리 등의 전자 메일을 받았습니다.

링크를 클릭하면 MySQL의 레코드가있는 CVS를 다운로드 할 수있는 팝업을 어떻게 표시합니까?

이미 기록을 얻기위한 모든 정보가 있습니다. PHP로 CSV 파일을 만들고 CSV 확장자로 파일을 다운로드하게하는 방법을 모르겠습니다.

해결법

  1. ==============================

    1.시험:

    시험:

    header("Content-type: text/csv");
    header("Content-Disposition: attachment; filename=file.csv");
    header("Pragma: no-cache");
    header("Expires: 0");
    
    echo "record1,record2,record3\n";
    die;
    

    기타

    편집 : 다음은 선택적으로 CSV 필드를 인코딩하는 데 사용하는 코드 스 니펫입니다.

    function maybeEncodeCSVField($string) {
        if(strpos($string, ',') !== false || strpos($string, '"') !== false || strpos($string, "\n") !== false) {
            $string = '"' . str_replace('"', '""', $string) . '"';
        }
        return $string;
    }
    
  2. ==============================

    2.

    header("Content-Type: text/csv");
    header("Content-Disposition: attachment; filename=file.csv");
    
    function outputCSV($data) {
      $output = fopen("php://output", "wb");
      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는 : / / 출력 fputcsv

  3. ==============================

    3.다음은 @Andrew가 게시 한 php.net의 향상된 기능 버전입니다.

    다음은 @Andrew가 게시 한 php.net의 향상된 기능 버전입니다.

    function download_csv_results($results, $name = NULL)
    {
        if( ! $name)
        {
            $name = md5(uniqid() . microtime(TRUE) . mt_rand()). '.csv';
        }
    
        header('Content-Type: text/csv');
        header('Content-Disposition: attachment; filename='. $name);
        header('Pragma: no-cache');
        header("Expires: 0");
    
        $outstream = fopen("php://output", "wb");
    
        foreach($results as $result)
        {
            fputcsv($outstream, $result);
        }
    
        fclose($outstream);
    }
    

    정말 사용하기 쉽고 MySQL (i) / PDO 결과 세트로 훌륭하게 작동합니다.

    download_csv_results($results, 'your_name_here.csv');
    

    페이지를 완료 한 경우이 함수를 호출 한 후 종료 ()해야합니다.

  4. ==============================

    4.이미 언급 한 것 외에도 다음을 추가해야 할 수도 있습니다.

    이미 언급 한 것 외에도 다음을 추가해야 할 수도 있습니다.

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

    사람들의 이름이나 도시와 같이 여러 언어가 포함 된 파일을 처리 할 때 매우 유용합니다.

  5. ==============================

    5.쓰레드는 조금 오래된 것입니다.하지만 나중의 참고 자료 나 멍청한 놈들 자신을 위해서 :

    쓰레드는 조금 오래된 것입니다.하지만 나중의 참고 자료 나 멍청한 놈들 자신을 위해서 :

    여기서 다른 사람들은 CSV를 만드는 방법을 설명하지만 질문의 기본 부분 인 연결 방법을 놓칩니다. CSV 파일의 다운로드에 연결하려면 .php 파일에 연결하면 .csv 파일로 응답합니다. PHP 헤더가 그렇게합니다. 이것은 querystring에 변수를 추가하고 출력을 사용자 정의하는 것과 같은 멋진 작업을 가능하게합니다.

    <a href="my_csv_creator.php?user=23&amp;othervariable=true">Get CSV</a>
    

    my_csv_creator.php는 쿼리 문자열에 지정된 변수로 작업 할 수 있으며 예를 들어 다른 데이터베이스 쿼리 나 사용자 정의 데이터베이스 쿼리를 사용하거나 CSV 열을 변경하거나 파일 이름을 사용자 설정하는 등의 작업을 할 수 있습니다 (예 :

    User_John_Doe_10_Dec_11.csv
    
  6. ==============================

    6.파일을 생성 한 다음 올바른 헤더가있는 참조를 저장하여 다른 이름으로 저장 - 필요에 따라 다음을 편집하십시오. CSV 데이터를 $ csvdata에 저장하십시오.

    파일을 생성 한 다음 올바른 헤더가있는 참조를 저장하여 다른 이름으로 저장 - 필요에 따라 다음을 편집하십시오. CSV 데이터를 $ csvdata에 저장하십시오.

    $fname = 'myCSV.csv';
    $fp = fopen($fname,'wb');
    fwrite($fp,$csvdata);
    fclose($fp);
    
    header('Content-type: application/csv');
    header("Content-Disposition: inline; filename=".$fname);
    readfile($fname);
    
  7. ==============================

    7.다음은 PDO를 사용하고 열 머리글을 포함하는 전체 작동 예제입니다.

    다음은 PDO를 사용하고 열 머리글을 포함하는 전체 작동 예제입니다.

    $query = $pdo->prepare('SELECT * FROM test WHERE id=?');
    $query->execute(array($id));    
    $results = $query->fetchAll(PDO::FETCH_ASSOC);
    download_csv_results($results, 'test.csv'); 
    exit();
    
    
    function download_csv_results($results, $name)
    {            
        header('Content-Type: text/csv');
        header('Content-Disposition: attachment; filename='. $name);
        header('Pragma: no-cache');
        header("Expires: 0");
    
        $outstream = fopen("php://output", "wb");    
        fputcsv($outstream, array_keys($results[0]));
    
        foreach($results as $result)
        {
            fputcsv($outstream, $result);
        }
    
        fclose($outstream);
    }
    
  8. ==============================

    8.먼저 데이터를 구분 기호로 쉼표가있는 문자열 ( ","로 구분)로 만듭니다. 이 같은

    먼저 데이터를 구분 기호로 쉼표가있는 문자열 ( ","로 구분)로 만듭니다. 이 같은

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

    9.헤이 아주 잘 작동합니다 .... !!!! 감사합니다 Peter Mortensen 및 Connor Burton

    헤이 아주 잘 작동합니다 .... !!!! 감사합니다 Peter Mortensen 및 Connor Burton

    <?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 = $_GET["start"];
    $end = $_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;
    }
    

    ?>

  10. ==============================

    10.간단한 방법 -

    간단한 방법 -

    $data = array (
        'aaa,bbb,ccc,dddd',
        '123,456,789',
        '"aaa","bbb"');
    
    $fp = fopen('data.csv', 'wb');
    foreach($data as $line){
        $val = explode(",",$line);
        fputcsv($fp, $val);
    }
    fclose($fp);
    

    따라서 $ 데이터 배열의 각 행은 새로 작성된 CSV 파일의 새 행으로 이동합니다. PHP 5 이상에서만 작동합니다.

  11. ==============================

    11.fputcsv 기능을 사용하여 CSV에 데이터를 간단히 작성할 수 있습니다. 아래 예제를 살펴 보겠습니다. 목록 배열을 CSV 파일에 씁니다.

    fputcsv 기능을 사용하여 CSV에 데이터를 간단히 작성할 수 있습니다. 아래 예제를 살펴 보겠습니다. 목록 배열을 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);
    
  12. ==============================

    12.가장 쉬운 방법은 다음과 같은 전용 CSV 클래스를 사용하는 것입니다.

    가장 쉬운 방법은 다음과 같은 전용 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'); 
    
  13. ==============================

    13.대신에:

    대신에:

    $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";
    }
    
  14. ==============================

    14.이미 아주 좋은 해결책이 왔습니다. 초보자가 총 도움을 얻을 수 있도록 전체 코드를 넣는 것뿐입니다.

    이미 아주 좋은 해결책이 왔습니다. 초보자가 총 도움을 얻을 수 있도록 전체 코드를 넣는 것뿐입니다.

    <?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 페이지로 이동하지 않고 파일을 다운로드합니다.

  15. ==============================

    15.CSV로 보내고 파일 이름을 부여하려면 header ()를 사용하십시오.

    CSV로 보내고 파일 이름을 부여하려면 header ()를 사용하십시오.

    http://us2.php.net/header

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

    CSV 자체를 만드는 것만 큼 다른 컨텐트처럼 결과 세트를 반복하고 출력 형식을 지정하여 보낼 수 있습니다.

  16. ==============================

    16.여기에는 특정 날짜 사이에 데이터를 가져 와서 이전에 수행 한 작업이 있습니다. 희망이 도움이됩니다.

    여기에는 특정 날짜 사이에 데이터를 가져 와서 이전에 수행 한 작업이 있습니다. 희망이 도움이됩니다.

    <?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 = $_GET["start"];
        $end = $_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;
        }
    ?>
    
  17. ==============================

    17.자신의 CSV 코드를 작성하는 것은 시간 낭비 일뿐입니다. 리그 / csv와 같은 패키지를 사용하십시오. 모든 어려운 사항을 다루기 때문에 문서가 훌륭하고 안정적입니다.

    자신의 CSV 코드를 작성하는 것은 시간 낭비 일뿐입니다. 리그 / csv와 같은 패키지를 사용하십시오. 모든 어려운 사항을 다루기 때문에 문서가 훌륭하고 안정적입니다.

    http://csv.thephpleague.com/

    작곡가를 사용해야합니다. 어떤 작곡가인지 모르겠다면 꼭 보시기 바랍니다 : https://getcomposer.org/

  18. ==============================

    18.

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

    19.PHP 스크립트를 사용하여 CSV 파일을 작성하는 방법은 무엇입니까? 사실 나는 또한 그것을 찾고 있었다. 그것은 PHP에서 일종의 쉬운 일입니다. fputs (handler, content) -이 함수는 효율적으로 작동합니다. 먼저 fopen ($ CSVFileName, 'wb')을 사용하여 내용을 작성해야하는 파일을 열어야합니다.

    PHP 스크립트를 사용하여 CSV 파일을 작성하는 방법은 무엇입니까? 사실 나는 또한 그것을 찾고 있었다. 그것은 PHP에서 일종의 쉬운 일입니다. fputs (handler, content) -이 함수는 효율적으로 작동합니다. 먼저 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);
    }
    
  20. ==============================

    20.$ 출력 변수에 CSV 데이터를 넣고 올바른 헤더를 사용하여 에코합니다.

    $ 출력 변수에 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;
    
  21. from https://stackoverflow.com/questions/217424/create-a-csv-file-for-a-user-in-php by cc-by-sa and MIT license