• 締切済み

変数を他の変数に代入したいが。。

こんにちは。 やりたいことは 以下のことです。 1.サンプルを他のサンプル(TPLもしくはPHP)から起動。サンプルは別途添付。 2.ユーザー名を渡してやる(今回パラメーター渡しでやってみました) 3.サンプルで以下のことを行いたい htdocs\data\ユーザー名 のフォルダーを作成 htdocs\data\ユーザー名 のフォルダーにファイルを アップロード・ダウンロード htdocs\data\ユーザー名 のフォルダーにファイルの一覧を表示 問題点     パラメーター渡しで行ってみましたがうまくいきませんでした。     下記のサンプルでは認証の部分をコメントにして、     ユーザー名をサンプル内で便宜上固定してみましたが、うまくいきません。     以下のようになります。 1.最初に起動 data/ユーザー名フォルダーにいく ( ok ) 2.一覧表示 data/ユーザー名フォルダーを見に行く( ok ) 3.アップロード data フォルダーを見てしまう (なぜユーザーのフォルダーを見に行かない?) サンプル単体で動かしたときに どうしてユーザーのフォルダへアップロードできないのか いろいろ見たのですが わかりません。 単純に $userを $usernameに入れればすむと思ったのですが。。。 もしわかる方いらっしゃいましたら アドバイスいただけると ありがたいです。 また、他のtplもしくは phpから このサンプルを起動する場合、 セッションとパラメーター渡しでの違いはあるのでしょうか? 実際 渡す必要があるのはユーザー名だけなのと、 私自身がセッション渡しにする場合のやり方を まだ理解できていないもので。。よろしくお願いいたします。

  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

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

具体的なソースを提示した方が回答がつきやすいかと。

ASHINOKO
質問者

お礼

誰からも コメントがないので クローズします。

ASHINOKO
質問者

補足

分割しないといけない長さなので 要点をカットします。 (分割掲載は許されていないようなので。。) sample.phpには ユーザー認証ユーザー名とパスワードの部分があるのですが、 それは別のphpで行うので ユーザー名を外部から与えてやって、 このsample.phpは認証部分をカットしたいのです。 しかし手を加えたらユーザーのフォルダーにアップロードできなくなりました。  .../data/ユーザー名 に行かないで .../dataへアップされてしまう。。 手を加えたのは (1)と(2)の部分だけなのですが。。。 すみませんがよろしくお願いいたします。 -- 以下 sample.php 抜粋 -- // とりあえずユーザー名固定にして確認 $user="test.user1"; $pass="testuser1"; // (1)認証部分は カット //function authenticate() //{ // global $user,$pass; // // if (!isset($_SERVER['PHP_AUTH_USER'])) { //初回認証時 // header("WWW-Authenticate: Basic realm=\"PHP Web Storage\""); .... // while(isset($user[$cnt])){ //入力されたアカウントをチェック // if($_SERVER['PHP_AUTH_USER']==$user[$cnt] && /// $_SERVER['PHP_AUTH_PW']==$pass[$cnt]){ //} //ファイルをリストアップする function listup($dirname,$key) { $dir="./data/$dirname"; if(!file_exists($dir)){mkdir($dir);} //ディレクトリが無い場合は作成 $d = dir($dir); //ディレクトリを開く while(($entry = $d->read())){ //ディレクトリを検索して配列に格納 if(ereg("txt",$entry)){ //テキスト形式を見つけ $lines=file($dir."/".$entry); //ファイル読み込み ... <form action="storage.php?mode=listup"> <tr><td colspan="4">「{$dirname}」さんのファイル一覧 ($count) ..... //アップロードする function showuploadform() { global $option,$maxsize,$_COOKIE; <form enctype="multipart/form-data" action="storage.php" method="POST"> ...... <td><input type="submit" name="cmd" value="upload"> (最大 $maxsize byteまで)</td> </tr> .... //メニューを表示する function showmenu() <a href="storage.php?mode=listup">一覧表示</a>  <a href="storage.php?mode=upload">アップロード</a>  //ファイルの詳細を表示するファイル読み込み function showinfo($dirname,$target) { $fn="./data/$dirname/".$target.".txt"; $url="download.php?target=$target"; /////////////////////////////////////////////////////////// $mode=$_GET["mode"]; if($mode==""){$mode="listup";} if(isset($_GET["target"])){$target=$_GET["target"];} if(isset($_POST["target"])){$target=$_POST["target"];} $key=$_GET["key"]; // (2)認証をカットしたので、以下の2行をコメント //if($_POST["cmd"]!="upload"){authenticate();} //$username=$_SERVER['PHP_AUTH_USER']; // 上のコメントの2行にかえて 以下の1行追加 if($_POST["cmd"]!="upload"){$username=$user;} .... //アップロードされた場合 if($_POST["cmd"]=="upload" && isset($_POST["title"])){ setcookie ("name",$_POST["name"],time()+3600000); setcookie ("title",$_POST["title"],time()+3600000); setcookie ("kind",$_POST["kind"],time()+3600000); $dir=getcwd(); $dir.="/data/$username"; $fn=uniqid(""); $bfn=$dir."/".$fn.".bin"; $tfn=$dir."/".$fn.".txt"; if (move_uploaded_file($_FILES['userfile']['tmp_name'], $bfn)) { $memo=str_replace("\r\n","#rc#",$_POST["memo"]); $str=sprintf("%d\n",time()); $str.="{$_POST["title"]}\n{$_POST["kind"]}\n"; $str.="{$_POST["name"]}\n$memo\n"; $str.="{$_FILES["userfile"]["name"]}\n{$_FILES["userfile"]["size"]}\n"; $str.="{$_FILES["userfile"]["type"]}\n\n"; $str=htmlspecialchars($str, ENT_QUOTES,"SJIS"); $fp=fopen($tfn,"wb"); //ディスクに保存 fputs($fp,$str); fclose($fp); }else {echo"failed to upload...";exit;} } ... showmenu(); //メニュー表示 if($mode=="listup"){listup($username,$key);} //一覧表示 if($mode=="upload"){showuploadform();} //アップロード if($mode=="showinfo"){showinfo($username,$target);} //一覧表示

