php создать csv файл и отдать на скачивание

Как создать и загрузить csv-файл из php-скрипта?

Я начинающий программист, и я много искал о своем вопросе, но не смог найти полезного решения или учебника об этом.

моя цель-у меня есть массив PHP, и элементы массива отображаются в списке на странице.

Я хочу добавить опцию, чтобы, если пользователь хочет, он / она мог создать CSV-файл с элементами массива и загрузить его.

Я не знаю, как это делать. Я тоже много искал. Но все же найти какой-либо полезный ресурс.

пожалуйста, предоставьте мне учебник или решение или совет, чтобы реализовать его самостоятельно. Поскольку я новичок, пожалуйста, предоставьте простые в реализации решения.

мой массив выглядит так:

5 ответов

вы можете использовать встроенный в fputcsv() для ваших массивов для генерации правильных строк csv из вашего массива, поэтому вам придется перебирать и собирать строки. например:

чтобы браузеры предлагали диалог «Сохранить как», вам нужно будет отправить HTTP-заголовки (подробнее об этом заголовке см. в rfc):

собираем все вместе:

и вы можете использовать его как это:

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

у меня недостаточно репутации, чтобы ответить на решение @complex857. Он отлично работает, но я должен был добавить ; в конце заголовка Content-Disposition. Без него браузер добавляет две тире в конце имени файла (например, вместо » export.csv «файл сохраняется как» экспорт.csv—«). Вероятно, он пытается санировать \r\n в конце строки заголовка.

правильная строка должна выглядеть так:

в случае, если в CSV есть символы UTF-8, вам нужно изменить кодировка в UTF-8 путем изменения строки типа содержимого:

кроме того, я считаю более элегантным использовать rewind () вместо fseek ():

Источник

CSV файлы на PHP — создание и чтение

Формат CSV

Чтобы понимать суть вещей, нужно разобраться в спецификации CSV файлов, как устроен формат. Давайте коротко.

CSV (Comma-Separated Values — значения, разделённые запятыми) — текстовый формат, предназначенный для представления табличных данных.

Каждая строка файла — это одна строка таблицы.

Это все что нужно знать, чтобы работать с CSV!

Пример для рус. языка:

php создать csv файл и отдать на скачивание. Смотреть фото php создать csv файл и отдать на скачивание. Смотреть картинку php создать csv файл и отдать на скачивание. Картинка про php создать csv файл и отдать на скачивание. Фото php создать csv файл и отдать на скачивание

Пример для англ. языка:

php создать csv файл и отдать на скачивание. Смотреть фото php создать csv файл и отдать на скачивание. Смотреть картинку php создать csv файл и отдать на скачивание. Картинка про php создать csv файл и отдать на скачивание. Фото php создать csv файл и отдать на скачивание

Wiki-справка

Большинство программ под CSV понимают более общий формат DSV (delimiter-separated values — значения разделённые разделителем), допускающий использование иных символов в качестве разделителя. В частности, в русской и других локалях запятая по умолчанию зарезервирована под десятичный разделитель. Поэтому как разделитель используется точка с запятой или табуляция (формат TSV).

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

Создание CSV файла в PHP

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

Важным моментом, является кодировка файла. Для корректного отображения кириллицы следует использовать кодировку cp1251 (windows-1251).

Разделитель колонок
Разделитель строк

Также, для разделения строки, может использоваться просто \n (перенос строки, LF). В этом случае, перенос строки внутри значения колонки должен обозначаться как \r (возврат каретки CR).

Функция для создания CSV файла

php создать csv файл и отдать на скачивание. Смотреть фото php создать csv файл и отдать на скачивание. Смотреть картинку php создать csv файл и отдать на скачивание. Картинка про php создать csv файл и отдать на скачивание. Фото php создать csv файл и отдать на скачивание меню

Чтение CSV файла в PHP

Вариант на базе функции str_getcsv() :

