<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>サンプル</title> <script src="jquery-1.11.1.min.js"></script> <script src="jquery.upload-1.0.2.min.js"></script> <script> //ファイルアップロードされたときのイベント。 $(function() { $('#medaka').change(function() { //ファイル名 var fn="test.php"; //☆非同期通信で画像ファイルをアップロードする。 $(this).upload(fn, function(res) { //▽以下はファイルアップロードに成功したときの処理。 $("#res").html(res); }, 'html'); }); }); </script> </head> <body> <h2>サンプル</h2> <input type="file" name="upload_file" id="medaka"><br /> <hr> <h3>結果</h3> <div id="res" style="color:red"></div> </body> </html>
<?php require_once 'CsvIo2.php'; //header("Access-Control-Allow-Origin:*");//クロスドメイン通信を許可する。 $tmpFn=$_FILES["upload_file"]["tmp_name"]; //一時的にアップロードしたファイル名が空でないかチェック。(キャンセルを押された時など) if(empty($tmpFn)){ echo 'no_data'; } //CSVファイルからデータを取り出し、さらにアクセスデータを抽出 $data=null; try { //CSVファイルからデータを取り出す。 $cio=new CsvIo2(); $data=$cio->load($_FILES["upload_file"]["tmp_name"]); unlink($_FILES["upload_file"]["tmp_name"]);//一時ファイルを削除 echo var_dump($data); } catch (Exception $e) { unlink($_FILES["upload_file"]["tmp_name"]);//一時ファイルを削除 echo 'no_data'; } ?>
<?php define("SDQ","%DXQ#"); define("SSQ","%SXQ#"); /** * * CSV読込書出クラス<br> * ★主なメソッド * load() リソース(サーバー内のファイル)に存在するCSVファイルを読込みdataに変換する。 * save() dataをリソース内のCSVファイルとして保存する。 * cnvToAryForDq() コンマ区切りの文字列を配列化する。ダブルクォートに対応している。ダブルクォート内のコンマは区切らない。 * * ★履歴 * 2011/09/26 新規作成。 出力機能は未実装<br> * 2012/1/12 readを改良。最初の一行をキーにする機能を追加 * 2013/8/14 readを非推奨にし、loadを作成。saveメソッドを新規追加。 * 2014/4/11 rakuten用に改造 * 2014/5/22 cnvToAryForDqのnull判定にバグ。コンマが連続するCSVでエラーが発生した。 * 2014/5/23 splitExで上記のバグを修正。さらに高速化。 * 2015/4/16 ver2にバージョンアップ。 * * * creater wacgance * this is free */ class CsvIo2{ /** *CSV読込 * @param $csvFn CSVファイル名 * @return 2次元データ */ function load($csvFn){ //引数のiniファイル名が空、もしくは存在しなければ、なら、nullを返して終了 if(!$csvFn){return null;} if ( !$this->is_file_ex($csvFn)) {return null;} //▼CSVファイルのデータを読み込みdataを作成 $csvFn=mb_convert_encoding($csvFn,'SJIS','UTF-8'); if ( $fp = fopen ($csvFn, "r")) { $data=array(); while (false !== ($line = fgets($fp))){ $str=mb_convert_encoding($line, 'utf-8', 'utf-8,sjis,euc_jp,jis'); //▽コンマで区切った文字列を配列に変換。ダブルクォート区切りに対応している。 $ent=$this->splitEx($str); array_push($data,$ent); } } fclose ($fp) ; return $data; } /** * CSV読込その2。 * 先頭行をキーとしているデータ用。 * 1行目の行はデータのエンティティのキーとして利用する。 * @param $csvFn CSVファイル名 * @return data */ function load2($csvFn){ $data=$this->read($csvFn,$fieldFlg=false); return $data; } /** *CSV読込 * @param $csvFn CSVファイル名 * @param 1行目のデータをキーとして利用する場合true; * @return 2次元データ */ function read($csvFn,$fieldFlg=false){ $data=$this->load($csvFn); //▼フィールドフラグがTrueの場合、最初の一行をキーにする。 if($fieldFlg==true){ foreach ($data as $i => $ent){ if(empty($flg)){ $flg=1; $keys=$data[0];//キーリストを取得 }else{ foreach ($keys as $j=>$key){ $ent2[$key]=$ent[$j]; } $data2[]=$ent2; } } }else{ $data2=&$data; } return $data2; } /** * CSV保存(リソースへ保存する) * @param $csvFn 保存するCSVファイル名 * @param $data データ * @return なし */ function save($csvFn,$data){ // CSVファイル名の設定 $csv_file = $csvFn; // CSVデータの初期化 $csv_data = ""; // CSVデータの作成 foreach((array)$data as $key => $value ){ $csv_data.=join($value,','); if(count($data) !== intval($key)+1){ $csv_data .= "\n"; } } // ファイルを追記モードで開く $fp = fopen($csv_file, 'ab'); // ファイルを排他ロックする flock($fp, LOCK_EX); // ファイルの中身を空にする ftruncate($fp, 0); // データをファイルに書き込む fwrite($fp, $csv_data); // ファイルを閉じる fclose($fp); } private function splitEx($str){ //「\"」を待避する。 $s=$str; $n=mb_strpos($s,'\"',0);//「\"」を検索 $sdqFlg=false; if(!empty($n) || $n===0){ $sdqFlg=true; $s = str_replace('\"', SDQ, $s);//「\"」を待避させる。 } //「"」でくくられた「,」を待避する。 $dqFlg=false; $n=mb_strpos($s,'"',0);//「"」を検索 if(!empty($n) || $n===0){ $dqFlg=true; $ary=explode ( '"' , $s ); for($i=1;$i<count($ary);$i=$i+2){ //echo $i."-"; $ary[$i]=str_replace(',', SSQ, $ary[$i]);//「,」待避させる } $s=join("",$ary); } //待避文字から「"」に戻す。 if($sdqFlg==true){ $s = str_replace(SDQ, '"', $s); } $ary=explode ( ',' , $s );//分解 //待避文字から「,」に戻す。 if($dqFlg==true){ foreach($ary as $i=>$v){ $ary[$i]=str_replace(SSQ,',', $v); } } return $ary; } /** * 日本語ファイルも扱えるis_file * @param unknown_type $fn * @return boolean */ function is_file_ex($fn){ $fn=mb_convert_encoding($fn,'SJIS','UTF-8'); if (is_file($fn)){ return true; }else{ return false; } } } ?>
(c)wacgance 2015-04-16