アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在phpとMysqlで認証後、認証時に入力したID名のディレクトリを自動で作るシステムを作っています。
しかし、ID名のディレクトリにファイルをアップロードしたいのですが、なぜか指定よりひとつ上の階層にファイルが保存されてしまいます。
考えられることを以下に記します。

1、セッションがうまく渡ってきておらず、指定先のセッション変数が空である。
2、関数の使い方が間違っている。

この他に理由があるのかもしれません。

アップロード指定ディレクトリは以下のように指定しています。

$username = $_POST['user'];
$_SESSION['username'] = $_POST['user'];
$file_dir = "c:/xampp/htdocs/report/$username";

ちなみに認証時のID名のディレクトリを作るプログラムは以下の通りです。

<?php
session_start();
$dirname = $_POST['user'];
$_SESSION['dirname'] = $_POST['user'];
$path = "c:/xampp/htdocs/report/$dirname";
if(!file_exists($path)){mkdir($path);}
?>

こちらもセッション変数を利用しているので同じようにしたら
大丈夫だと思っていたのですが・・・

お分かりになる方ご回答お願いいたします。

A 回答 (1件)

認証時のID名のディレクトリを作るプログラム


<?php
session_start();
$_SESSION['dirname'] = $_POST['user'];//ユーザー名をディレクトリ名として使用するため、SESSIONに保存する。

※1-Start
$dirname = $_SESSION['dirname'];//意味を明確にするため、保存したSESSION変数から値を取得に変更。
$path = "c:/xampp/htdocs/report/$dirname";
※1-End

※1部分を↓のように、わざわざ$dirnameを経由しない方法も考えられます。
$path = "c:/xampp/htdocs/report/{$_SESSION['dirname']};

アップロード指定ディレクトリ
$username = $_POST['user'];
$_SESSION['username'] = $_POST['user'];
$file_dir = "c:/xampp/htdocs/report/$username";
以下のように変更
session_start();//セッションへの再接続(※事前に実行していた場合不要)
$dirname = $_SESSION['dirname'];
$file_dir = "c:/xampp/htdocs/report/$dirname";

おそらくファイルアップロードの際には、$_POST['user']を送っていないのだと思います。
$_SESSION[]は、サーバー上に継続的に保存する変数(及び値)と考えてください。
session_start()で、存在しない場合新規作成、存在した場合は接続して値を取得します。
デフォルトでは、クッキー内にセッションIDを保存して、自動でそのIDを元にサーバー上の変数を読み取り、変数を継続してくれます。

せっかく保存してくれている変数を使用していないので、おかしなことになっていると思われます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ご指摘どおり変更してみたところ、正常に動きました。
この度はありがとうございました。

お礼日時:2008/12/20 04:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!