同じ配列処理でユーザー認証プログラムを作る方法

このQ&Aのポイント
  • PHPファイル内にユーザー名、パスを定義していますが、外部ファイルから読み込む方法を知りたいです。
  • 具体的には、CSVファイルからユーザー名とパスを読み込んで、配列として扱いたいです。
  • 現在の処理だと、CSVファイルからの読み込みがうまくいっていないため、どのように修正すれば良いか教えてください。
回答を見る
  • ベストアンサー

同じ配列処理

認証プログラムを作っています。 PHPファイル内にユーザー名、パスを定義してます。 $usersと同じ変数に入れ認証処理のプログラムは変えたくないのです。 CSVのカンマ区切りで外部ファイルとして、読み込み$usersと同じ扱いにしたい。 PHPファイル内(認証処理は問題なく動作) $users = array( "admin" => "pass", "guest" => "guest" ); 今後は下記のようにしたいです。 CSVのカンマ区切りで外部ファイル(log.dat) admin,pass guest,guest PHPの処理 $lines = @file($userfile); for($i=0; $i<count($lines); $i++){ list($id, $pass) = explode(",", trim($lines[$i])); $users[$i] = array($id, $pass); } うまくできません。

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

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

  • ベストアンサー
noname#244856
noname#244856
回答No.2

正しいCSV形式、つまり改行コードLFを用いて admin,pass[LF] guest,guest[LF] というように全ての行末にLFが存在している前提で。 $fp = fopen($userfile, 'r'); while ($row = fgetcsv($fp)) { $users[$row[0]] = $row[1]; } fclose($fp); fgetcsv関数を使えばシンプルに書けます。

その他の回答 (1)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

>$users[$i] = array($id, $pass); 最初にご自分が書いた形式になっていません。 $users[$id] = $pass; ですよね。 $users = array(); $lines = file($userfile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); foreach ($lines as $line) { list($id, $pass) = explode(",", $line); $users[$id] = $pass; } ちなみにCSVファイルに保存するのですから、ユーザ名・パスワードに区切り記号が混入しないように注意しないといけません。タブ区切りならそういう面倒もないですが、まぁ入力チェックで英数字限定とかですかね。またパスワードはハッシュを記録するようにしてください。

