サイト全体で使用するサーバー環境変数を定義した 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';
}