export import laravel

77
07 апреля 2021, 04:10

Не могу импортировать файл взятый с экспорта csv. Проблема в кодировке

Мой экспорт:

public function export2($id)
{
    $userid = Auth::id();
    $headers = array(
        "Content-type" => "text/csv",
        "Content-Disposition" => "attachment; filename=file.csv",
        "Pragma" => "no-cache",
        "Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
        "Expires" => "0"
    );
    $filename = "test2.csv";
    $reviews = DB::select("select * from profile_parameters_p where profile_id = " . $id);
    $columns = array('ReviewID', 'Provider', 'Title', 'Review', 'Location', 'Created', 'Anonymous', 'Escalate', 'Rating', 'Name');
    $callback = function() use ($reviews, $columns)
    {
        $file = fopen('php://output', 'w');
        fputcsv($file, $columns);
        foreach($reviews as $review) {
            fputcsv($file, array(iconv('utf-8', 'windows-1251',$review->name)));
        }
        fclose($file);
    };
    return Response::download($filename, 'test.csv', $headers);
}

Мой импорт:

    public function uploadFile(Request $request){
    if ($request->input('submit') != null ){
      $file = $request->file('file');
      $profile_id = $request->input('profile_id');
      // File Details 
      $filename = $file->getClientOriginalName();
      $extension = $file->getClientOriginalExtension();
      $tempPath = $file->getRealPath();
      $fileSize = $file->getSize();
      $mimeType = $file->getMimeType();
      // Valid File Extensions
      $valid_extension = array("csv");
      // dd($valid_extension);
      // 2MB in Bytes
      $maxFileSize = 2097152; 
      // Check file extension
      if(in_array(strtolower($extension),$valid_extension)){
        // dd($valid_extension);
        // Check file size
        if($fileSize <= $maxFileSize){
          // File upload location
          $location = 'uploads';
          // Upload file
          $file->move($location,$filename);
          // Import CSV to Database
          $filepath = public_path($location."/".$filename);
          // Reading file
          $file = fopen($filepath,"r");
          // dd($filepath);
          $importData_arr = array();
          // dd($importData_arr);
          $i = 0;
          while (($filedata = fgetcsv($file, 1000, ",")) !== FALSE) {
            // dd($filedata);
             $num = count($filedata );
            //  dd($num);
             // Skip first row (Remove below comment if you want to skip the first row)
             /*if($i == 0){
                $i++;
                continue; 
             }*/
             for ($c=0; $c < $num; $c++) {
                $importData_arr[$i][] = $filedata [$c];
                // dd($filedata);
             }
             $i++;
          }
          fclose($file);
          // dd($importData_arr);
          // Insert to MySQL database
          foreach($importData_arr as $importData){
            // dd($importData_arr);
            $insertData = array(
              //  "username"=>$importData[1],
              //  "name"=>$importData[2],
              //  "gender"=>$importData[3],
              "profile_id"=>$profile_id,
              //  "name"=>$test = dd(mb_detect_encoding($importData[0])),
            // "name"=>iconv("WINDOWS-1251", "UTF-8",$importData[0])
            // "name"=>$importData[0]
            "name"=>iconv("WINDOWS-1251", "UTF-8",$importData[0])
            );
            Plus::insertData($insertData);
            // if (!Plus::query()->where('name', $insertData['name'])->exists()) {
            //   Plus::query()->create(['profile_id' => Auth::id()]);
            // }
          }
          Session::flash('message','Import Successful.');
        }else{
          Session::flash('message','File too large. File must be less than 2MB.');
        }
      }else{
         Session::flash('message','Invalid File Extension.');
      }
    }
    // Redirect to index
    return redirect()->back();
}

Моя кодировка

READ ALSO
Как правильно сделать foreach?

Как правильно сделать foreach?

Сразу извиняюсь если вопрос глупый, возможно я не так гуглил

103
Обход последнего прохода цикла php

Обход последнего прохода цикла php

Вот примерная схема цикла:

120
Не получается передать объекты в массив

Не получается передать объекты в массив

Почему нельзя передать объекты в массив подобным образом?

103
Разница между Collections.sort() и сортировкой стримом

Разница между Collections.sort() и сортировкой стримом

Я пишу программу, которая выстраивает пирамиду из отсортированных чисел и возвращает двумерный массив

106