php создать csv файл и отдать на скачивание. Смотреть фото php создать csv файл и отдать на скачивание. Смотреть картинку php создать csv файл и отдать на скачивание. Картинка про php создать csv файл и отдать на скачивание. Фото php создать csv файл и отдать на скачивание

Если такую конвертацию нужно сделать программно, смотрите в сторону онлайн конвертеров с API или готовых библиотек.

Сталкивались с такой задачей и знаете более универсальный способ? Прошу поделиться в комментариях.

php создать csv файл и отдать на скачивание. Смотреть фото php создать csv файл и отдать на скачивание. Смотреть картинку php создать csv файл и отдать на скачивание. Картинка про php создать csv файл и отдать на скачивание. Фото php создать csv файл и отдать на скачивание

Тема, конечно, интересная. Только этот код в реальных условиях работать не будет.

php создать csv файл и отдать на скачивание. Смотреть фото php создать csv файл и отдать на скачивание. Смотреть картинку php создать csv файл и отдать на скачивание. Картинка про php создать csv файл и отдать на скачивание. Фото php создать csv файл и отдать на скачивание

php создать csv файл и отдать на скачивание. Смотреть фото php создать csv файл и отдать на скачивание. Смотреть картинку php создать csv файл и отдать на скачивание. Картинка про php создать csv файл и отдать на скачивание. Фото php создать csv файл и отдать на скачивание

1) Разделитель поля может быть любой. Например, ‘\’, ‘|’ или ещё что похуже.
2) Символ ограничителя поля может быть как двойная, так и одинарная ковычка.
3) Неплохо бы использовать unset в коде. Память на сервере всё-таки не резиновая. Одно дело загрузка файла с пару сотен строк кода, а другое если их пару десятков миллионов.

php создать csv файл и отдать на скачивание. Смотреть фото php создать csv файл и отдать на скачивание. Смотреть картинку php создать csv файл и отдать на скачивание. Картинка про php создать csv файл и отдать на скачивание. Фото php создать csv файл и отдать на скачивание

2) Для текущего кода (обоих) это учитывается: в первом создается строка с двойной кавычкой и только. Во втором строка парсится PHP функцией str_getcsv() которая обе кавычки понимает.

3) В каком месте там unset по твоему поможет хорошо избавится от потерь памяти? Если у тебя файл выходит за пределы памяти, что редкость с текущими параметрами серверов, то это пожалуй экстра случай и подход уже нужен будет принципиально другой. Файл читать или записывать нужно будет частями или построчно, а не так целиком. По аналогии ты в ВП запихай 50 000 рубрик и все приехали, нужно будет костыли вставлять для нормальной работы. Но ВП почему-то самая популярная CMS, как же так? Я не писал код на все случаи жизни, код покрывает 80% случаев, остальное уже требует отдельного подхода, а этот код можно взять за основу.

Этот код в реальных условиях у меня работает! Может там и есть баги, но я их не встречал.

П.С. просмотрел второй код, добавил unset() маловероятно что много толку от этого, но лишним не будет.

php создать csv файл и отдать на скачивание. Смотреть фото php создать csv файл и отдать на скачивание. Смотреть картинку php создать csv файл и отдать на скачивание. Картинка про php создать csv файл и отдать на скачивание. Фото php создать csv файл и отдать на скачивание

Не «суй туда какой угодно разделитель», а все возможные разделители для csv файлов. Ты бы ещё менеджеру предложил указывать разделитель для файла, который он загружает php создать csv файл и отдать на скачивание. Смотреть фото php создать csv файл и отдать на скачивание. Смотреть картинку php создать csv файл и отдать на скачивание. Картинка про php создать csv файл и отдать на скачивание. Фото php создать csv файл и отдать на скачивание

«с текущими параметрами серверов». Поверь, кривым кодом можно положить сервер даже с очень хорошими характеристиками. Я обычно беру за правило, если переменная больше не будет использоваться она должна умереть (или обнулиться). Когда поработаешь с хайлоудом, то начинаешь понимать цену памяти)

