Laravel: Как я могу открыть() файл в локальном каталоге?

#php #laravel #csv #laravel-8

Вопрос:

Я использую Laravel 8.

У меня есть .csv файл, хранящийся в /public/data/object.csv . Я хочу заполнить таблицу, проанализировав этот файл. Этот .csv файл n содержит строки, заключенные в "

Я попытался импортировать .csv непосредственно в MySQL, но я получаю сообщение об ошибке, что у меня меньше полей, необходимых в данной строке. Я проверил с помощью Python, и мой файл в порядке (все записи содержат четыре поля), поэтому я думаю, что это, должно быть, проблема с анализатором .csv MySQL… Поэтому я хочу создать сеялку, которая строчно считывает файл, печатает в консоли, сколько полей у меня есть для данной записи, выполняет синтаксический анализ и создает модели с помощью ORM.

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

Теперь дело в том… как мне получить доступ к .csv файлу?

Я сохранил его в каталоге сеялок, поэтому по глупости подумал, что это сработает:

 //...
class ObjectSeeder extends Seeder
{
  public function run()
  {
    $file = fopen('objetos.csv', 'r');
    // ...
    fclose($file);
  }
}
//...
 

Это вызывает исключение: fopen(objetos.csv): failed to open stream: No such file or directory . Поэтому я изменил файл , в котором должен находиться /public/data , /storage/app/data и не могу получить к ним доступ с помощью таких маршрутов, как ../public/data/objects.csv

Когда файл находится в хранилище, я могу получить к нему доступ через $content = Storage::disk('local')->get('data/schedule.dat'); . Проблема в том, что я не могу разобрать строку с помощью fgetcsv() , потому что это не обработчик файлов. Я не могу разбить файл n на использование str_getcsv() , потому что, как я уже сказал, файл содержит строки с n

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

Комментарии:

1. Любой файл, начинающийся с, / будет искать его в корневом каталоге системы , а не в корневом каталоге проекта. /public/data не будет правильным

2. Я попытался открыть их так ../public/data же, как ./objetos.csv и при хранении в каталоге сеялки, также как public_path('/public/data') и так… Я уже знаю, что ты говоришь, спасибо

3. пробовать fopen(public_path('data/objetos.csv', 'r'));

4. Это правильный ответ… Наконец-то у меня все получилось, большое спасибо!