0

csv ファイルを読み取り、それをテーブル列にマップしてインポートできるインポート ツールを作成しようとしています。コードイグナイターを使用してこれを実行しようとしています。

誰かがこれを行ってライブラリを持っているか、php や codeigniter で利用できるツールがありますか。車輪の再発明を試みる前に確認したかったのです。

4

1 に答える 1

2

私はずっと前に似たようなことをしました。私は寛大に感じているので、ここにコードスニペットがあります! :-)

ユーザーにフロント エンドのフォームから適切なフィールドを選択してもらいますが、CSV ファイルが変更されない場合は、いつでもこれをハード コードできます。

明らかに、必要に応じて変更する必要があります (区切り文字、フィールド名など...) が、これは正しい方向に開始する必要があります。

// get POST values
$objPost = (object) $this->input->post('arr_of_fields');

$fh_csv = fopen('YOUR CSV FILE');
$fh_tmp = fopen('YOUR TEMP FILE');

while( false !== ($line = fgets($fh_csv)) )

    $enclosed = ''; // or whatever your field is enclosed with
    $delimiter = ','; // or whatever your delimiter is

    $columns  = explode($enclosed.$delimiter.$enclosed, trim($line, $enclosed));

    // the $objPost->field_X signifies the index for that field [0,1,2,3,+++]
    $data = array(
       'field_1' => trim(@$columns[@$objPost->field_1], $enclosed),
       'field_2' => trim(@$columns[@$objPost->field_2], $enclosed),
       'field_3' => trim(@$columns[@$objPost->field_3], $enclosed),
       'field_4' => trim(@$columns[@$objPost->field_4], $enclosed),
    );

    // write line to temp csv file, tab delimited with new line
    $str = implode("\t", $data) . "\n";

    @fwrite($fh_tmp, $str); // write line to temp file
}
@fclose($fh_csv);
@fclose($fh_tmp);

// import from temp csv file into database
$sql    = sprintf("LOAD DATA LOCAL INFILE '%s'
            INTO TABLE `%s`
            FIELDS TERMINATED BY '\\t'
            LINES TERMINATED BY '\\n'
            (field_1, field_2, field_3, field_4)",
            "TEMP FILE",
            "DATABASE TABLE NAME");

$query  = $this->db->query( $sql );

// delete temp file
@unlink("TEMP FILE");
于 2012-10-11T14:54:41.417 に答える