И вообще, если пишешь рабочую программу, нужно это делать хорошо, а не в стиле «мой первый скрипт»!

php создать csv файл и отдать на скачивание. Смотреть фото php создать csv файл и отдать на скачивание. Смотреть картинку php создать csv файл и отдать на скачивание. Картинка про php создать csv файл и отдать на скачивание. Фото php создать csv файл и отдать на скачивание

Демогогия это, ты реальную проблему покажи, так я её не вижу. php создать csv файл и отдать на скачивание. Смотреть фото php создать csv файл и отдать на скачивание. Смотреть картинку php создать csv файл и отдать на скачивание. Картинка про php создать csv файл и отдать на скачивание. Фото php создать csv файл и отдать на скачивание

П.С. я люблю стиль «мой первый скрипт». Этот сайт как раз в таком стиле написан, пока все устраивает php создать csv файл и отдать на скачивание. Смотреть фото php создать csv файл и отдать на скачивание. Смотреть картинку php создать csv файл и отдать на скачивание. Картинка про php создать csv файл и отдать на скачивание. Фото php создать csv файл и отдать на скачивание

php создать csv файл и отдать на скачивание. Смотреть фото php создать csv файл и отдать на скачивание. Смотреть картинку php создать csv файл и отдать на скачивание. Картинка про php создать csv файл и отдать на скачивание. Фото php создать csv файл и отдать на скачивание

Важным моментом, является кодировка файла. Для корректного отображения кириллицы следует использовать кодировку cp1251 (windows-1251).

Источник

How to create and download a csv file from php script?

I am a novice programmer and I searched a lot about my question but couldn’t find a helpful solution or tutorial about this.

My goal is I have a PHP array and the array elements are showing in a list on the page.

I want to add an option, so that if a user wants, he/she can create a CSV file with array elements and download it.

I don’t know how to do this. I have searched a lot too. But yet to find any helpful resource.

Please provide me some tutorial or solution or advice to implement it by myself. As I’m a novice please provide easy to implement solutions.

My array looks like:

php создать csv файл и отдать на скачивание. Смотреть фото php создать csv файл и отдать на скачивание. Смотреть картинку php создать csv файл и отдать на скачивание. Картинка про php создать csv файл и отдать на скачивание. Фото php создать csv файл и отдать на скачивание

6 Answers 6

You can use the built in fputcsv() for your arrays to generate correct csv lines from your array, so you will have to loop over and collect the lines, like this:

To make the browsers offer the «Save as» dialog, you will have to send HTTP headers like this (see more about this header in the rfc):

Putting it all together:

And you can use it like this:

Update:
Instead of the php://memory you can also use the php://output for the file descriptor and do away with the seeking and such:

I don’t have enough reputation to reply to @complex857 solution. It works great, but I had to add ; at the end of the Content-Disposition header. Without it the browser adds two dashes at the end of the filename (e.g. instead of «export.csv» the file gets saved as «export.csv—«). Probably it tries to sanitize \r\n at the end of the header line.

Correct line should look like this:

In case when CSV has UTF-8 chars in it, you have to change the encoding to UTF-8 by changing the Content-Type line:

Also, I find it more elegant to use rewind() instead of fseek():

Источник

Создание CSV-файла для пользователя в PHP

У меня есть данные в базе данных MySQL. Я отправляю пользователю URL-адрес, чтобы получить свои данные в виде CSV-файла.

У меня есть электронная почта ссылки, запроса MySQL и т. д. покрытый.

Как я могу, когда они нажимают ссылку, иметь всплывающее окно для загрузки CVS с записью из MySQL?

20 ответов

Edit: вот фрагмент кода, который я использую для кодирования полей CSV:

вот улучшенная версия функции от php.net это @ Andrew опубликовал.

Он очень прост в использовании и отлично работает с наборами результатов MySQL(i)/PDO.

