1

サイト全体で使用するサーバー環境変数を定義した PHP 構成ファイルがあります。「htmlspecialchars($_SERVER['REQUEST_URI'])」を使用してフォームを送信した後、構成設定が機能しない理由について少し困惑しています。

フォームは入力を検証してサニタイズし、データベースを完全に更新します。ただし、送信後、ページの絶対パスはすべてドキュメント ルート パスに切り替わります。このエラーにより、css + js の不適切なリンクが作成されます。すべてのリンクはページの読み込み時に正しく、投稿の送信後に変更されます。http://php.net/manual/en/reserved.variables.server.phpにリストされている複数の予約済みサーバー変数を試してみましたが、成功しませんでした。

助言がありますか?知恵を共有していただきありがとうございます。;-)

ENV 変数:

<?php
  $url = $_SERVER['HTTP_HOST'];
  $stage = 'domain.net';
  $prod = 'domain.com';
  $dev = 'localhost';

  if ($url == $dev){
    $path = 'http://'.$url. dirname($_SERVER['REQUEST_URI']);
    include_once 'dev.php';
  } elseif ($url == $stage) {
    $path = 'http://'.$url. dirname($_SERVER['REQUEST_URI']);
    include_once 'stage.php';
  } else {
    $path = 'http://'.$url;
    include_once 'prod.php';
  }
?>

前のフォーム マークアップ:

<form id="idname" action="<?php echo htmlspecialchars($path . '/' . basename($_SERVER['REQUEST_URI']));?>" method="post">

フォーム マークアップ後:

<form id="idname" action="/Users/username/Sites/project/folder" method="post">

前のスタイルシート リンク:

<link type="text/css" rel="stylesheet" media="screen, handheld" href="/Users/username/Sites/project/folder/css/global.css">

後のスタイルシート リンク:

<link type="text/css" rel="stylesheet" media="screen, handheld" href="/Users/username/Sites/project/folder/css/global.css">

バグを修正しました。私のコードを修正して終了します。

$url = $_SERVER['SERVER_NAME'];
$dir = dirname($_SERVER['REQUEST_URI']);

$env = array(
    'dev' => 'http://localhost/'. $dir, 
    'stage' => 'http://domain.net/'. $dir, 
    'prod' => 'http://domain.com' 
);

if ($url !== $env['prod']) {
    if($url === $env['stage']) {
        $env = $env['stage'];
        include_once 'stage.php';
    } else {
        $env = $env['dev'];
        include_once 'dev.php';
    }
} else {
    $env = $env['prod'];
    include_once 'prod.php';
}
4

0 に答える 0