• ベストアンサー

クライアントのcsvファイルの読込について

いつもお世話になっております。 Q1)クライアントPC内のCSV(c:\folder\file.csv)を読込みたいのですが、一度サーバーにアップロードさせないと駄目なのでしょうか? 尚、クライアントは複数の拠点にあります。 -------------------------------------------------- 現在、PHPが稼動しているサーバー上のCSV(c:\folder\file.csv)は、 下記のような記述で処理できるのですが、 $csv_f = "c:\folder\file.csv"; // CSVファイル&パス $fp = fopen($csv_f, "r"); // CSVファイル:OPEN while ($data = fgetcsv($fp)) . . クライアントPC内のCSV(c:\folder\file.csv)を読込む方法をご存知の方いらしたらご教授下さい。 <理想形はこうです> 1.クライアントPC内のCSV(c:\folder\file.csv)を読込んで処理。 2.処理後、c:\folder\file.csvは、c:\folder\file_old.csvという   名前にリネームする。 ----------------------------------------- 以上、よろしくお願いいたします。

  • PHP
  • 回答数5
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • masa6272
  • ベストアンサー率66% (93/140)
回答No.5

プログラムの方で、ファイル、ディレクトリを管理する必要があります。 自分で、セッションごとにディレクトリを作成し、そのディレクトリ名をセッションに保存するか、セッションIDをディレクトリ名にするかでしょうね。

その他の回答 (4)

  • mpx
  • ベストアンサー率71% (149/209)
回答No.4

>> クライアントPC内のCSV(c:\folder\file.csv)を読込む方法を >> ご存知の方いらしたらご教授下さい。 クライアントにCLIモードで動作するPHPがインストールされていれば可能です。 クライアントのコマンドプロンプト上で、実行するだけです。 ブラウザ経由で実行するわけでは有りませんが・・・・

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

ブラウザの仕事ではありませんね。 Windowsをご利用のようなので、wshでスクリプトを組んで ファイルのアップロードはftpというのが妥当でしょう。

  • xyz846
  • ベストアンサー率27% (15/55)
回答No.2

それができたなら簡単にウィルスが作れるでしょうね。

syosin-oyaji
質問者

お礼

回答、ありがとうございました。 成る程、仰るとおりですね。 自社内の使用だけを考えていました。

syosin-oyaji
質問者

補足

xyz846様、もうちょっと教えて貰えませんでしょうか? 処理概要を次のように考えました。 1.0)ボタンクリックでcsvファイルをサーバーにアップロード。 1.1)サーバーは、アップしたcsvファイルをブラウザーに表示。 2.0)クライアントはブラウザーの表示内容を確認してokボタンクリ   ック。 2.1)サーバーはcsvファイルをDBに書き込む。 ---------------------------------------------------- 1.0)の部分ですが、ワークフォルダー的な一時フォルダーにアップ した方が処理は楽だと思うのですが、その場合複数のクライアントが アップするので、名前が重複しないような仕組みにしないと駄目でしょうか? ---------------------------------------------------- 私のオフコンの経験ですと、セッション毎に一時フォルダーが使えた ので、同じ名前で良かったのですが、PHPの場合は? *参考サイトがあったら教えて下さい。 -------------------------------------- 以上、よろしくお願いいたします。

  • masa6272
  • ベストアンサー率66% (93/140)
回答No.1

クライアントでの処理と言うことでしたら、できません。 と言うより、できてはいけません。 ローカルなファイルをWebアプリケーションが、自由に読んだり書いたりできたら、これはブラウザの重大なセキュリティホールです。 ローカルなファイルに関しては、自分で、納得してアップロードして、納得してダウンロードすべきものです。

syosin-oyaji
質問者

お礼

回答、ありがとうございました。 成る程、仰るとおりですね。 自社内の使用だけを考えていました。

syosin-oyaji
質問者

補足