не забудьте exit() после вызова этого, если вы сделали со страницей.

в дополнение ко всему уже сказанному, вам может потребоваться добавить:

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

нить немного старая, я знаю, но для дальнейшего использования и для noobs как себя:

my_csv_creator.php может работать с переменными, указанными в строке запроса, и, например, использовать различные или настроенные запросы к базе данных, изменять столбцы CSV, персонализировать имя файла и т. д., Например:

вот полный рабочий пример использования PDO и включая заголовки столбцов:

сначала сделайте данные в виде строки с запятой в качестве разделителя (разделенного «,»). Что-то вроде этого!—2—>

Эй, это работает очень хорошо. Спасибо Питеру Мортенсену и Коннору Бертону!—2—>

Источник

Чтение и запись данных в CSV-файл средствами PHP

Обычно, если стоимость создания интернет магазина достаточно высока или имеет большое количество товаров, заказчики просят сделать импорт товаров из их прайс листов. PHP как известно, не умеет работать с Excel-файлами стандартными средствами. Конечно есть множество различных классов и библиотек, которые могут читать и записывать информацию в Excel, но с ними возникает достаточно много проблем и неудобств. Гораздо проще и удобнее работать с CSV-файлами. Предлагаю разобрать простой способ чтения и записи данных в CSV-файл средствами PHP.

Как Вы знаете, CSV — текстовый формат, предназначенный для представления табличных данных. Каждая строка файла — это одна строка таблицы. Значения отдельных колонок разделяются разделительным символом — обычно запятой (,).

Как это работает?

Пример записи данных

После окончания записи, не забываем закрывать дескриптор файла fclose().

Пример чтения данных

С помощью функции fopen() мы пытаемся открыть файл для чтения и, если он есть, построчно заполняем массив данными с помощью функции fgetcsv(). Функция fgetcsv() читает строку из файла и производит разбор данных CSV. Данная функция похожа на функцию fgets(), с той разницей, что она производит анализ строки на наличие записей в формате CSV и возвращает найденные поля в качестве массива. В эту функцию мы передаем такие параметры как корректный файловый указатель на успешно открытый файл, длину строки (обычно указывается длина большая самой длинной строки в файле, в нашем случае мы указываем 0, т.е. длина не ограничена), а также разделитель поля (т.к. в примере для записи мы использовали точку с запятой, то и для чтения будем использовать её).

И опять же, после выполнения чтения из файла не забываем закрывать дескриптор файла fclose().

Список возможных режимов для fopen()

‘r’ — Открывает файл только для чтения; помещает указатель в начало файла.
‘r+’ — Окрывает файл для чтения и записи; помещяет указатель в начало файла.
‘w’ — Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длинны. Если файл не существует — пробует его создать.
‘w+’ — Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длинны. Если файл не существует — пробует его создать.
‘a’ — Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует — пробует его создать.
‘a+’ — Открывает файл для чтения и записи; помещает указатель в конец файла. Если файл не существует — пробует его создать.
‘x’ — Создаёт и открывает только для записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт FALSE и выдаст предупреждение уровня E_WARNING. Если файл не существует, пытается его создать.
‘x+’ — Создаёт и открывает для чтения и записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт FALSE и выдаст предупреждение уровня E_WARNING. Если файл не существует, пытается его создать.

Как видите, мы разобрали лишь теорию, но если вынести чтение из файла и запись в файл отдельными функциями, правильно организовать обработку ошибок, то можно реализовать неплохой функционал по импорту/экспорту товаров в свой интернет магазин с возможностью добавления новых товаров и обновления имеющихся. Самое главное, не забывайте про кодировку импортируемых/экспортируемых данных, а также правильно выбирайте разделитель поля, т.к. бывают ситуации, когда выбранный разделитель может встретиться просто в тексте, который Вы пытаетесь сохранить в CSV-файл, в результате чего все данные в такой строке могут отображаться некорректно.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *