• 締切済み

global変数の取り扱いについて

石井と申します。 表題の件についてご質問させて頂きます。 現在、DBにセッション情報を保持させるように セッション・プログラムを作っているのですが、 以下のように、セッション関数を登録しているとして、 session_set_save_handler( 'my_sess_open', 'my_sess_close', 'my_sess_read', 'my_sess_write', 'my_sess_destroy', 'my_sess_gc' ); my_sess_read が呼ばれたときに、 DBに登録されていたセッション値をグローバル変数var1に保存し、 my_sess_writeが呼ばれたときに、 my_sess_writeの引数で指定されたセッション・データが、 var1と違うなら、DBを更新させるというふうにしたいと考えています。 それで、質問なのですが、 phpでいうグローバル変数var1は、他人からも参照が可能になっているのでしょうか? (値がスレッド間で共有されるのか?) 別の例えで言うなら、phpのグローバル変数は javaでいうstatic修飾子のような動きをするのでしょうか? 以上、宜しくお願い致します。

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

みんなの回答

回答No.1

いいえ、他人からは参照できません。PHPでいうグローバル変数の「グローバル」は、関数内で定義した変数は関数内のみで有効という「ローカル」に対しての「グローバル」です。 PHPはスクリプトの頭から始まってスクリプトの終わりで終了します。ただこれだけの動作ですので、例え同じスクリプトが同時に走っていたとしても、両者の間には関連性がありません。

wanted
質問者

お礼

なるほど、スクリプト内で有効なのですね。 有難うございました。

