• ベストアンサー

phpソース間で値を保持しておける変数は?

aaa.php、bbb.php、ccc.php、・・・・ と、複数のソースファイルが存在します。 その間で、共通に値を保持でき、また、どのソース内でも代入で入れ替えることができる変数ってありますか? global変数って、同phpファイル内で、function間での保持のみですよね? ちなみに、使用しているPHP Versionは 4.4.2です。 よろしくお願い致します。

  • THUBAN
  • お礼率76% (771/1002)
  • PHP
  • 回答数5
  • ありがとう数5

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

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.5

がるです。質問を織り交ぜつつ。 > アクセスするユーザー(2種類)によって、表示するメニューを切り替えてくれというものです。 これはまぁ極めてよくある処理かと思われます。 > しかし、ユーザーを認識する何らかの値が渡されるわけではありません。 これは、依頼者からの希望なのでしょうか? 基本的にはこういう振り分けにはCookie(ないしより望ましい回答としてはPOST メソッド)での、セッションID(或いはセッションIDを含む文字列を暗号化したもの。私はこっちを勧めます)を用いるものなのですが。 > Aユーザーには、index_a.phpをアクセスさせ、Bユーザーには、index_b.phpをアクセスしてさせるということで要望されました。 これは、もし「ユーザBがindex_a.phpを手で入力すればアクセスできてしまう」可能性が高いのですが、それはそれでよいんでしょうか? 必要に応じて、依頼者に確認すべきかと。 > 表示メニューのオン・オフは、config.php内での変数に1か0の値の代入で行っているのですが、config.phpはindex.phpだけでなく、すべてのphpソースの先頭でincludeしているので、2種類のindex.phpを作っても、同じconfig.phpを呼んでしまいます。 まずconfig.phpの作りにもよるんでしょうが。もしかして「ベタで書いてあるからincludeしたらいきなり走る」つくりになってませんか? まずは関数(ないしより好ましい状態としてはclass)での実装にかえるべきです。 で、例えば index_a.php の行頭 require_once("config.php"); $conf_obj = new config; $conf_obj->set_flg(0); $conf_obj->run(); index_b.php の行頭 require_once("config.php"); $conf_obj = new config; $conf_obj->set_flg(1); $conf_obj->run(); という風におこなえば、十分に可能だと思うのですが。 ちなみに#4さんの回答にある「多言語からのセッション情報の引継ぎ」ですが。 基本的にセッションは、ほとんどCookieで扱っているのが通例です。ただどういった実装をするかは色々とありますので、そのあたりは上位のプログラムの仕様書をチェックするなりすべきかと思われます。 最後に。個人的見解で恐縮ですが。各種セキュリティ上の脆弱性その他が指摘されているので、PHP標準のセッション関数はあまりお勧めできません。 ご利用は自己責任の下に計画的に、って感じでしょうか。

THUBAN
質問者

お礼

PHPのセッション関数と、クッキー関数までは試すことができましたが、クラスまでに手が届きませんでした。 でも、勉強になりました。 どうもありがとうございました。

THUBAN
質問者

補足

