Как загрузить и проанализировать CSV-файл в php

Я хочу загрузить файл csv с php. После того, как файл загружен, я хочу отобразить данные файла CSV. Я хотел бы привести пример выполнения этой задачи.

Solutions Collecting From Web of "Как загрузить и проанализировать CSV-файл в php"

Хотя вы можете легко найти учебник по обработке файлов с помощью php, и есть функции (руководство) для обработки CSV, я отправлю код, потому что всего несколько дней назад я работал над проектом, включая немного кода, который вы могли бы использовать использовать …

HTML:

 <table width="600"> <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data"> <tr> <td width="20%">Select file</td> <td width="80%"><input type="file" name="file" id="file" /></td> </tr> <tr> <td>Submit</td> <td><input type="submit" name="submit" /></td> </tr> </form> </table> 

PHP:

 if ( isset($_POST["submit"]) ) { if ( isset($_FILES["file"])) { //if there was an error uploading the file if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; } else { //Print file details echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; //if file already exists if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { //Store file in directory "upload" with the name of "uploaded_file.txt" $storagename = "uploaded_file.txt"; move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $storagename); echo "Stored in: " . "upload/" . $_FILES["file"]["name"] . "<br />"; } } } else { echo "No file selected <br />"; } } 

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

 if ( $file = fopen( "upload/" . $storagename , r ) ) { echo "File opened.<br />"; $firstline = fgets ($file, 4096 ); //Gets the number of fields, in CSV-files the names of the fields are mostly given in the first line $num = strlen($firstline) - strlen(str_replace(";", "", $firstline)); //save the different fields of the firstline in an array called fields $fields = array(); $fields = explode( ";", $firstline, ($num+1) ); $line = array(); $i = 0; //CSV: one line is one record and the cells/fields are seperated by ";" //so $dsatz is an two dimensional array saving the records like this: $dsatz[number of record][number of cell] while ( $line[$i] = fgets ($file, 4096) ) { $dsatz[$i] = array(); $dsatz[$i] = explode( ";", $line[$i], ($num+1) ); $i++; } echo "<table>"; echo "<tr>"; for ( $k = 0; $k != ($num+1); $k++ ) { echo "<td>" . fields[$k] . "</td>"; } echo "</tr>"; foreach ($dsatz as $key => $number) { //new table row for every record echo "<tr>"; foreach ($number as $k => $content) { //new table cell for every field of the record echo "<td>" . $content . "</td>"; } } echo "</table>"; } 

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

Это можно сделать гораздо более просто.

 $tmpName = $_FILES['csv']['tmp_name']; $csvAsArray = array_map('str_getcsv', file($tmpName)); 

Это вернет вам проанализированный массив данных CSV. Затем вы можете просто пропустить его, используя инструкцию foreach.

непроверенный, но должен дать вам эту идею. вид:

 <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="csv" value="" /> <input type="submit" name="submit" value="Save" /></form> 

Контроллер upload.php:

 $csv = array(); // check there are no errors if($_FILES['csv']['error'] == 0){ $name = $_FILES['csv']['name']; $ext = strtolower(end(explode('.', $_FILES['csv']['name']))); $type = $_FILES['csv']['type']; $tmpName = $_FILES['csv']['tmp_name']; // check the file is a csv if($ext === 'csv'){ if(($handle = fopen($tmpName, 'r')) !== FALSE) { // necessary if a large csv file set_time_limit(0); $row = 0; while(($data = fgetcsv($handle, 1000, ',')) !== FALSE) { // number of fields in the csv $col_count = count($data); // get the values from the csv $csv[$row]['col1'] = $data[0]; $csv[$row]['col2'] = $data[1]; // inc the row $row++; } fclose($handle); } } } 

Вы хотите, чтобы в разделе руководства по загрузке файлов был загружен файл руководства, и вам также следовало бы взглянуть на fgetcsv () и explode ().

Вы можете попробовать:

 function doParseCSVFile($filesArray) { if ((file_exists($filesArray['frmUpload']['name'])) && (is_readable($filesArray['frmUpload']['name']))) { $strFilePath = $filesArray['frmUpload']['tmp_name']; $strFileHandle = fopen($strFilePath,"r"); $line_of_text = fgetcsv($strFileHandle,1024,",","'"); $line_of_text = fgetcsv($strFileHandle,1024,",","'"); do { if ($line_of_text[0]) { $strInsertSql = "INSERT INTO tbl_employee(employee_name, employee_code, employee_email, employee_designation, employee_number)VALUES('".addslashes($line_of_text[0])."', '".$line_of_text[1]."', '".addslashes($line_of_text[2])."', '".$line_of_text[3]."', '".$line_of_text[4]."')"; ExecuteQry($strInsertSql); } } while (($line_of_text = fgetcsv($strFileHandle,1024,",","'"))!== FALSE); } else { return FALSE; } } 

Привет, я чувствую str_getcsv – Разбираем строку CSV в массив – лучший вариант для u. 1. Вам нужно загрузить файл, чтобы разделить 2. проанализировать файл с помощью str_getcsv. 3. Пройдите через массив и выровняйте в соответствии с потребностью на веб-сайте ur.

 function doParseCSVFile($filesArray) { if ((file_exists($filesArray['frmUpload']['name'])) && (is_readable($filesArray['frmUpload']['name']))) { $strFilePath = $filesArray['frmUpload']['tmp_name']; $strFileHandle = fopen($strFilePath,"r"); $line_of_text = fgetcsv($strFileHandle,1024,",","'"); $line_of_text = fgetcsv($strFileHandle,1024,",","'"); do { if ($line_of_text[0]) { $strInsertSql = "INSERT INTO tbl_employee(employee_name, employee_code, employee_email, employee_designation, employee_number)VALUES('".addslashes($line_of_text[0])."', '".$line_of_text[1]."', '".addslashes($line_of_text[2])."', '".$line_of_text[3]."', '".$line_of_text[4]."')"; ExecuteQry($strInsertSql); } } while (($line_of_text = fgetcsv($strFileHandle,1024,",","'"))!== FALSE); } else { return FALSE; } }