Допустим, у меня есть база данных .... есть ли способ экспортировать то, что у меня есть, из базы данных в файл CSV (и текстовый файл [если возможно]) через PHP?
на локальном сервере он работает, но на удаленном он отображает новую страницу с контентом и окном загрузки (извините за мой английский)
khaled_webdev
2
Причин возникновения ошибок может быть несколько, самый простой способ их найти - посмотреть на файл apache error.log.
Ален Тьембло
7
Вам нужно die();позвонить сразу после того echo array2csv();, как отредактируете мой ответ. Не забудьте сгенерировать CSV, прежде чем выводить что-то на свою страницу.
Ален Тьембло
1
@ ring0 Я полагаю, что установка последней даты в заголовке отключает кэширование страницы, посмотрите на 2-й пример php.net/manual/en/function.header.php
Абхишек Мадхани,
2
Предоставляет MIME-типы в ваш браузер, так что вы получите модальный файл загрузки вместо CSV-файла, отображаемого в текущем окне.
Ален Тьембло
32
Вы можете экспортировать дату с помощью этой команды.
Или вы можете выполнить fputcsv () в стандартном цикле извлечения и извлечь его из возвращаемых результатов.
DampeS8N
10
@ DampeS8N, +1 за использование в предложении слова "шлепни прямо вниз".
AnchovyLegend
это скопировано без указания авторства из руководства по PHP для fputcsv
BenK
14
Просто для справки: конкатенация - это ваааааай быстрее (я имею в виду), чем fputcsvили даже implode; И размер файла меньше:
// The data from Eternal Oblivion is an object, always
$values =(array) fetchDataFromEternalOblivion($userId, $limit =1000);// ----- fputcsv (slow)// The code of @Alain Tiemblo is the best implementation
ob_start();
$csv = fopen("php://output",'w');
fputcsv($csv, array_keys(reset($values)));foreach($values as $row){
fputcsv($csv, $row);}
fclose($csv);return ob_get_clean();// ----- implode (slow, but file size is smaller)
$csv = implode(",", array_keys(reset($values))). PHP_EOL;foreach($values as $row){
$csv .='"'. implode('","', $row).'"'. PHP_EOL;}return $csv;// ----- concatenation (fast, file size is smaller)// We can use one implode for the headers =D
$csv = implode(",", array_keys(reset($values))). PHP_EOL;
$i =1;// This is less flexible, but we have more control over the formattingforeach($values as $row){
$csv .='"'. $row['id'].'",';
$csv .='"'. $row['name'].'",';
$csv .='"'. date('d-m-Y', strtotime($row['date'])).'",';
$csv .='"'.($row['pet_name']?:'-').'",';
$csv .= PHP_EOL;}return $csv;
Это вывод из оптимизации нескольких отчетов, от десяти до тысяч строк. Три примера работали нормально при 1000 строках, но не работали, когда данные были больше.
Ответы:
Я лично использую эту функцию для создания контента CSV из любого массива.
Затем вы можете заставить своего пользователя загрузить этот файл, используя что-то вроде:
Пример использования:
источник
die();
позвонить сразу после тогоecho array2csv();
, как отредактируете мой ответ. Не забудьте сгенерировать CSV, прежде чем выводить что-то на свою страницу.Вы можете экспортировать дату с помощью этой команды.
Сначала вы должны загрузить данные с сервера MySQL в массив
источник
Просто для справки: конкатенация - это ваааааай быстрее (я имею в виду), чем
fputcsv
или дажеimplode
; И размер файла меньше:Это вывод из оптимизации нескольких отчетов, от десяти до тысяч строк. Три примера работали нормально при 1000 строках, но не работали, когда данные были больше.
источник
Я рекомендую parsecsv-for-php, чтобы обойти ряд проблем с вложенными символами новой строки и кавычками.
источник
Работает с более чем 100 строками, если вы укажете размер файла в заголовках, просто вызовите метод get () в своем собственном классе
источник
готовый код прилагается здесь. Вы можете использовать его, просто скопировав и вставив в свой код:
https://gist.github.com/umairidrees/8952054#file-php-save-db-table-as-csv
источник
Как сказал @ Dampes8N:
Надеюсь это поможет.
источник