Преобразование таблицы в CSV

#php #ajax #csv #export-to-csv

#php #ajax #csv #экспорт в CSV

Вопрос:

Я использую str_get_html http://simplehtmldom.sourceforge.net / для экспорта HTML-таблицы в CSV. Пользователь заполняет форму, и на экране отображается та же таблица. Если они устанавливают флажок формы, я бы хотел, чтобы он также генерировал файл CSV для загрузки (в дополнение к отображению таблицы на экране).

Используя ajax, у меня таблица отображается в пустом элементе div.

 <script type="text/javascript">
    $(document).ready(function() {  
    var options = {target: '#output1'}; 
    $('#completed').ajaxForm(options);});  
</script>
  

Это почти работает. Единственная проблема заключается в том, что он отображает содержимое CSV в обновлении div, а не генерирует файл для загрузки. Если я удалю отображение таблицы на экране и удалю функциональность ajax, он отлично сгенерирует файл CSV. Может ли кто-нибудь помочь мне с приведенным ниже кодом, чтобы он сгенерировал файл для загрузки?

     include 'simple_html_dom.php';

    $html = str_get_html($table);
    header('Content-type: application/ms-excel');
    header('Content-Disposition: attachment; filename=sample.csv');

    $fp = fopen("php://output", "w");

    foreach($html->find('tr') as $element)
    {
        $td = array();
        foreach( $element->find('th') as $row)  
        {
            $td [] = $row->plaintext;
        }
        fputcsv($fp, $td);

        $td = array();
        foreach( $element->find('td') as $row)  
        {
            $td [] = $row->plaintext;
        }
        fputcsv($fp, $td);
    }

    fclose($fp);
  

Ответ №1:

Вместо использования «php: // output» вам нужно использовать путь / имя файла. Прямо сейчас вы указываете php на запись в механизм выходного буфера.

Например:

 $fp = fopen("path/to/filename.csv", "w");