CakePHP3を利用してクラウドのWebアプリを作成しています。
ユーザーが「ファイルを選択」ボタンからユーザー側ローカルにあるCSVファイルを選択し、そこからデータをインポートし、最終的にデータベースに格納する処理を作ろうとしています。
フレームワークではCakePHPを利用していますがフレームワーク内に適当な関数がなかったためPHPのfgetcsv関数を利用してデータを取ろうと試みました。
URL
すると、下記のエラーメッセージが出てファイルを読み込めていないようです。
※csvtest用データ 住所録.csvを開こうとしています。
fopen(csvtest用データ 住所録.csv): failed to open stream: No such file or directory
【主なソースコード】
CsvTestController.php
public function add() { $csvTest = $this->CsvTest->newEntity(); if ($this->request->is('post')) { //print_r($_FILES); $f = fopen($_FILES['csv_test']['name'], "r"); while($line = fgetcsv($f)){ // 読み込んだ結果を表示します。 var_dump($line); } // test.csvを閉じます。 fclose($f); } //$this->set(compact('csvTest')); }
add.ctp
<?php /** * @var \App\View\AppView $this * @var \App\Model\Entity\CsvTest $csvTest */ ?> <nav class="large-3 medium-4 columns" id="actions-sidebar"> <ul class="side-nav"> <li class="heading"><?= __('Actions') ?></li> <li><?= $this->Html->link(__('List Csv Test'), ['action' => 'index']) ?></li> </ul> </nav> <div class="csvTest form large-9 medium-8 columns content"> <?= $this->Form->create($csvTest,array('enctype'=>'multipart/form-data')) ?> <fieldset> <legend><?= __('Add Csv Test') ?></legend> <?php echo $this->Form->input('csv_test',array('type'=>'file')); ?> </fieldset> <?= $this->Form->button(__('Submit')) ?> <?= $this->Form->end() ?> </div> <div> <input type="file" name="csv_test" size="30"> </div>
以下のURLを見ると一度サーバー側にアップロードしているようですが、アップロードは必須でしょうか。出来ればサーバー側にデータは残しておきたくないです。
またアップロードする場合、どのディレクトリが適切か等ありますでしょうか。
https://qiita.com/katsukii/items/1b7e95723d0070cfc5b9
また、その他、アドバイスあればいただけると幸いです。
宜しくお願い致します。
回答3件
あなたの回答
tips
プレビュー