2016-10-19 4 views
2

Я хранится файл .csv в этой директории Laravel 5:Читать .csv файл в массив в Laravel

/storage/app/data.csv

Внутри этой функции я пытаюсь прочитать содержимое этого файла и извлечь несколько столбцов из него, как имя и город массива, пример кода:

use Illuminate\Support\Facades\Storage; 

public function get_data() { 

$file_n = Storage::url('data.csv'); 
$file = fopen($file_n, "r"); 
$all_data = array(); 
while (($data = fgetcsv($file, 200, ",")) !==FALSE { 

    $name = $data[0]; 
    $city = $data[1]; 
    $all_data = $name. " ".$city; 

    array_push($array, $all_data); 
    } 
    fclose($file); 
} 

Я получаю ErrorException в контроллере:

fopen(/storage/data.csv): failed to open stream: No such file or directory 

Но файл есть. Есть ли лучший способ сделать это вместо этого?

Спасибо, что посмотрели!

+1

Попробуйте с 'storage_path ('data.csv «)'. – xpuc7o

+2

'/ storage/app/data.csv'! ='/Storage/data.csv' –

ответ

0

Я понял это, используя «base_path».

... 
$filename = base_path('/storage/app/data.csv'); 
$file = fopen($filename, "r"); 
$all_data = array(); 
while (($data = fgetcsv($file, 200, ",")) !==FALSE { 
... 

Спасибо!

4

Ваша проблема связана с тем, как указывали предыдущие люди.

Вы можете использовать вспомогательную функцию storage_path https://laravel.com/docs/5.3/helpers#method-storage-path

В вашем случае это будет использоваться, как это:

storage_path('app/data.csv'); 

В Рекомендации для вы можете использовать этот libary для работы с файлами CSV/Excel, он довольно прост в использовании: https://github.com/Maatwebsite/Laravel-Excel

0

Я решил эту проблему, добавив ключ url в конфигурацию моего локального диска в config/filesystems.php, например:

'local' => [ 
     'driver' => 'local', 
     'root' => storage_path('app'), 
     'url' => storage_path('app') 
    ], 

Теперь я могу ссылаться кладовки :: URL ('Filename.txt') и возвращает:

/home/josh/apps/storage/app/filename.txt 
0

Попробуйте ниже

$file_n = Storage::get('data.csv'); 
Смежные вопросы