2012-07-05 2 views
5

API를 사용하여 내 컨트롤러에 csv 파일을 게시하고 싶습니다. 필립 스터 전의 Codeigniter REST 라이브러리를 사용하고 있습니다. 클라이언트 측에서 내 REST Server에 CSV 가져 오기를 구현하는 방법. 관련 문서를 찾을 수 없어서 물어보고 싶습니다.Codeigniter REST CSV에서 mysql로 ​​가져 오기

+0

질문이 명확하지 않습니다. Codeigniter REST는 Codeigniter와 거의 동일하지만 차이점은 메서드와 응답을 호출하는 것입니다. 보통 codeigniter에서 우리는'controller/function'를 호출합니다. 여기서 REST는'resource/{resource_id}/child_resource/{child_resource_id}'이어야합니다. 헤더 파일을'.xls' 파일로 보내면 문제가 없습니다. – KuKu

+0

간단히 말해서 원하는 것을 알려주세요. –

+0

@raheelshan 클라이언트 측 API를 사용하여 내 컨트롤러에 csv 파일을 게시하고 싶습니다. jquery.post 그리고 csv 파일 데이터를 추출하고 mysql로 ​​가져 오기. –

답변

27

쉬운 방법은 다음과 같습니다. 나는 사람들이 무엇을하는지 모르지만 이것을 사용합니다.

이것은 내 csv 리더 라이브러리입니다.이 파일을 라이브러리 폴더에 csvreader.php로 저장하십시오.

<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); 

class 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; 
    } 
} 
?> 

그리고 컨트롤러 메소드

function readExcel() 
{ 
     $this->load->library('csvreader'); 
     $result = $this->csvreader->parse_file('Test.csv');//path to csv file 

     $data['csvData'] = $result; 
     $this->load->view('view_csv', $data); 
} 

그리고 이것은보기

<table cellpadding="0" cellspacing="0" width="100%"> 
    <tr> 
      <td width = "10%">ID</td> 
      <td width = "20%">NAME</td> 
      <td width = "20%">SHORT DESCRIPTION</td> 
      <td width = "30%">LONG DESCRIPTION</td> 
      <td width = "10%">STATUS</td> 
      <td width = "10%">PARENTID</td> 
    </tr> 

      <?php foreach($csvData as $field){?> 
       <tr> 
        <td><?php echo $field['id']?></td> 
        <td><?php echo $field['name']?></td> 
        <td><?php echo $field['shortdesc']?></td> 
        <td><?php echo $field['longdesc']?></td> 
        <td><?php echo $field['status']?></td> 
        <td><?php echo $field['parentid']?></td> 
       </tr> 
      <?php }?> 
</table> 

주입니다 : 이것은 단지 서버에있는 파일을 읽습니다. 파일을 업로드해야 할 경우 File Upload Class을 사용하여 파일을 업로드하고 서버의 특정 위치에 저장 한 다음 parse_file 방법으로 파일 위치를 지정하십시오. 모든 것이 잘 작동합니다.

+0

감사합니다. 데이터를 추출하여 모델에 전달하기 만하면됩니다. –

+0

반환 된 배열을 모델 –

+0

에 전달할 수 있습니다. $ enclosure '' '가없는 CSV 필드가 $ enclosure =' '인 경우 오류가 발생합니다. –

관련 문제