За последние 24 часа нас посетили 22905 программистов и 1261 робот. Сейчас ищут 735 программистов ...

Экспорт таблицы в csv файл с помощью php

Тема в разделе "PHP для новичков", создана пользователем scared1995, 27 авг 2020.

Метки:
  1. scared1995

    scared1995 Новичок

    С нами с:
    14 авг 2020
    Сообщения:
    6
    Симпатии:
    1
    Есть скрипт php, который реализует экспорт таблицы в SCV файл.Когда открываешь,выдает непонятные символы.Скорее всего проблема в кодировке,но я целый день бьюсь головой об стену и все попытки тщетны.
    [​IMG]
    Сам скрипт:

    Код (Text):
    1. $query = "SELECT id,producer,name,short,full,nval,price_v,price1_v,price2_v,price3_v FROM `ve_goods` WHERE producer='iptronic'";
    2. $result = mysqli_query(DB::db(), $query);
    3.  
    4. $number_of_fields = mysqli_num_fields($result);
    5. $headers = array();
    6. for ($i = 0; $i < $number_of_fields; $i++) {
    7.     $headers[] = mysqli_field_name($result, $i);
    8. }
    9. $fp = fopen('php://output', 'w');
    10. if ($fp && $result) {
    11.     header('Content-Type: text/csv; utf-8; windows-1251');
    12.     header('Content-Disposition: attachment; filename="export.csv"');
    13.     header('Pragma: no-cache');
    14.     header('Expires: 0');
    15.     fputcsv($fp, $headers);
    16.     while ($row = $result->fetch_array(MYSQLI_NUM)) {
    17.         fputcsv($fp, array_values($row));
    18.     }
    19.     die;
    20. }
    21.  
    22. function mysqli_field_name($result, $field_offset)
    23. {
    24.     $properties = mysqli_fetch_field_direct($result, $field_offset);
    25.     return is_object($properties) ? $properties->name : null;
    26. }
     
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @scared1995, для беспроблемного использования сформированного csv файла в Excel - добавь соответствующий BOM.
    Либо открывай файл через импорт. Тогда он предложит выбрать кодировку.
     
  3. twim32

    twim32 Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    Обратите внимание на 4ую строку, и сделайте так же.

    PHP:
    1. function save(string $filename, bool $headers = null, $delimiter = ";", $enclosure = '"', $escape_char = "\\")
    2. {
    3.     $fp = fopen($filename, 'w');
    4.     fputs($fp, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
    5.  
    6.     if($headers === true) {
    7.         fputcsv($fp, $this->headers, $delimiter, $enclosure, $escape_char);
    8.     }
    9.     foreach ($this->data as $fields) {
    10.         fputcsv($fp, $fields, $delimiter, $enclosure, $escape_char);
    11.     }
    12.  
    13.     fclose($fp);
    14. }
     
    scared1995 нравится это.
  4. scared1995

    scared1995 Новичок

    С нами с:
    14 авг 2020
    Сообщения:
    6
    Симпатии:
    1
    спасибо большое, помогло
     
  5. Satger

    Satger Активный пользователь

    С нами с:
    19 апр 2020
    Сообщения:
    72
    Симпатии:
    1
    Забей на Windozze, которая до сих пор не понимает unicode.