関連するQ&A

  • 多次元配列のオーソドックスなファイル書き込みについて教えてください

    PHP勉強中のAJAMAです。 下記にありますようなプログラムによって配列構造を持った変数をCSVファイルに書き込み、一行を1レコードとして管理をしたいと考えています。書き込み処理は、一意である変数の場合は、きっちりと書き込まれるのですが、配列変数の部分はarrayと書き込まれてしまいます。配列変数の中身を書き込むには、join(",",$xxxx)とすることで、すべてを同じ一行に書き込むことができました。しかしこれですと、すべてが、,区切りの二次元構造になってしまうので、これらのデータを読み込んで活用したい場合に、多次元構造を把握する処理をしなくてはいけないように見えるのですが、どうにもその仕組みを思考することができないので、模範的な手法を教えていただけないでしょうか。 serialize()も試してみましたが、知識がオブジェクト指向にまでいたっていないこともあり、うまくいきませんでした。(実行環境がPHP4だからかもしれません) 以 下、作成中のソースコードです。                     ※$numから右が配列変数部 $lines=array("$recordID",$nickname,$date,$area,$num,$item,$size); $lines=implode(",",$lines); $lines=$lines."\n"; serialize($lines); ←試行して不成功だった加筆部分。 //CSVファイルに書き込み $fp=fopen("report.csv","a"); flock($fp, LOCK_EX); fputs($fp,$lines); fclose($fp); 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP+MySQL でのcsvファイルインポート

    PHP + MySQL で、他システムから出力されてきたcsvファイルをテーブルへインポートしたいと考えています。 LOAD DATA INFILE で取り込もうとしていますが、対象のcsvファイルの特徴のためにうまく行かず苦戦しています。 取り込みたいファイルは、以下のようになっています。  ・各フィールドが "(ダブルクォート) で囲まれている  ・各フィールドは ,(カンマ) で区切られている  ・金額の項目には、桁区切りのカンマが入っている  例) "0001","あああああ",…(中略)…,"105,000","100,000","5,000",…     コード 項目名            税込み  税抜き 消費税  というような形です。    困っているのは、金額に使われている、桁区切りのカンマの処理についてです。  目的としては、データベースへ取り込むときには 105,000 は 105000 として取り込めればいいのですが、他システムから、桁区切りがなされた状態でcsvが作成されてきています。 LOAD DATA INFILE test.csv INTO TABLE data_table FIELDS TERMINATED BY ',' ENCLOSED BY '\"' IGNORE 1 LINES;  各項目のダブルクォートはENCLOSED BY で、項目を分けるカンマはTERMINATED BYで処理できていると思うのですが、金額の区切りに使われているカンマと項目の区切りのカンマを区別させられずに苦戦しています。  事前にcsvを加工するのも考えてはいるのですが、なるべくcsvを加工せずにそのまま取込したいと思います。  何か、簡単に回避できる方法等があればご教示願います。  宜しくお願いします。

    • ベストアンサー
    • PHP
  • 外部ファイル読み込みと繰り返し処理について

    質問いたします。 javascriptのみでCSVなどの外部テキストから、 下記のように配列内に読み込むことは可能なのでしょうか? objabc[0].objdef["この部分を外部テキストから読み込みたい"] = "OK!"; また、改行やカンマ、タブなどでの区切りの回数分 処理を繰り返す方法を教えていただければと思います。

  • Excel VBAにてCSVファイルを読みたい

    ExcelにてCSVファイルを読んで処理をしたい。 ただし、CSVファイルをExcelでopenすると遅いので、 VBAにてファイルとして読み込みで処理をしたいのですが、 皆さんは、どのように行っていますか? ※CSVファイルは、テキスト区切り→"(ダブルコーテーション)です  テキスト区切り無しであれば、1行読んで、カンマをsplitすれば良いと思いますが。。。。

  • 【Excel】csvファイル取込み VBA処理

      VBAの初心者です。 csvファイル(カンマ区切り)の取込みをVBAで処理したいのですが、知識がないので 何方か詳しい方ご教授下さい。 動作的には以下のように処理したいと思ってます。 1. sheet1のボタンからテキストのインポート   任意のフォルダ(c:\data\i_data)からカンマ区切りで保存されたcsvファイル群から   選んで読込み。   読込むファイルに間違いがないか対話型で確認のメッセージを表示し、キャンセ   ルした場合は中断させる。 2. csvファイル内の200列分のデータ(指数)をsheet3の任意のセル(指定可能)に取込   み。セルの指定が出来なければ固定でも可ですが、行違いで他のファイルも取込   み出来るようにしたいのです。 色んなサイトからヒントを貰って自分なりに試してますが上手くいかず、行き詰って質 問させて頂いた次第です。 また別のQ&Aに記載されてましたFileSystemObjectが使えません。 お手数ですが、各行毎にコメント(解説)があると有難いです。 Excelのバージョンは"2007"ですが"2000"でも使えるようにしたいのですが・・ よろしくお願いします。

  • CSVからの抽出、並び替えのプログラム

    すいません。phpを勉強し始めたばかりで、CSVから抽出したものを並び替えたいと考えていまして、 サンプルプログラムをいくつか見ていたのですが一部よく分からない所があります。 例えば以下のプログラムで $names = Array(); と$names[] = $lines[0]; はどのような処理をしているのでしょうか? ただ単にCSVから読み込み→配列を全部表示では上記の処理は見当たりません。 斉藤一郎,170,60,A 鈴木二郎,180,90,B 田中三郎,190,80,O 中村四郎,160,100,AB <?php if( $handle = fopen( 'test.csv', 'r' ) ){ $names = Array(); // while( ( $lines = fgetcsv( $handle ) ) !== FALSE ){ if( $lines[2] >= 90 ){ //体重が90以上なら $names[] = $lines[0]; // } } echo '体重が90kg以上なのは、' . implode( '・', $names ) . 'です'; } ?>

    • ベストアンサー
    • PHP
  • HTTP認証ダイアログについて

    下記のPHPスクリプトを実行して、アカウント(ID:admin,パス:pass)を入力してもHTTP認証ダイアログが消えません。ダイアログが消えて、Hello! と表示させたいのですが、どこが間違っているのか、教えていただきたいです。 <?php $user="admin"; $pass="pass"; if (!isset($_SERVER['PHP_AUTH_USER'])) { //初回認証時(PHP_AUTH_USER:HTTP 認証しているときにそのユーザー名がセットされます。ダイアログに入力した値) header("WWW-Authenticate: Basic realm=\"PHP Web Storage\""); header("HTTP/1.0 401 Unauthorized"); echo "Please input account info!\n"; exit; }else { $flg=false; while(isset($user)){ if($_SERVER['PHP_AUTH_USER']==$user && $_SERVER['PHP_AUTH_PW']==$pass){ $flg=true; break; } } if(!$flg){echo"Please input valid account!\n";exit;} //停止 else{echo'Hello!';exit;} } ?>

    • ベストアンサー
    • PHP
  • CSV→タブ区切り

    CSVファイルでデータを取り込もうとしてますが、金額にカンマが入ってたりして、列がずれたりします。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=361247 ↑等を参照した上ですが、タブ区切りデータでインポートしてみようかと思います。 CSVファイルをタブ区切りファイルに変換するにはどうしたらよいでしょうか?そういうコードはありますでしょうか?

  • phpでcsvデータをランダム表示について

    下記はcsvデータをランダムに1つだけ抽出するphpのプログラムですが、1度表示したデータに色をつけるとか、表示させない方法はありますか? <!doctype html> <html> <head> <meta charset="UTF-8"> <title>無題ドキュメント</title> </head> <body> <?php // 抽出数 $count = 1; $list = array(); // 読み込みCSVファイル $lines = file('test.csv'); shuffle($lines); foreach ($lines as $line) { if ( ! in_array($line, $list)) { array_push($list, $line); if (count($list) >= $count) { break; } } } // CSVファイルに出力 $file = fopen('test2.csv', 'w'); foreach ($list as $l) { echo $l.'<br>'; if ($file) { fputs($file, $l); } } fclose($file); ?> </body> </html>

    • ベストアンサー
    • PHP
  • 配列の外部ファイル化

    あるPHPの一部分で、 $array = array( "a" => "ste", "b" => "fsg", ... ); となっている部分を外部ファイル化したいと思います。 fileでは思ったとおりの結果が出ませんでした。 何か方法はありませんでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう