電子書籍の厳選無料作品が豊富!

header関数について独自関数を絡ませたいのですがいい方法が
思いつかず悩んでおります。

パソコン用、携帯用サイトがあり携帯サイトのみheaderで飛ばした
URLの最後にセッションを付加したいと思っております。

// 分岐により携帯であればセッションを変数作成しています。
$sis_id = '?' . session_name() . '=' . session_id();
// パソコンであれば$sis_idはnullなのでこの状態でもなにも付加されません。
header('Location: hoge.php' . $sis_id);

ここまでは問題ないのですが以下のようにURLに他のパラメーターを
持っている場合どうすればいいでしょうか?
header('Location: hoge.php?id=5' . $sis_id);

これだと$sis_idの頭は?ではなく&が必要になりますよね。
仮に$sis_idの?を外して以下のように書き換えるという手も考えた
のですがパソコンの場合hoge.php?id=5&のようなURLになってしまいます。
header('Location: hoge.php?id=5&' . $sis_id);

if文で分岐させそれぞれの飛び先をべた書き指定すれば済む話
なのですがソースを簡略化させたく独自関数などで自動化できない
ものかと思っております。

詳しい方がおりましたら是非アドバイスなど宜しくお願い致します。

A 回答 (2件)

文字列操作的な質問ということでいいのでしょうか?


<?php
$sis_id = session_name() . '=' . session_id();
$url = 'oge.php?id=5';
echo addParams($url, $sis_id);
redirect($url, $sis_id);

function addParams($url, $params = null)
{
  if (!$params) {
    return $url;
  }
  if (strpos($url, '?') === false) {
    return $url . '?' . $params;
  }
  return $url . '&' . $params;
}

function redirect($url, $params = null)
{
  $url = addParams($url, $params);
  header('Location: ' . $url);
}
    • good
    • 0

場合分けさえ考えればそんなに難しい話ではないのでは?


たとえばURLに「?」がはいっていれば&でつなぎ、そうでなければ
「?」でつなぐとか、やりようはあるでしょう

<?
$url="hoge.php?id=5";
$sis_id="hoge";
$url.=(preg_match("/\?/",$url)?"&":"?").$sis_id;
header('Location: ' . $url);
?>
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!