スレッド表示 | フラット表示〕 全トピック 920 件中 814 番目 次≫ ≪前

引数が渡らない

created: 2003-09-02 01:29 | modified: 2003-09-03 23:45 | reply: 8

[580] 引数が渡らない

user: タミー ホームページ | created: 2003-09-02 01:29
サーバーを移転したらこれまで機能していた部分が機能しなくなりました。その部分とは、こんな内容です(抜粋です)。

// サブ
function change($line, $num, $user, $no){
$rec = explode("<>", $line[$no]);
if($user != $rec[7]){error("登録者しか変更できません");}
・・・・・
}
// メイン
$user = $_SERVER["REMOTE_USER"];
if($_POST[action] == "change"){
change($line, $num, $user, $_POST[ch]);
}

この$userが渡らないのです。$userはメインでは表示されるのですが、functionに渡らないようです。

メインを、
$user = "xxxx";
if($_POST[action] == "change"){
change($line, $num, $user, $_POST[ch]);
}

とすると正常に渡ります。これは、$_SERVER["REMOTE_USER"]特有のことなのでしょうか?それともPHPのバージョン、もしくは設定の問題でしょうか?ちなみに分かる限り他の部分は正常に動いています。
reply: 582 返信 編集 削除

[582] バージョンが古いのでは?

user: ぺぷ | created: 2003-09-02 02:33
4.1.0以前ですと「$HTTP_SERVER_VARS」じゃないと無理みたいです。

もしくはphp.iniのregister_globalsの設定が違うのでは?

きっとどちらかだと思います
Parent: 580  reply: 589 返信 編集 削除

[589] ありがとうございます

user: タミー | created: 2003-09-02 11:10
PHPのバージョンは4.2.2でかなり新しいです。
また、getenvでも同様になります。同じメインルーチンの中なら、ブラウザに出力されるのでいったんは$userに入っているのだと思うのですが、なぜか渡らない。不思議でしょうがないのです。
register_globalsの設定でしょうか?
Parent: 582  reply: 595 返信 編集 削除

[595] Re.ありがとうございます

user: yagi | created: 2003-09-02 17:38
>PHPのバージョンは4.2.2でかなり新しいです

お使いのサーバは何でしょうか?
サーバ環境によってはバージョン4.1.0以降でも$_SERVERを取得できないことがあるそうです。

解決策としては必ず取得できると期待できない$_SERVERの使用はやめて、
パスをグローバル変数にセットしてはどうでしょうか?
Parent: 589  reply: 598 返信 編集 削除

[598] サーバー環境

user: タミー | created: 2003-09-02 18:37
確か RedhatLinux、Apacheの組み合わせだったと思います。

ただ、一度は$_SERVER["REMOTE_USER"]が変数に入っているようなんです…。それがfunctionに引数として渡らないのは???なんです。
Parent: 595  reply: 601 返信 編集 削除

[601] >サーバー環境

user: yagi | created: 2003-09-03 00:40
>一度は$_SERVER["REMOTE_USER"]が変数に入っているようなんです…

いったいどの時点で確認できているのでしょう?
間違いなく$userに値が入っているのが確認できたのにパラメタが渡らないということは

if($_POST[action] == "change")

の条件を満たしていないとしか思えませんけど。
このifブロックが実行されているのは確認できました?
Parent: 598  reply: 604 返信 編集 削除

[604] 長くなりますが

user: タミー | created: 2003-09-03 11:18
functionの外側で$userをブラウザに出力してみると表示されます。

if($_POST[action] == "change")
>の条件を満たしていないとしか思えませんけど

functionに挿入したエラー(スクリプト上の)が表示されますので、条件を満たして実行しているのは確かだと思うのですが。一緒に渡している他の引数は表示されます。

テストとしてこんなのを同じディレクトリーで実行してみたら、ちゃんと3番目も表示されます。基本的にやっていることは同じなのに。やはり、バージョン、もしくは設定の問題なのかも。

<?php
function get_user($user3){
echo "リモートユーザー名(_FUNC)は".$user3."です";
}
$user1 = getenv("REMOTE_USER");
$user2 = $_SERVER["REMOTE_USER"];
echo <<<END
<HTML>
<HEAD>
<TITLE>環境変数取得プログラム</TITLE>
</HEAD>
<BODY>
END;
echo "リモートユーザー名(getenv)は".$user1."です<BR>";
echo "リモートユーザー名(_SERVER)は".$user2."です<BR>";
get_user($user2);
echo "</BODY></HTML>";
?>
Parent: 601  reply: 605 返信 編集 削除

[605] Re.長くなりますが

user: yagi | created: 2003-09-03 19:03
>バージョン、もしくは設定の問題なのかも

今までのことをまとめると、

(1) $user = $_SERVER["REMOTE_USER"]は関数が実行される前に値が格納されているのを確認
(2) ifブロックが実行されているのも確認
(3) 関数に$user以外の引数が渡されているのを確認

ということですね?
バージョン/設定の問題というか、
$userに値が格納されているのを確認されているわけですよね?
こうなると直接スクリプトを見ないと何とも言えないですね。
Parent: 604  reply: 606 返信 編集 削除

[606] 少しわかりました

user: タミー ホームページ | created: 2003-09-03 23:45
最初のロードでは格納されているという前提で、そのあとのロードはPOSTデータで渡してみることで、スクリプトは機能するようになりました。下のようにして、あとはhtml部分のINPUTのhiddenで渡すようにしました。

if($_POST[user]){$user = $_POST[user];}
else{$user = $_SERVER["REMOTE_USER"];}

先にテストとして書き込ませていただいたものを、次のように変え再テストしてみました。

<?php
function get_user($user3){
echo "リモートユーザー名(_FUNC)は".$user3."です";
}
$user1 = getenv("REMOTE_USER");
$user2 = $_SERVER["REMOTE_USER"];
echo <<<END
<HTML>
<HEAD>
<TITLE>環境変数取得プログラム</TITLE>
</HEAD>
<BODY>
END;
echo "リモートユーザー名(getenv)は".$user1."です<BR>";
echo "リモートユーザー名(_SERVER)は".$user2."です<BR>";
get_user($user2);
echo <<<END
<FORM action="env.php" method="POST">
<INPUT type="submit" name="submit" value="reload">
</FORM>
END;
echo "</BODY></HTML>";
?>

すると、最初のアクセスではREMOTE_USERが全部表示されますが、reloadを押して再ロードすると全部値は消えてしまいます。すなわち、REMOTE_USER(だけかは分かりませんが)は最初のアクセス時だけ取得できて、同じスクリプトで再ロードすると取得できないということみたいです。functionに渡らないということではなかったようです。そもそも、値が消えていたのですから。前のサーバーもまだ使えるので、同じスクリプトで試してみたところ、こちらは問題なく再ロードでも表示します。

また、REMOTE_USERをHTTP_HOSTに書き換えると再ロードでも表示します。4.2.1?から4.2.2に移行するときにセキュリティの問題の解決といったことがあったと聞いていますが、なにか関係があるのでしょうか?

以前のサーバーでは取得できていたのですから、なぜ?という疑問の根本は消えませんが、とりあえず要因らしきものには一歩近づいたような気がします。長々、お騒がせしました。ありがとうございます。
Parent: 605  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 814 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