• 締切済み

特定の変数の値をセッションを使わずに引き継ぐ方法

PHPだと、output_add_rewrite_var()という関数 http://jp2.php.net/manual/ja/function.output-add-rewrite-var.phpで、 特定の変数をセッションを使わずに引き継ぐ方法があるのですが、 Perlで同じ事を実現できるでしょうか?

みんなの回答

  • maura
  • ベストアンサー率46% (48/104)
回答No.1

output_add_rewrite_var 関数と echo 関数を作れば 同様の動作を行えます。 http://jp2.php.net/manual/ja/function.output-add-rewrite-var.php のサンプルを参考にPerlで実現したのが以下のソースです。 use strict; use warnings; use vars qw(%AddVar); sub echo; sub output_add_rewrite_var; output_add_rewrite_var('var', 'value'); output_add_rewrite_var('foo', 'bar'); ## リンク echo '<a href="file.php">リンク</a> <a href="http://example.com">リンク2</a>'; ## フォーム echo 'aiueo <form action="script.php" method="post"> <input type="text" name="var2" /> </form>'; sub echo { my $text = shift; my ($hiddenPost, $hiddenGet) = ("",""); foreach my $vn (keys %AddVar) { $hiddenPost .= qq(<input type="hidden" name="$vn" value="$AddVar{$vn}" />\n); $hiddenGet .= $hiddenGet eq "" ? qq(?$vn=$AddVar{$vn}) : qq(&$vn=$AddVar{$vn}); } # form if ( $text =~ /<form[^>]+>/ ){ $text =~ s/(.*)(<form[^>]+>)(.*)/$1$2\n$hiddenPost$3/; } elsif ( $text =~ /<a href="/ ){ $text =~ s/(.*)(<a href="[^"]+php)(".*)/$1$2$hiddenGet$3/; } print $text . "\n"; } sub output_add_rewrite_var { my ($Name, $Value) = @_; $AddVar{$Name} = $Value; }

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • セッション変数と配列

    通常の変数であれば、 $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
  • session_startについて質問

    phpの公式マニュアル(オンライン版)のsession_startの解説(http://www.php.net/manual/ja/function.session-start.php)には「session_start — セッションデータを初期化する」とあります。 たとえば、$_SESSION[hoge] = hoge;として、他のページに遷移した際、セッションデータが初期化されるなら、$_SESSION[hoge]のデータも消えてしかるべきな気がするのですが、どういうことなのでしょうか? 解説できる方、いらっしゃいましたら平易に解説していただけると助かります。

    • ベストアンサー
    • PHP
  • セッションに登録されたデータを全て破棄する方法

    http://php.net/manual/ja/function.session-destroy.php 上記サイトのPHPマニュアルにセッションのデータを削除する方法が載っていました。 しかし、以下のスクリプトの仕組みだけが全く分かりません。 どなたか、教えてください。お願いします。 if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"] ); }

    • 締切済み
    • PHP
  • jqueryのグローバル変数とローカル変数

    知識のある方に教えて頂きたいことがございます。 jqueryを何気なく組んでいたもので、基礎的なことがわかっておらず ご教示頂きたいのですが、 下記に記述した変数の(1)~(6)をどれが グローバル変数で、どれがローカル変数なのかご教示いただけますでしょうか。 関数の中は全てローカル変数になるという事を聞いたので、(3)と(4)はローカル変数、 プラグイン自体関数なので、(5)と(6)はローカル変数 (1)と(2)はグローバル変数だと考えておりますが、あっていますでしょうか。 どうかよろしくお願い致します。 $(function(){ var a = 0;//(1) b = 0;//(2) function Kansu(){ var c = 0;//(3) a = 1;//(4) } }) /* ----------------------------------------- */ (function($){ $.fn.testPlugin = function(options){ var d = 0;//(5) e = 0;//(6) } });

  • $obj->varの変数のアクセスの仕方。

    php5で、 $objMyClass = new MyClass(); $objMyClass->var // varは任意で、実際は何でもよい。 print_r($objMyClass); として見たら、varという変数が$objMyClassに定義されているようなのですが、この変数へのアクセスをどうやったらいいのかわかりません。 教えてください。 と、言いますのは、zendFrameWorkでは、 http://framework.zend.com/manual/ja/zend.session.basic_usage.html $authNamespace = new Zend_Session_Namespace('Zend_Auth'); $authNamespace->user = "myusername"; とすると、 $_SESSION['Zend_Auth']['user'] = "myusername"; と同じ結果になるようなのです。 これは"user"を、Zend_Session_Namespaceクラス内で、 $_SESSION['Zend_Auth']の後ろにくっつけて多次元配列化しているんですよね? これと同じ実装をしたいと思っています。 もしかして何か勘違いしてますでしょうか?

    • ベストアンサー
    • PHP
  • セッションの破棄

    セッションについて質問です。 $_SESSION['username']を複数ページで使用した後、破棄しようと思うのですが、エラーが出てしまいます。 セッション自体は破棄できていると思うのですが、これはどういったエラーなのでしょうか? ソースコード <?php session_start(); ?> <!DOCTYPE html> <head> <meta charset="utf-8" /> <title>セッション破棄</title> </head> <body> <?php //セッション変数を全て解除 $_SESSION = array(); //セッションクッキーの削除 if (isset($_COOKIE["PHPSESSID"])) { setcookie("PHPSESSID", '', time() - 1800, '/'); } //セッションを破棄する session_destroy(); if(empty($_SESSION['username'])){ echo "<p>セッション終了</p>"; echo "<a href='session.php'>はじめのページへ</a>"; echo "<a href='index.php'>top</a>"; } ?> </body> </html> エラーメッセージ Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/etdfftytg/etdfftytg.php.xdomain.jp/public_html/session3.php:1) in /home/etdfftytg/etdfftytg.php.xdomain.jp/public_html/session3.php on line 2 Warning: Cannot modify header information - headers already sent by (output started at /home/etdfftytg/etdfftytg.php.xdomain.jp/public_html/session3.php:1) in /home/etdfftytg/etdfftytg.php.xdomain.jp/public_html/session3.php on line 16 Warning: session_destroy(): Trying to destroy uninitialized session in /home/etdfftytg/etdfftytg.php.xdomain.jp/public_html/session3.php on line 20

    • ベストアンサー
    • PHP
  • PHPのセッション終了について

    PHPのセッション終了について http://c-brains.jp/blog/wsg/08/05/22-193020.php こちらのサイトでPHPを勉強しています。 セッションについてなのですが、セッションの開始と関数の働きはつかめたのですが、セッションの終了について不明な点があります。 <?php // セッションの開始 session_start(); // セッション変数の初期化 $_SESSION = array(); // セッションファイルの削除 session_destroy(); ?> この部分なのですが、セッション変数の初期化のみの記述では何がいけないのかが分かりません。 $_SESSION = array(); のみの記述で試してみたところ、$_SESSION に含まれていたキーを呼び出しても中身を出力しなかったので、ちゃんと中身は消えたと思うのですが、この場合、session_destroy()を実行する意味はあるのでしょうか? 何卒ご教授いただけますようお願い致します。

    • ベストアンサー
    • PHP
  • 変数など厳密なプログラムが書きたいのですが、どうすればよいでしょうか?

    PHPで関数の引数に渡すとき、以下のように$aaを$aとしてしまった場合に 関数内の$idは値がありませんが、関数内でこれを検出することができるのでしょうか? Perlなら use strict;とし、my等で定義されていない変数はすべて警告表示されますが、PHPはスルーです。 変数など厳密なプログラムが書きたいのですが、どうすればよいでしょうか? $aa = 1; test($a) function test($id){ ... }

    • ベストアンサー
    • PHP
  • session_unregisterとunsetの違い

    表題の件で質問させて下さい。 ttp://php.s3.to/man/function.session-unregister.html を参考にしているのですが、 「session_unregister() は現在のセッションから name という名前のグローバル変数の登録を 削除します。」 と 「この関数は、nameに対応するグローバル変数 の登録を削除しません。」 で矛盾しているように思えます。 意識して使い分ける必要はありますでしょうか。

    • 締切済み
    • PHP
  • 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