Codeigniter принудительно скачать файл CSV ошибка - PullRequest
2 голосов
/ 18 мая 2011

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

например Перед принудительной загрузкой

"name","age",<br/>
"brad pit","40",`

После принудительной загрузки

<br/>
"name","age",<br/>
"brad pit","40",

CSV-файл, который я скачал, и я пытаюсь открыть его с моим Excel, будет выглядеть так
"имя" | возраст
Брэд Пит | 40

Я считаю, что из-за скачанного мной файла csv в первой строке данных появилась строка внешнего пространства.

Вот код

//write csv data
$data = $this->dbutil->csv_from_result($query, $delimiter);
//create random file name
$name = rand().'_salesperson_data_'.date('d-m-y').'.csv';

if ( ! write_file('./csv/'.$name, $data))
{
     echo 'Unable to write the CSV file';
}
else
{
    //perform download
    $file = file_get_contents("./csv/".$name); // Read the file's contents
    $filename = 'salesperson_data_'.date('d-m-y').'.csv';
    force_download($filename, $file);
}

источник force_download ()

if ( ! function_exists('force_download'))
{
    function force_download($filename = '', $data = '')
    {

        if ($filename == '' OR $data == '')
        {
            return FALSE;
        }

        // Try to determine if the filename includes a file extension.
        // We need it in order to set the MIME type
        if (FALSE === strpos($filename, '.'))
        {
            return FALSE;
        }

        // Grab the file extension
        $x = explode('.', $filename);
        $extension = end($x);

        // Load the mime types
        @include(APPPATH.'config/mimes'.EXT);

        // Set a default mime if we can't find it
        if ( ! isset($mimes[$extension]))
        {
            $mime = 'application/octet-stream';
        }
        else
        {
            $mime = (is_array($mimes[$extension])) ? $mimes[$extension][0] : $mimes[$extension];
        }

        // Generate the server headers
        if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
        {
            header('Content-Type: "'.$mime.'"');
            header('Content-Disposition: attachment; filename="'.$filename.'"');
            header('Expires: 0');
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            header("Content-Transfer-Encoding: binary");
            header('Pragma: public');
            header("Content-Length: ".strlen($data));
        }
        else
        {
            header('Content-Type: "'.$mime.'"');
            header('Content-Disposition: attachment; filename="'.$filename.'"');
            header("Content-Transfer-Encoding: binary");
            header('Expires: 0');
            header('Pragma: no-cache');
            header("Content-Length: ".strlen($data));
        }

        exit($data);
    }
}

Я думал, что TRIM будет для меня последним решением, и я стараюсь делать все возможное, но все равно. Я не мог найти решение этой проблемы. Пожалуйста помоги. это застряло у меня уже 2 дня.

Спасибо заранее.

Ответы [ 3 ]

1 голос
/ 26 апреля 2012

попробуйте распечатать в браузере, если вы видите дополнительное место, затем удалите.

если при загрузке дополнительный файл все еще находится в csv-файле, то этот дополнительный объем берется из любого вашего включаемого файла.

когда вы начинаете писать свой код, постарайтесь не оставлять места сверху / снизу кода.

1 голос
/ 25 июня 2011

Я не знаю, нужно ли использовать только CSV, но вот хороший плагин / функция, которую я использую: http://codeigniter.com/wiki/Excel_Plugin/

Работает с системой CodeIgniter Query для экспорта материалов в Excel. Я часто им пользуюсь и никогда не испытываю проблем с этим.

0 голосов
/ 13 мая 2015

Используйте ob_clean(); перед написанием CSV для удаления пробелов.

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