0

テーブルがあるとしますobjects:

CREATE TABLE objects (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    someinfo VARCHAR(255),
);

そして、次のようなテキスト ファイル:

name,someinfo
"firstname","firstinfo"
"secondname","secondinfo"
...

このテキストファイルを CakePHP にアップロードしてデータを処理し、オブジェクトを作成するにはどうすればよいですか? 処理は問題ではありません。ただし、ファイルをアップロードする方法がわかりません。

注: ファイルのサイズは最大 300MB です。

編集
私はLOAD DATA INFILEこのコードを使用して、dogmatic69 が提案したように使用しようとしました:

$filefullname = $this->request->data['File']['file']['tmp_name'];
debug($filefullname);
$query = 'LOAD DATA LOW_PRIORITY INFILE "'.$filefullname.'" INTO TABLE agencies FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY """" LINES TERMINATED BY "\r" IGNORE 1 LINES';
$this->Agency->query($query);

ただし、次の出力が得られます。

'C:\Windows\Temp\phpB413.tmp'
Error: SQLSTATE[HY000]: General error: 29 File 'C:\ProgramData\MySQL\MySQL Server 5.5\data\WindowsTempphpB413.tmp' not found (Errcode: 2)
SQL Query: LOAD DATA LOW_PRIORITY INFILE "C:\Windows\Temp\phpB413.tmp" INTO TABLE agencies FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY """" LINES TERMINATED BY "\r" IGNORE 1 LINES
4

2 に答える 2

2

@Markからの回答は、必要なもののごく一部しかカバーしていないので、ここにもっとあります:

ところで、サバントアップロードプラグインは、リンクされたものよりもおそらく人気があります。星とフォークで行くと、uploadpackの約2倍の人気があります。

csvデータを保存に適したケーキ形式に解析する必要があります。これを行うためのいくつかのクラスがあります。使用法のテストを見てください

大量のデータがある場合はsaveAll()、行ごとに1つの挿入が作成されるため、避けたいと思います。一括挿入を行う際のアイデアにこれを使用します。

正直なところ、300MBのCSVファイルをインポートする場合LOAD DATA INFILEは、はるかに高速なMySQLを使用する必要があります。http://dev.mysql.com/doc/refman/5.1/en/load-data.html

于 2013-01-06T23:10:46.260 に答える
1

サードパーティのライブラリを使用するのが最善です。最も人気のあるものは次のとおりです。uploadpack:https ://github.com/szajbus/uploadpack

于 2013-01-06T21:38:17.580 に答える