関連するQ&A

  • リンクしたPHPへ変数をわたしたい

    今 サンプルをくっつけようとしています。 *1つのサンプルはログイン認証(PHP)で、ユーザー($username)を認証してから他のメニュー(ここではアップロード・ダウンロード,PHP)へ飛ぶようにテンプレート(TPL)上でPHPのリンクをつけてあります。 *TPLファイルでは、以下のような部分を付加してありますが、 画面上でログインしているユーザー名($username)が表示されます。 <P> {$username|escape:"html"} <BR> <BR> <A href="storage.php?{$username}={$username|escape:"html"}">"{$username|escape:"html"}"ファイルのアップロード・ダウンロード</A> <BR> <BR> 画面上に表示されたリンクをクリックしてstorage.phpへ飛ぶと、 storage.php内で 表示できるように設定した$usernameが表示されません。 storage.phpではユーザー別のフォルダをつくりそこにアップロード・ダウンロードさせたいのですが $usernameがわたらないために どのユーザーでも同じフォルダーにアクセスすることになってる現状です。 storage.phpでは 以下のような内容 function listup($username,$key) { global $dirname; print $dirname; $dir="./data/$dirname"; ............... $username さんのファイル一覧 インターネットや本をみたのですが、わかりません。 すみませんが お気づづきのかたいらっしゃいましたら アドバイスお願いいたします。

    • 締切済み
    • PHP
  • セッションについて

    現在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);} ?> こちらもセッション変数を利用しているので同じようにしたら 大丈夫だと思っていたのですが・・・ お分かりになる方ご回答お願いいたします。

    • 締切済み
    • PHP
  • Ethnaでメール送信するには?

    下記のサイトを参考にEthnaの勉強をしています。 http://ethna.jp/ethna-document-dev_guide-app-mail.html ※環境はXAMPPを使用しています。 参考にしながらサンプルを作成していますがうまくいきません。 tplファイルは以下のフォルダに置いています。 C:\xampp\htdocs\sample\template\ja\mail [内容] From: xxx@yahoo.co.jp Subject: 入会に成功しました。 ようこそ{$username}さん。 うんたらかんたらほげほげ。 phpファイルは以下の場所に置いています。 C:\xampp\htdocs\sample\www [内容] <?php include_once('C:\xampp\php\PEAR\Ethna\class/Ethna_MailSender.php'); $ethna_mail =& new Ethna_MailSender($this->backend); $ethna_mail->send('xxx@yahoo.co.jp', 'welcome.tpl', array('username' => $regist_user)); ?> ブラウザで実行したら下記のエラーが表示されました。 Fatal error: Using $this when not in object context in C:\xampp\htdocs\sample\www\welcome.php on line 4 Ethnaでメール送信するにはどのようにしたらいいのでしょうか? アドバイス宜しくお願いします。

    • 締切済み
    • PHP
  • 文字列を変数化したい

    ★hyouji.php $a_01="a"; $a_02="b"; echo $data = $a_??; 上記 hyouji.phpに以下のパラメータで接続した場合に hyouji.php?$num=01 numの値によって a又はbが表示したいです。 つまりパラメーターで渡ったデータを変数名にセットしたいのですが、 良い方法はありますでしょうか?

    • ベストアンサー
    • PHP
  • 会員管理システムを作っているのですが、エラーが出て困っています。

    phpとsmartyで会員管理システムを構築しているのですが、以下のようなエラーが出て困っています。 エラー文 Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\Login.class.php:1) in C:\xampp\htdocs\login.php on line 5 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\Login.class.php:1) in C:\xampp\htdocs\login.php on line 5 Warning: Smarty error: unable to read resource: "login.tpl" in C:\xampp\htdocs\Smarty.class.php on line 1092 このエラー文は何と言っているのですか? また、解決方法が分かる方、ご回答お願いします。

    • 締切済み
    • PHP
  • バーチャルホストでの SESSION変数名

    現在バーチャルホスト内にて3つのWEBサイトが入っているサーバーがあります。 1つ目のサイトから2つ目のサイトへリンクをクリックして移動した場合にはSESSION変数名が同一の場合にはそのSESSION変数が有効となってしまいます。 例えば http://www.one.php/ $_SESSION['USER_NAME'] = '佐藤' http://www.two.php/ に$_SESSION['USER_NAME'] があると 佐藤が表示されてしまう。 つまり、サイト毎でSESSION変数名が同じであっても 別のSESSION変数としてスコープ等設定できるのでしょうか。 バーチャルホストにてPHPで、SESSIONを扱う場合はどうしたらよいのでしょうか。 環境 RedHat7.2 php4.3.10

    • ベストアンサー
    • PHP
  • 悪戦苦闘PHP セッション変数

    毎日悪戦苦闘しながらすごしずつプログラムができるようになって来ました。今越えられないで困っている問題がありまして、ご教授していただきたくて投稿しました。下のようなプログラムを実行しますと Warning: session_register() [function.session-register]: Cannot send session cookie - headers already sent by (output started at C:\Apache Group\Apache2\htdocs\sample\test.php:3) in C:\Apache Group\Apache2\htdocs\sample\test.php on line 30 となってしまいます。なぜか昨日は上手く行っていたのですが、今日こんなエラーがでて解決できないでいます。ためしにtmpに保存されていたセッションファイルを削除してみたりしたのですがだめでした。原因が分かる方是非ご教授お願いいたします。 <?php //セッション変数の保存フォルダのパス session_save_path("C:/Apache Group/Apache2/htdocs/sample/tmp"); if(isset($_POST[simei]) and isset($_POST[pass])){ $con=sqlite_open("../SQLiteManager/php_db"); $sql = "select * from **** where **** = '$_POST[****]' and **** = '$_POST[*****]'"; $result = sqlite_query($con,$sql); $row = sqlite_num_rows($result); if($row==0){ $not= "正しくありません"; } else{ //////////セッション変数設定//////////// session_start(); session_register("simeix","passx"); $_SESSION[simeix]=$_POST[simei]; $_SESSION[passx]=$_POST[pass]; //////////////////////////////////////// header("location: abcdefg.php"); exit(); } } else{ echo "ハンドルネーム、パスワードを入力してください。"; } ?> <html> <body> <div id=a> <table><tr><td><font color="#ffffff"> <B>ログイン</b></font></td> </tr> <tr><td> <form action="acntop.php" method="post"> <font color="#ffffff">HDネーム:</font><input type="text" name="simei"value="" > <font color="#ffffff">パスワード:</font><input type="password" name="pass" value=""> <input type="submit" value="送信"> </form> </td> </tr></table> <?=$not;?> </div> </body> </html>

    • ベストアンサー
    • PHP
  • phpのinclude_pathのエラーについて

    phpで以下のエラーが出ております。 いろいろ試しているのですが、解決できません。 各種設定ファイルに設定の誤りがあるのでしたら教えていただきたいと思います。 1)Fatal error: main(): Failed opening required '' (include_path='.;c:\php\includes') in C:\Apache2\htdocs\aaa\ins.php on line 26 2)Fatal error: main(): Failed opening required '' (include_path='.;c:\php4\pear') in C:\Apache2\htdocs\aaa\ins.php on line 26 c:\php4\pearというディレクトリは存在しないがなぜか出る。 3)Fatal error: main(): Failed opening required '' (include_path='.;c:\php\includes\aaa') in C:\Apache2\htdocs\aaa\ins.php on line 26 4)Fatal error: main(): Failed opening required '' (include_path='.;C:\Apache2\htdocs\aaa') in C:\Apache2\htdocs\aaa\ins.php on line 26 ##ins.phpのソース: $tpl = "ccc.tpl"; require_once($tpl); ##ディレクトリ構成 C:\Apache2\htdocs\aaa ins.php ccc.tpl ##php.iniの設定: ---有効にした場合1)のメッセージ include_path = ".;c:\php\includes"  ---コメントアウトした場合2)のメッセージ ;include_path = ".;c:\php\includes"  ---以下のpathにフォルダを作成してccc.tplを配置した場合3)のメッセージ include_path = ".;c:\php\includes\aaa" ---以下のpathを指定した場合4)のメッセージ include_path = ".;C:\Apache2\htdocs\aaa" ##httpd.confの設定: line 231 DocumentRoot "C:/Apache2/htdocs" line 256 <Directory "C:/Apache2/htdocs"> AllowOverride Options AuthConfig ##環境 os:winXP apache2:apache_2.0.58 php:PHP Version 4.4.1

    • ベストアンサー
    • PHP
  • smartyテンプレート読み込みについて

    Smarty動的Webサイト構築入門という書籍を見ながらSmartyを学習しているのですが、書籍のCD-ROMから落としたサンプルファイルを保存しているのですがどうしてもテンプレートを読み込むことができません。 03_01.php <?php require_once("../smarty/libs/Smarty.class.php"); $smarty = new Smarty(); $smarty->template_dir = "templates"; $smarty->compile_dir = "templates_c"; $smarty->assign("name", "Smartyさん"); $smarty->display("03_01.tpl"); ?> 03_01.tpl Hello, {$name}!! エラーメッセージ Warning: Smarty error: unable to read resource: "03_01.tpl" in C:\xampp\htdocs\smartybook\smarty\libs\Smarty.class.php on line 1092 03_01.phpは、C:\xampp/htdocs/smartybook/ren/に保存しています。 03_01.tplは、C:\xampp/htdocs/smartybook/templates/に保存しています。 どこが駄目なのか教えてください。 宜しくお願いします。

    • 締切済み
    • PHP
  • SESSIONを階層ごとに分けるには?

    お世話になります。 現在.htaacessでパラメータをRewriteしてアドレスをスッキリさせています。 【htaccess】 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([-0-9A-Za-z]+)/([-0-9A-Za-z)]+)$ index.php?a=$1&b=$2 [L] www.sample.com?a=test1&b=test2 を www.sample.com/test1/test2 といった形にしています。 SESSIONのパスが現在「/」となっており、どのページでセッションを発行しても「www.sample.com」以下ならすべて有効になっているのですが、これをその階層以下でしか使えないようにする方法はありますでしょうか? 【例】 www.sample.com/test1/aaaa で発行したセッションはその階層(test1)以下でのみ有効としたい。 www.sample.com/test1/aaaa 、www.sample.com/test1/bbbb で開いたセッションは1つ目の階層(test1)以下どのページでも有効にしたい 実際に「test1」フォルダが存在するわけではないため、htaccessを設置することができず、また「test1」の階層名も様々であるため困っています。 どうぞよろしくおねがいいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう