如何在 CodeIgniter 中使用 CSV 导入库?
How to use CSV import library in CodeIgniter?
我在我的项目文件夹中加载了 csv 库。
使用 this link.
但我不知道我们应该将要上传的 csv 文件保存在哪里,我遇到了以下错误。
错误:
Call to a member function parse_file() on null
我的控制器代码:
function index()
{
$this->load->library('Csvreader');
$filePath = './E:/Test.csv';
$result = $this->Csvreader->parse_file('$filePath');//path to csv file
$data['csvData'] = $result;
$this->load->view('view_csv', $data);
}
我的图书馆代码:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class CI_CsvReader {
var $fields; /** columns names retrieved after parsing */
var $separator = ';'; /** separator used to explode each line */
var $enclosure = '"'; /** enclosure used to decorate each field */
var $max_row_size = 4096; /** maximum row size to be used for decoding */
function parse_file($p_Filepath)
{
$file = fopen($p_Filepath, 'r');
$this->fields = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure);
$keys_values = explode(',',$this->fields[0]);
$content = array();
$keys = $this->escape_string($keys_values);
$i = 1;
while(($row = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure)) != false )
{
if( $row != null ) { // skip empty lines
$values = explode(',',$row[0]);
if(count($keys) == count($values)){
$arr = array();
$new_values = array();
$new_values = $this->escape_string($values);
for($j=0;$j<count($keys);$j++){
if($keys[$j] != ""){
$arr[$keys[$j]] = $new_values[$j];
}
}
$content[$i] = $arr;
$i++;
}
}
}
fclose($file);
return $content;
}
function escape_string($data)
{
$result = array();
foreach($data as $row){
$result[] = str_replace('"', '',$row);
}
return $result;
}
}
?>
您是否尝试过从临时位置访问。我的意思是使用如下代码
$result = $this->Csvreader->parse_file($_FILES['file_field_name']['tmp_name']);
这样,如果您不需要存储文件,您可以通过不存储文件来节省服务器 space。
库函数是正确的,但我在控制器中出错,我没有正确定义文件的路径。
我的答案是:
$this->load->library('csvreader');
$result = $this->csvreader->parse_file('E:\Test.csv');
$data['csvData'] = $result;
$this->load->view('view_csv', $data);
我在我的项目文件夹中加载了 csv 库。
使用 this link.
但我不知道我们应该将要上传的 csv 文件保存在哪里,我遇到了以下错误。
错误:
Call to a member function parse_file() on null
我的控制器代码:
function index()
{
$this->load->library('Csvreader');
$filePath = './E:/Test.csv';
$result = $this->Csvreader->parse_file('$filePath');//path to csv file
$data['csvData'] = $result;
$this->load->view('view_csv', $data);
}
我的图书馆代码:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class CI_CsvReader {
var $fields; /** columns names retrieved after parsing */
var $separator = ';'; /** separator used to explode each line */
var $enclosure = '"'; /** enclosure used to decorate each field */
var $max_row_size = 4096; /** maximum row size to be used for decoding */
function parse_file($p_Filepath)
{
$file = fopen($p_Filepath, 'r');
$this->fields = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure);
$keys_values = explode(',',$this->fields[0]);
$content = array();
$keys = $this->escape_string($keys_values);
$i = 1;
while(($row = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure)) != false )
{
if( $row != null ) { // skip empty lines
$values = explode(',',$row[0]);
if(count($keys) == count($values)){
$arr = array();
$new_values = array();
$new_values = $this->escape_string($values);
for($j=0;$j<count($keys);$j++){
if($keys[$j] != ""){
$arr[$keys[$j]] = $new_values[$j];
}
}
$content[$i] = $arr;
$i++;
}
}
}
fclose($file);
return $content;
}
function escape_string($data)
{
$result = array();
foreach($data as $row){
$result[] = str_replace('"', '',$row);
}
return $result;
}
}
?>
您是否尝试过从临时位置访问。我的意思是使用如下代码
$result = $this->Csvreader->parse_file($_FILES['file_field_name']['tmp_name']);
这样,如果您不需要存储文件,您可以通过不存储文件来节省服务器 space。
库函数是正确的,但我在控制器中出错,我没有正确定义文件的路径。 我的答案是:
$this->load->library('csvreader');
$result = $this->csvreader->parse_file('E:\Test.csv');
$data['csvData'] = $result;
$this->load->view('view_csv', $data);