PHP выводит MS SQL в загружаемый файл CSV или Excel - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь вывести данные, возвращаемые запросом MS SQL, в файл Excel или CSV с PHP.Я использовал скрипт в этом ответе и могу вывести файл ОК.Без строк заголовка (внизу моего кода) он сохраняется в структуре папок моего сервера, а не выводится в виде загрузки в браузер.

Если я добавляю строки заголовка, он выводится в файл CSV, но записывает HTML-код страницы в файл, а не в извлечение из базы данных!Я что-то пропустил?Я попытался запустить код на странице без HTML (только код PHP и SQL), но это все еще происходит.

        // Give the file a suitable name:
            $FileName= $PartNumber.".csv";
            $fp = fopen($FileName, 'w');
        // Connect to MS SQL server; the actual database is chosen in the form
        // ConnSQL defined in inc/dbconn/config.php
            ConnSQL($idDatabase);

        // the query is a biggie; here it is:
            require 'inc_sql.php';

        // run it through the SQL server
            $rstBOM = sqlsrv_query($GLOBALS['ConnSQL'], $sqlBOM);

        while ($export= sqlsrv_fetch_array($rstBOM, SQLSRV_FETCH_ASSOC)) {
            if (!isset($headings))
                {
                    $headings = array_keys($export);
                    fputcsv($fp, $headings, ',', '"');
                }
                fputcsv($fp, $export, ',', '"');
            }

        // force download csv - exports HTML to CSV!
            header("Content-type: application/force-download"); 
            header('Content-Disposition: inline; filename="'.$FileName.'"'); 
            header("Content-Transfer-Encoding: Binary"); 
            header("Content-length: ". filesize($FileName)); 
            header('Content-Type: application/excel'); 
            header('Content-Disposition: attachment; filename="'.$FileName.'"');

            fclose($fp);

Есть идеи, где я ошибаюсь, пожалуйста?

1 Ответ

0 голосов
/ 19 февраля 2019

Вам нужно вывести свой CSV-файл в браузер, просто поставив

readfile($FileName);

в конце кода после функции fclose($fp);.

В противном случае браузер получает заголовкидля файлов, но без содержимого, отправленного из вашего PHP-кода.

Вы также можете сгенерировать свой CSV-файл на лету и просто echo $csvFileContents;.Это не позволит серверу создавать и записывать данные в файл, что может привести к нарушениям безопасности.

Удачи!

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