masa6272様、もうちょっと教えて貰えませんでしょうか? 処理概要を次のように考えました。 1.0)ボタンクリックでcsvファイルをサーバーにアップロード。 1.1)サーバーは、アップしたcsvファイルをブラウザーに表示。 2.0)クライアントはブラウザーの表示内容を確認してokボタンクリ   ック。 2.1)サーバーはcsvファイルをDBに書き込む。 ---------------------------------------------------- 1.0)の部分ですが、ワークフォルダー的な一時フォルダーにアップ した方が処理は楽だと思うのですが、その場合複数のクライアントが アップするので、名前が重複しないような仕組みにしないと駄目でしょうか? ---------------------------------------------------- 私のオフコンの経験ですと、セッション毎に一時フォルダーが使えた ので、同じ名前で良かったのですが、PHPの場合は? *参考サイトがあったら教えて下さい。 -------------------------------------- 以上、よろしくお願いいたします。

関連するQ&A

  • csvファイルの読み込み

    fscanf関数を用いて、csvファイルの内容を構造体のそれぞれのメンバに読み込んで表示させようとしているのですが、4列目以降が上手く読み込めません。初歩的な質問で申し訳ありませんがどなたか教えてください。 ****************************ソース************************************************ #include <stdio.h> #include <string.h> #include <stdlib.h> #define SIZE 64 #define FILE_NAME "view_001_McdlData.csv" #define FILE_SIZE 819200 struct Data{ int DataNo; int FrameNo; int SampleNo; char Digital; double voltage; double trigger; double C; double D; }; int main(int argc, char *argv[]) { FILE* fp,*fo, *fi; // ファイルポインタ用 int n, i, file_size; double time,vel[FILE_SIZE]; struct Data *dat; char buff[SIZE]; if ((fp = fopen(FILE_NAME,"r")) == NULL) { printf( "file open error\n" ); exit(EXIT_FAILURE); } fseek(fp, 0, SEEK_END); file_size = ftell(fp); dat = (struct Data*)malloc(file_size); printf("malloc address= %p, file size= %d\n", dat, file_size); fseek(fp, 0, SEEK_SET); i = 0; //データの読み込み while((fscanf(fp, "%d,%d,%d,%s,%lf,%lf,%lf,%lf",&dat[i].DataNo,&dat[i].FrameNo,&dat[i].SampleNo,&dat[i].Digital,&dat[i].voltage,&dat[i].trigger,&dat[i].C,&dat[i].D)) !=EOF ){ printf("%d %d %d %s %lf %lf %lf %lf\n",dat[i].DataNo,dat[i].FrameNo,dat[i].SampleNo,dat[i].Digital,dat[i].voltage,dat[i].trigger,dat[i].C,dat[i].D); i++; } fclose(fp); return 0; } ***********************************csvファイルの内容************************************ 0,1,0,0x3F,2.270000,0.000000,-1.000000,-1.000000 1,1,1,0x3F,2.260000,0.010000,-1.000000,-1.000000 2,1,2,0x3F,2.260000,0.010000,-1.000000,-1.000000 3,1,3,0x3F,2.260000,0.010000,-1.000000,-1.000000 4,1,4,0x3F,2.260000,0.010000,-1.000000,-1.000000 5,1,5,0x3F,2.260000,0.000000,-1.000000,-1.000000 ***************************************************************************************************

  • csvファイルを配列へ格納しブラウザへ出力

    <?php #CAT csvファイルを開く $fp_c = fopen("test.csv","r"); #domain csvファイルを開く $fp_domain = fopen("test.csv","r"); print "<table border='1'>"; #fgetcsv関数がfalseを返却するまで実行 while($c_data = fgetcsv($fp_c)){ print "<tr>"; #csvファイルの列数だけ実行 for($i=0;$i<count($c_data);$i++){ print "<td>".$c_data[$i]."</td>"; } print "</tr>"; } print "</table>"; var_dump($c_data); fclose($fp); ?> このようなプログラムをつくってcsvファイルの各セルを配列$c_data[$i]へ格納している(つもり) なのですが、var_dump($c_data);を入れると bool(false)と表示されてしまいます。 このプログラムではcsvファイルの中身を表示できても配列に格納されていないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • TSVファイルを読み込んでCSV形式に変換したい

    PHP4でTSVファイルを読み込んでCSVファイルに変換しようとしています。下記のようにしましたがうまくいきません。 どこがおかしいでしょうか? $file="sample.txt"; // 変換対象ファイル $contents =file_get_contents($file); $contents =str_replace("\t", ",", $contents); $fp = fopen ($contents, "r"); while(($line= fgetcsv($fp,1024,","))) { print "line= ".$line[0]."<br>"; print "line= ".$line[1]."<br>"; } よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • CSVファイルを読み込み表示すると行頭がおかしくなります

    ・CSVファイルを読み込み表示すると行頭がおかしくなります。 -【 CSVファイル(test.csv) 】------------------- 1,単一,必須 2,…,… ----------------------------------------- ・例えば上記のCSVを読み込んで、  PHPで表示すると以下のように表示されます。 -【 ブラウザ表示 】-------------------------- 1 P一 K須 2 … ----------------------------------------- ・というように最初の文字が正常に表示されません。 ・ちなみに数字(半角?)はちゃんと表示されました。 ・プログラムは下のような感じになります。 ・どこを編集すればよいでしょうか? -【 PHP 】--------------------------------- <?php  if( $fp = fopen( 'test.csv', 'r' ) ){   $data = fgetcsv( $fp );   while( ( $data = fgetcsv( $fp ) ) !== FALSE ){    echo $data[0] . ' ' . $data[1] . ' ' . $data[2] . '<BR>';   }  } ?> ----------------------------------------- -【 仕様 】--------------------------------- [OS]: CentOS5 [Server]: Apache_2.2.10 [PHP]: PHP_5.2.6 -----------------------------------------

    • ベストアンサー
    • PHP
  • フォルダの中のCSVファイルすべての情報を配列にしたい

    フォルダの中のCSVファイルすべての情報を配列に取り込みたいのですが使える関数が分かりません。 とりあえず fopenとfgetcsvを使おうと思いますが、フォルダの中のすべてのファイルを取り込む方法がわかりません。 ファイル名は200704.(拡張子)となっています。 どのように処理すればいいでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • CSVファイルを更新する処理

    CSVに追加や削除、一覧表示、更新をする処理を書いたのですが 更新処理だけうまくいかずに躓いています。 readメソッドのreturn $files;のところで下記の syntax error, unexpected '$files' (T_VARIABLE)というエラーが出てしまいます。 なぜエラーが出ているか教えていただけるとありがたいです。 <?PHP function con($hantei, $num, $name, $age, $address){ $data = [ $num, $name, $age, $address ]; $datas = [$data]; // 追加 if($hantei === 'add'){ $fp = fopen('data.csv', 'a'); foreach($datas as $data) { $line = implode(',' , $data); fwrite($fp, $line . "\n"); } fclose($fp); //更新 } elseif ($hantei === 'update') { function read() { $FILENAME = 'data.csv'; $file = fopen($FILENAME, 'r'); while($data = fgetcsv($file)) { $files[] = $data; }   fclose($file);   return $files; } function replace($num, $name, $age, $address) { // read() $files = read(); $arr = array(); foreach($files as $key => $el) { // [0][a, b, c, d] // [1][a, b, c, d] if ($el[0] == $num) { // $arr[0][0] = $num ... $arr[$key] = array($num, $name, $age, $address); } else { $arr[$key] = array($el[0], $el[1], $el[2], $el[3]); } }    return $arr; } replace(); function write($arr){   $FILENAME = 'data.csv'; $file = fopen($FILENAME, 'w');   foreach ($arr as $v) {    fputcsv($file,$v); }    fclose($file); } $arr = replace($num, $name, $age, $address); write($arr); //削除 } elseif ($hantei === 'dalete') { $file = file('data.csv'); unset($file[$num]); file_put_contents('data.csv', $file); //一覧表示 } elseif ($hantei === 'list') { $fp = fopen('data.csv', 'r'); $readed = fread($fp, filesize('data.csv')); print_r($readed); fclose($fp); } } con('update', 1, 'name', 3, 'address');

    • 締切済み
    • PHP
  • csvファイルを読み込んだ時の「ゼロ」の扱い

    すみません、教えてください。 test.csv というファイルに、 佐藤, 東京 田中, 大阪 中西, 京都 というデータが入っていたとして、以下を使って読み込むと、 <?php $file_name = "test.csv"; $fp = fopen( $file_name, 'r' ); $data = array(); while( $ret_csv = fgetcsv( $fp, 256 ) ){ for($col = 0; $col < count( $ret_csv ); $col++ ){ $data[$col][$row] = $ret_csv[$col]; } $row++; } fclose( $fp ); var_dump($data); ?> 以下のように、 [0] ではなく [""] となってしまうのですが、これを [0] にする方法はないでしょうか。 array(2) { [0]=> array(3) { [""]=> string(6) "佐藤" [1]=> string(6) "田中" [2]=> string(6) "中西" } [1]=> array(3) { [""]=> string(6) "東京" [1]=> string(6) "大阪" [2]=> string(7) "京都 " } } よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • CSVファイル読み込み 文字化け

    アドバイスの方頂ければと思い質問しました。 os fedoracore5/php 5.2.5/mysql 5.0.27 SJISのCSVファイルを読み,UTF-8のプログラムで処理したいのですが、 文字列中に[,]を使用しているものには[""]で囲って いて、その他文字列の日本語部分は[""]で囲まれていません。 そこで下記のような形にしたのですが、日本語が化けてしまいます。 またCSVファイルの文字化けする項目を[""]で囲むと 正常に表示されます。文字列を[""]で囲まずとも文字化けしない方法、またプログラムに問題があればアドバイスを 頂ければと思います。 <?php define("TEST_FILE", "./tes.csv"); header("Content-Type: text/plain; charset=SJIS"); $fp = fopen(TEST_FILE, "r") ; while ($row = fgetcsv($fp)) { for ($j = 0; $j < count($row); $j++) { $data = mb_convert_encoding($row[$j], "UTF-8", "SJIS"); printf($data); } } fclose($fp); ?>

    • ベストアンサー
    • PHP
  • 【PHP】CSVファイルの特定行を書き出す

    PHPでCSVファイルを読み込み、特定行のみを別のCSVファイルに書き出したいと思います。 作りたいものは、 http://example.com/file.php?repert=5 とすると、「002.csvファイルの5行目のみ」を「003.csv」に書き込むというものです。 下記で作りましたが、 Parse error: syntax error, unexpected end of file in C:\xampp\htdocs\file.php on line 32 になります。 指摘された32行は ?> の行です。 ググると改行コードのトラブルのようでしたのでCR+LF CR LF と試しましたが、改善されません。 どこが不味いかご教示戴けませんでしょうか? 宜しくお願い致します。 <?php $repeat = $_GET['repert']; $inFile = '002.csv'; // 抽出元ファイル $outFile = '003.csv'; // 結果ファイル $inFp = fopen($inFile, 'rb'); $outFp = fopen($outFile, 'w'); while ($data = fgetcsv($fp, 10000)) { if ($count == $repeat) { { $outLineArray = array( 0 => $data[0], 1 => $data[1], 2 => $data[2] ); fputs($outFp, implode(",", $outLineArray) . ""); } } fclose($inFp); fclose($outFp); exit(); ?>

    • 締切済み
    • PHP
  • CSVを作成出来たはいいものの・・

    $file_name = "oz_test.csv"; $fp = fopen( $file_name , "w"); $contents = "\"1列目\",\"2列目\"\n"; fputs($fp, $contents); こんな感じでファイルを作成し、 あとは<A>タグでダウンロード出来るまでに至ったのですが、 CSVファイルが、サーバ上に出来たら出来たまま、ディレクトリに残りますよね? ダウンロードが終われば消し去りたいのですが、 ダウンロード時のみに作成し、終われば消える仕組みにしたい。 (メモリ上に作ったら消える?HDD上に作るから消えない?) (非公開ディレクトリにファイルを作ればダウンロードできないだろうし) 何か手はありますか?

    • ベストアンサー
    • PHP

専門家に質問してみよう