> これは、もし「ユーザBがindex_a.phpを手で入力すればアクセスできてしまう」可能性が高いのですが、それはそれでよいんでしょうか? 必要に応じて、依頼者に確認すべきかと。 はい、これについては、完全とは言えませんが、ある程度想像できないindex名(例えば、ad_index_minxxxyyy.phpとか)で考えております。 「ご利用は自己責任・・・」の部分にも関連するかもしれないのですが、社内イントラ内での使用なので、使用者はすべて社内の人となります。 したがって、万一、BユーザーがAユーザーに入ったとしても、重大な問題というわけではありません。 > まずconfig.phpの作りにもよるんでしょうが。もしかして「ベタで書いてあるからincludeしたらいきなり走る」つくりになってませんか? はい、まったくそのとおりです。すいません。 主にはメニューのオンオフなどのフラグを立てているくらいです。 classの手法を用いたことがないので、classに関して知識が乏しいです。 したがって、 index_a.php の行頭 require_once("config.php"); $conf_obj = new config; $conf_obj->set_flg(0); $conf_obj->run(); index_b.php の行頭 require_once("config.php"); $conf_obj = new config; $conf_obj->set_flg(1); $conf_obj->run(); について、もう少し詳しくご説明いただけると、非常に助かります。 できれば、classの手法にチャレンジしてみたいと思いますので。 ただ、社内納期が一応、明日3/15までと言われているので、私でどこまで出来るかが問題なのですが・・ 「多言語からのセッション情報の引継ぎ」ですが、上位のプログラム仕様書というものが存在しません。 社内システムなので、設計も特になくて、PGのセンス任せでやらされているわけです。 私は通常PGの業務ではないのですが、過去に他社でPG経験があるということで、 サイトのある部分の機能の作り込みについて、助っ人として任されているのです。 このような背景ですが、ご理解いただけると幸いです。 また、お手数でなければ、さらにご教授いただけると助かります。 m(_"_)m

その他の回答 (4)

  • gentaro
  • ベストアンサー率47% (105/221)
回答No.4

難しいことを考えるよりセッションを勉強したほうがはるかに楽ですよ。 何も難しくありません。 全てのソースの先頭でsession_start()呼んで、 使いたいセッション変数に値を入れておけば、どのPHPに遷移しても値の参照、代入ができます。

THUBAN
質問者

お礼

PHPのセッション関数もクッキー関数も試してみました。 しかし、javascriptのonclickで、変数の値を入れ替えるように記述しているので、マウスクリックしていないのにブラウザ表示しただけで一番最後のonclickの値が代入されてしまいます。 どうやら、javascriptがセットされる時点で、変数に代入されてしまうようでダメでした。 どうもありがとうございました。

THUBAN
質問者

補足

そうすると上位でログインされた、ユーザー情報を当方のPHPから見に行かないといけないように思うのですが・・ 以下は、上位で行われているセッション処理の部分で、管理者の場合の処理でメールの書き込みが可能か判断する部分です。 (rubyかpealでコーディングしてると思われる。PHPではない。) このセッション情報(ユーザID?)を取得して、PHPで処理させないといけないように思うのですが・・・どうでしょう? <% if ! User.find(@session[:user].id).is_comu? %> <%= link_to image_tag('msg20.gif', :border => 0)+'メール作成を行う', :action => 'new' %> <% end %>

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

データの受渡しをしたいだけならGETやPOSTでも できます。

THUBAN
質問者

お礼

どうもありがとうございました。

THUBAN
質問者

補足

ありがとうございます。 GETやPOSTの存在も知っているのですが、未熟な上あまり使ったことがなく、具体的な手法が思い浮かばなくて・・

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

がると申します。 Global変数でもよく言われる話なのですが。「どのソース内でも代入で入れ替えることができる変数」が必要なのは、失礼ながら、多分設計自体にミスがあるのではないかと。 データは原則的に「局所にまとめる」ほうがよいです。 そのあたりはPHPに限らず色々なプログラムで応用がきくので、一度しっかりと履修されることをお勧めいたします。

THUBAN
質問者

お礼

どうもありがとうございました。

THUBAN
質問者

補足

ありがとうございます。 当初の設計とは違う、別の要件が今頃になって指定されました。 アクセスするユーザー(2種類)によって、表示するメニューを切り替えてくれというものです。 しかし、ユーザーを認識する何らかの値が渡されるわけではありません。 Aユーザーには、index_a.phpをアクセスさせ、Bユーザーには、index_b.phpをアクセスしてさせるということで要望されました。 表示メニューのオン・オフは、config.php内での変数に1か0の値の代入で行っているのですが、config.phpはindex.phpだけでなく、すべてのphpソースの先頭でincludeしているので、2種類のindex.phpを作っても、同じconfig.phpを呼んでしまいます。 ユーザーを識別する引数を、上からもらえるなら、config.phpを2種類用意して判定で切り替えられるのですが、2種類のindex.phpでという方法では困難を極めています。 そこで、全ソースで値を保持できる変数が使えれば、その変数にindex_a.phpにアクセスされた場合には“0”、index_b.phpにアクセスされた場合は“1”というようにフラグセットし、他のソースからそのフラグ見て、2酢類のconfig.phpのどちらをincludeさせるか判定できると考えています。 他に良い方法があればいいのですが・・・そのようなわけです。

  • kosa
  • ベストアンサー率25% (379/1464)
回答No.1

そんな場合はperlであればクッキーを使用しますが、PHPでもクッキーでも可能ですがセッション関数が使えます。 調べてみて下さい。

THUBAN
質問者

お礼

PHPのセッション関数もクッキー関数も試しました。 javascriptのonclickで、変数の値を入れ替えるように記述しているのですが、マウスクリックもしていないのにブラウザ表示しただけで一番最後のonclickの値が代入されてしまいます。 どうやら、javascriptがセットされる時点で、すでに代入されてしまうようでダメでした。 どうもありがとうございました。

THUBAN
質問者

補足

ありがとうございます。 セッション関数というのが使えるということは、 ネット上でも見ました。 ただ、具体的にどのように使うのか、理解できていません。 調べてはみたいとは思います。

関連するQ&A

  • PHPで変数から1行目だけを取得したい

    変数に格納されたデータの1行目のaaaだけを取り出す方法を教えてください。 ※データはWEBサイトのURLリストで常に変動します。 複数行のデータ(\n区切り) 例) aaa   bbb   ccc 又は1行の半角カンマや半角スペースなどの文字で区切られたデータ 例) aaa, bbb,ccc,    aaa bbb ccc 上記のどちらかの形式で変数$dataに格納が可能です。 この$dataに格納されたaaaだけを取得するにはどうしたらいいのでしょうか? PHP初心者のためプログラムソースを書いていただけると助かります。

    • ベストアンサー
    • PHP
  • PHPでテキストファイルを読み込み変数に代入する

    PHP超初心者ですみません。 aaa:111 bbb:222 ccc:333 444444 という内容のテキストファイルをPHPで読み込み aaa(変数名)=111(中身) bbb(変数名)=222(中身) ccc(変数名)=333\n444444(中身改行あり) という風にできないのでしょうか? いろいろ探しましたがわからなかったので よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 【PHP】 変数の受け渡しについて!

    abc.php のファイルで、掲示板の一覧を表示し、ソートボタンが押されたらソートの順に一覧を表示させる仕組みにしています。 ◆ abc.php のファイル // プルダウン検索の部分 function puru($AAA){ …省略 return $date; } // ページボタンの部分 function page1(){       // (2) …省略 <TR><TD><A href="abc.php?page='.$a.'&ddd=$i-10">前の10件</A></TD></TR> …省略 <TR><TD><A href="abc.php?page='.$b.'&ddd=$i">次の10件</TD></TR> …省略 } // 一覧表示の部分 function list(){ $log = file_read("log.php"); $su=10; $iu=1; if($_POST[bbb] ){$qaz=1;} // ソートボタンが押されたらの処理 for($i = $iu; $i < sizeof($log); $i++){      // (1) …省略 } if($qaz==1){ // なら一覧をソート順に表示 …省略 } } // メインヘッダーの部分(ソートするプルダウン) <SELECT size=1 name="bbb">'.puru($AAA).'</SELECT> <INPUT type="submit" value="ソート" name="ccc"> ここまではやってみましたが、一覧表示の部分の (1) のところの $i の変数の値を処理後、ページボタンの部分の (2) のところの $i に値を代入したいのですが、どうしたら良いのでしょうか?分らないので教えて下さい?宜しくお願い致します。 イメージ的には、一覧表示の部分の (1) のところの $i の変数の値を処理後、ページボタンの部分の (2) のところの $i に値を 代入したいのです。

    • 締切済み
    • PHP
  • ExcelのVBA。Staticな変数について

    あるプロシージャやfunctionで定義したstaticな変数は、その定義したsubやfunctionで有効です。今回、例えば、static a as integer とSub AAA 内で、定義し、その AAA が呼び出す BBB という ユーザーフォームの中でも staticな変数である a に値を代入したり、変更したりし、その後 sub AAAにまた入ったとき、BBBで変更した内容を保持することができるのでしょうか。

  • 入力チェックでの値の保持

    php(Version 4.3.11)でフォームの入力チェックを含んだ部分を作成しております。 1. aaa.phpにてデータ入力 2. bbb.phpにて入力されたデータの整合性をチェック    チェックを通ればccc.phpへ    チェックに引っかかればaaa.phpへ戻る ・・・※ ※において、aaa.phpにて入力されたデータを保持したいのですが、どよのうにするのが標準なのでしょうか? (「趣味」項目のテキストボックスに「ドライブ」と入力されていたら、aaa.phpに戻ったとき、「趣味」項目のテキストボックスに「ドライブ」をセットしたい。) 入力項目はかなり多いので、 Location:a.php? で引き継ぐのも良くないと思ってます。 今まではaspでイントラネットの開発ばかりだったので、全部JavaScriptで行っていました。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • bashなどのシェル変数の値に改行を含める事は可能でしょうか?

    タイトルの通りですが、通常のシェル変数の値として  [prompt]$ aaa="bbb<改行>ccc" のようなセットを行い、  [prompt]$ echo $aaa  bbb  ccc  [prompt]$ のような結果を得たいのですが、可能でしょうか。

  • PHPで値を保持する方法

    PHPで、リクエストをまたいで値を保持する方法を教えてください。というかサーバー起動時に1回処理をし、その情報を使い続ける方法といった方が適切かもしれません。「リクエストをまたいで」といってしまうと、反射的に「セッションに保存」といいたくなると思いますが、そういう話ではありません。 画面上に検索条件でSELECTリストを表示します。この情報を今は、画面表示のたびに毎回DBにアクセスしデータを取得しています。 しかしサーバーが起動している間程度の期間ではめったに変更することはない値なので、リクエストのたびにDBにとりに行くのがあまりにも無駄なので、これをやめたいと思っています。かといって年に何回かは変更があってもおかしくない値なので、そのたびにプログラムを変更するのではなく、あくまでもDBのデータの変更だけで済ませたいと思っています。 つまり、リクエストのたびにDBにとりに行くのではなく、PHPのプログラムファイルにハードコーディングするのでもなく、Webサーバーが起動したときに1回だけDBから読み込み、変数に保持しておき何度も使いまわしたいと思っています。 で、ためしにclassのstatic変数に値を設定してみたのですが、リクエストのたびに値が初期化されてしまいました。$GLOBALSに値を設定してもリクエストのたびに値が初期化されてしまいました。 Javaなどの言語では、当たり前に行う処理ですがPHPで実現する方法が分かりません。 PHPで、リクエストをまたいで値を保持する方法を教えてください。 もしかするとPHPでは、値を保持することはできないのでしょうか? もしそうだとすると、PHPでは同じ値をDBから何度も取得するケースではどのように対処しているのでしょうか?(DBのキャッシュ機能頼み?そもそもPHPは小規模しか扱わないから気にしない?) この点について教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • perl について

    http://AAA/BBB/???/CCC AAAとCCCは固定文字です。 BBBは変化します。 ///の数・順番も固定です。 この状態で、「???」を抜き出してZZZ変数に値を代入するにはどうすれば良いでしょうか? ZZZ=

    • ベストアンサー
    • Perl
  • ファイル(A)を読み込んで文字列を変数に代入、変数で別ファイル(B)を検索・・・

    お世話になっております。 まず、仕様から書かせて頂きたいと思います。 【ファイルA】 商品名 数量 ------------- AAA, 3 BBB, 5 CCC, 6 AAA,5 . . . 【ファイルB】 AAA,11111 BBB,12345 CCC,99999 . . . 【ファイルC】 商品コード 数量 ------------------ 11111 8 12345 5 99999 6 (1)ファイルAを読込み、アルファベット文字列を変数に代入 (2)変数でファイルBを検索 (ファイルAの最後まで検索) (3)検索してみつかったら 数字文字列(商品コードとします)に変換 (4)商品コードと、数量の合計をファイルCに出力 fgets、strcmpなどを使って試してみたのですが、 うまく行かず、教えていただけますでしょうか?

  • c++のグローバル変数

    お世話になります c++のグローバル変数の使い方を教えていただけないでしょうか Visual Studio 2008を使用しております ------------abc.cpp------------- int AAA; BBB(){ AAA = 1; } abc::CCC(){ AAA = 2; } コンパイル(ビルド)ではエラーは出ないのですが、 BBBをコールした時は変数AAAに値をセットできるのですが、 abc::CCCをコールした時、AAAに値がセットできません、 ウォッチ等も「エラー:識別子'AAA'はスコープ外です」 となってしまいます。 補足 BBBはリンクしているライブラリ(修正不可)からコールされる為、 クラスに組み込む事が出来ません。

専門家に質問してみよう