関連するQ&A

  • session_set_save_handler の実装について

    いつもお世話になります。 セッション管理を session_set_save_handler を使って実装を進めていたのですが、 session_set_save_handler を使わない場合、 -------------------------------------- session_ start(); $_SESSION('a') = 'teststring_a'; session_ write_ close(); session_ start(); $_SESSION('b') = 'teststring_b'; session_ write_ close(); -------------------------------------- のように書いても問題なく $_SESSION('a') $_SESSION('b') 共に正常に書き込めていました。 ところが、 session_set_save_handler を定義した途端、 動かなくなってしまいました。 -------------------------------------- session_ start(); $_SESSION('a') = 'teststring_a'; session_ write_ close(); -------------------------------------- では正常に動作していました。 -------------------------------------- session_ start(); $_SESSION('a') = 'teststring_a'; session_ start(); session_ write_ close(); -------------------------------------- でも正常でした。 これは session_set_save_handler のバグか、仕様なのでしょうか? 以上です。 わかる方いましたら、よろしくご教授お願いしますm( __ __ )m

    • ベストアンサー
    • PHP
  • session_set_save_handler と session_regenerate_id は同時に使えない?

    session_set_save_handlerを利用してセッションデータをDBに格納しているのですが、session_regenerate_idを使用するとIDが毎回変わるため、session_set_save_handler での UPDATEやDELETEなどが出来なくなってしまいます。 DELETE FROM session WHERE sid = ".session_id()."の為。 どのようにすれば両方同時に使用できるのでしょうか?

    • ベストアンサー
    • PHP
  • セッションが変数が取得できません

    こんにちは。初心者で大変申し訳ないのですが、2日間悩みましたがどうしても解決できないため質問させて頂きました。どうかご教授下さい。 PHPのセッション機能の利用をしようと以下のような環境でテストスクリプトを実行したのですが、うまくいきません。 PHPバージョン4.3.10 register_globals On session.auto_start Off session.bug_compat_42 On session.bug_compat_warn On session.cache_expire 180 session.cache_limiter nocache session.cookie_domain no value session.cookie_lifetime 0 session.cookie_path / session.cookie_secure Off session.entropy_file no value no session.entropy_length 0 session.gc_divisor 100 session.gc_maxlifetime 1440 session.gc_probability 1 session.name PHPSESSID session.referer_check no value session.save_handler files session.save_path /tmp session.serialize_handler php session.use_cookies Off session.use_only_cookies Off session.use_trans_sid On SESSION登録側スクリプト <?php session_start(); $_SESSION['tarou'] = 50; ?> <a href="test.php">test</a> 結果表示側スクリプト <?php session_start(); echo($_SESSION['tarou']); ?> session.use_trans_sid Onで透過的にURIにセッションIDを埋め込むタイプで、 セッションファイル自体は作られているのですが セッション変数は登録されておらず、空のセッションファイルとなってしまっています。 色々と調べてみたのですがどうしても解決できません。 大変お手数ですがどうか宜しくお願い致します。

    • ベストアンサー
    • PHP
  • お願いします。

    CakePHP1.2で開発しております。 ユーザ登録をする処理でローカルではうまくいっていたんですが、本サーバで動作の確認をすると、DBに登録する際に次のようなWarningが出てしまい、登録ができません。 $this->User->save()の箇所で弾かれてしまいます。 Warning (2): Unknown: open(/var/lib/php/session/sess_in2e3u6bfrvq8c8orrkf82n516, O_RDWR) failed: Permission denied (13) [Unknown, line ??] Warning (2): Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) [Unknown, line ??] これはファイルのパーミッションが問題なのでしょうか。 時間がなくてテンパってしまってます。 宜しくお願いします。

    • 締切済み
    • PHP
  • セッションの変数の受渡しについて

    よろしくお願いします。 セッションを利用して変数受渡しを行おうと思い、初めての試み なので簡単なものを作ってやってみたのですが、変数に値をセットしたtest.phpでは値が表示されますが、リンク先のtest2.phpでは表示されません。 以下のソースで試しています。 -------------------------------------------------- test.php <?php session_start(); session_register("aa"); $_SESSION['aa'] = 1234; print $_SESSION['aa']; print "<p>"; print "<a href='test2.php'>next</a>";←ここの画面では表示されます。 ?> test2.php <?php session_start(); print $_SESSION['aa'];←表示されません ?> ---------------------------------------------- 想定では画面に”1234”と出ると思っていたんですが・・。 他質問をみて真似て色々試したのですが、やはり表示できませんでした。 環境は以下です apache2 php ver4.4.4 session Session Support enabled Registered save handlers files user Directive Local Value Master Value session.auto_start Off Off session.bug_compat_42 On On session.bug_compat_warn On On session.cache_expire 180 180 session.cache_limiter nocache nocache session.cookie_domain no value no value session.cookie_lifetime 0 0 session.cookie_path / / session.cookie_secure Off Off session.entropy_file no value no value session.entropy_length 0 0 session.gc_divisor 100 100 session.gc_maxlifetime 1440 1440 session.gc_probability 1 1 session.name PHPSESSID PHPSESSID session.referer_check no value no value session.save_handler files files session.save_path c:\windows\Temp c:\windows\Temp session.serialize_handler php php session.use_cookies Off Off session.use_only_cookies On On session.use_trans_sid On On 環境の問題でしょうか?各ブラウザで試したのですが、ダメでした。 初歩的質問で申し訳ありませんが、ご教示よろしくお願いします。

    • ベストアンサー
    • PHP
  • レンタルサーバーのセッション管理について

    無料でPHPを使えるレンタルサーバーでのセッション変数の使い方について教えていただきたく投稿いたしました。PHPインフォで調べてみますと、セッション変数は使える模様でした。セッション変数の保存先をsession_save_pathを使って自分のフォルダに変更しようとしているのですが、上手く行きませんでした。セッションに関する情報は下記の通りです。この中で/var/lib/php/sessionというパスがありますが、デフォルトの状態ではこのsessionというフォルダに保存されると思うのですが、レンタルサーバーですので多数の人が使っていますので、これを自分が作成した自分だけのフォルダに保存したいのですが、どうすればよいのでしょう。色々と試してみましたが上手く保存できませんでした。ちなみにセッションの保存先のパスのしていを、w7.oroti.com/~****/*****/sessionと言うようにしてみたり、指定されたファイルの置き場所がpublic_htmlというフォルダなので、 public_html/sessionとしてsessionフォルダを作ってみたり、したのですが保存できませんでした。詳しい方がおりましたら宜しくお願いいたします。セッションでの管理ができないので、クッキーで対応しております。でも、勉強のためになんとかこの課題を克服したいと思っています。宜しくお願いします。 <?php session_save_path("w7.oroti.com/~****/session"); session_start(); if(isset($_SESSION["cout"])){ $_SESSION{"count"]++; } else{ $_SESSION{"count"]=!; } ?> ------------------------------------------------------- session Session Support enabled Registered save handlers files user Registered serializer handlers php php_binary wddx Directive Local Value Master Value session.auto_start Off Off session.bug_compat_42 Off Off session.bug_compat_warn On On session.cache_expire 180 180 session.cache_limiter nocache nocache session.cookie_domain no value no value session.cookie_lifetime 0 0 session.cookie_path / / session.cookie_secure Off Off session.entropy_file no value no value session.entropy_length 0 0 session.gc_divisor 1000 1000 session.gc_maxlifetime 1440 1440 session.gc_probability 1 1 session.hash_bits_per_character 5 5 session.hash_function 0 0 session.name PHPSESSID PHPSESSID session.referer_check no value no value session.save_handler files files session.save_path /var/lib/php/session /var/lib/php/session session.serialize_handler php php session.use_cookies On On session.use_only_cookies Off Off session.use_trans_sid 0 0

    • ベストアンサー
    • PHP
  • セッション情報をDBに持つには

    下記のサイトを見つけ、参考にしようと思いましたが... http://www.res-system.com/weblog/item/619 行った事は下記の通りです。 1.セッション情報を格納するテーブルを作成。 2.php.iniの変更。 聞きたい事は下記の通りです。 1.session_set_save_handler関数はどこに記述すればいいのでしょうか。 2.ユーザー定義のセッション保存関数(f_open、f_close、f_read、f_write、f_destroy、f_clean)はどのように記述すればいいのでしょうか。 このような書き方をして申し訳ありませんが私を助けて下さい。 すみませんがご教授いただけませんでしょうか。 データベースはPostgreSQL 8.4.9です。 宜しくお願いします。

    • 締切済み
    • PHP
  • セッション変数と配列

    通常の変数であれば、 $var = array($_POST["var1"], $_POST["var2"], $_POST["var3"]); ですが、セッション変数を配列にするにはどうしたら良いのでしょう? (配列から取り出す方法も含め) $var = array($_POST["var1"], $_POST["var2"], $_POST["var3"]); $_SESSION["$var"]; や $_SESSION["$var"] = array($_POST["var1"], $_POST["var2"], $_POST["var3"]); としてみましたが、ダメなんですね。 よろしくお願いいたします。 *PHPバージョンは5です

    • ベストアンサー
    • PHP
  • クッキー名が変わってしまう

    セッション管理でクッキーを使用しています。 setcookie("ABCID" , $ABCID, time() + 1440); というようにクッキー名を決めているのですが、 ある環境だと名前が変わって取得できません。 var_dump($_COOKIE)で確認すると windows(ローカル)では、IE・Firefox共に array(2) { ["PHPSESSID"]=> string(26) "q3jsuelppgapa425lmtmhgf222" ["ABCID"]=> string(26) "q3jsuelppgapa425lmtmhgf222" } それに対してLinuxサーバにアップして確認すると(win)IEでは array(1) { ["0850256NQ"]=> string(26) "xdxppwkpdxtrcepaaaw&00a224" } というように設定した覚えのない名前が表示されます。 Firefoxでは問題なく取得できます。 php.iniの設定なのか、まったく予測ができなく困っています。 お力をお貸しください。 php5 session.auto_start Off Off session.bug_compat_42 Off Off session.bug_compat_warn On On session.cache_expire 180 180 session.cache_limiter nocache nocache session.cookie_domain no value no value session.cookie_httponly Off Off session.cookie_lifetime 60 60 session.cookie_path / / session.cookie_secure Off Off session.entropy_file no value no value session.entropy_length 0 0 session.gc_divisor 1000 1000 session.gc_maxlifetime 1440 1440 session.gc_probability 1 1 session.hash_bits_per_character 5 5 session.hash_function 0 0 session.name PHPSESSID PHPSESSID session.referer_check no value no value session.save_handler files files session.save_path /tmp /tmp session.serialize_handler php php session.use_cookies On On session.use_only_cookies On On session.use_trans_sid 0 0 ini_set('session.save_handler', 'user');

    • ベストアンサー
    • PHP
  • PHP SESSION変数の削除について

    PHPでブラウザを×で閉じた場合、SESSION変数 の廃棄はどうすればよいのでしょうか? ガーペジコレクション(PHP.INI等の設定)に任せておけばよいのでしょうか? ちなみにログアウトの際は下記のプロシジャを実行しています。 ----------------------------- <?php session_start(); // セッション変数を全て解除する $_SESSION = array(); // セッションを切断するにはセッションクッキーも削除する。 // Note: セッション情報だけでなくセッションを破壊する。 if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } // 最終的に、セッションを破壊する session_destroy(); ?> -----------------------------

    • 締切済み
    • PHP

専門家に質問してみよう