Задать вопрос
blood-moon
@blood-moon
Фрилансер

Как обрабатывать файл полученный пост запросом правильно?

Через форму гружу текстовый файл , нужно обработать его построчно , некоторые строки записать в бд а остальные просто пропустить .
Сейчас вижу только вариант
1. Сохранять файл на сервере
2. Читаем построчно , обрабатываем строки
3. удаляем файл

Но можно ли как-то не сохранять файл на сервере ? В памяти его прочитать или ещё как . Просто пока мне кажется мой метод костылём каким-то
  • Вопрос задан
  • 142 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
zkrvndm
@zkrvndm
Архитектор решений
Вероятно вы вообще не изучали тему. Когда на PHP обработчик поступает запрос из браузера в кодировке multipart/form-data, то все полученные файлы автоматически записываются во временную директорию, а ссылки эти файлы добавляются в суперглобальный массив $_FILES.

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

Иными словами, вам абсолютно ни что не мешает сразу при получении файла прочесть его содержимое из временной директории при помощи file_get_contents и потом делать с ним что хотите. Можете сохранить, а можете ничего не делать, тогда файл из временной директории автоматом сотрется потом.

P. S. Я хочу сказать, что при получении файла файл сохраняется на сервере автоматом, пусть и во временную директорию. Это ключевой момент, который вы похоже не поняли. Удаляется он потом тоже автоматом.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Когда вы загрузили файл, он уже сохранился.
$tmp = $_FILES['file']['tmp_name'];
Дальше открываете файл .
Сразу же вызываете unlink
В системе его уже нет, но пока дескриптор не освободится вы сможете с ним работать
Ответ написан
@alexalexes
Именно так, как вы описали.
Вообще, если вы используете нативные возможности серверного окружения для приема, передачи, чтения, записи данных по средством файлов, то вы должны морально готовы написать код так, чтобы минимальными ресурсами оперативной памяти (десятки мегабайт) перерабатывать объем данных (сотни мегабайт, гигабайты), расположенный в файлах, кратно превышаемый объем этой оперативной памяти, выделенной для выполнения скрипта.
Поэтому, читать файлы вам в любом случае построчно (еще правильнее - поблочно, с ограничением макс. длины блока), и при обработки блока постоянно вспоминать, а сколько оперативной памяти кушается при получении данных из файла (делать отладку с профилированием памяти), передачи их в функции и методы обработки, до записи результата. Также научитесь вовремя очищать тяжеловесные переменные (внезапно unset окажется не так уж бесполезен).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы