PHP 中的其他页面无法通过 AJAX 访问环境变量 .env
Environment Variable .env Is Not Accessible On Other Pages in PHP via AJAX
我正在做一个普通的 PHP 项目,其中有一些文件结构如下。
project_folder
--> .env
--> autoload.php
--> index.php
--> Controllers
--> IndexController.php
现在我的文件包含以下代码。
.env
# App Constants
APP_ENV = localhost
APP_URL = http://localhost/project_folder
APP_DOMAIN = https://localhost/project_folder
APP_DIR = __DIR__
# Database Connection
DATABASE_HOST = localhost
DATABASE_NAME = test
DATABASE_USER = root
DATABASE_PASSWORD = root
autoload.php
$ENV_filepath = '.env';
$lines = file($ENV_filepath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
if (strpos(trim($line), '#') === 0) {
continue;
}
list($name, $value) = explode('=', $line, 2);
$name = trim($name);
$value = trim($value);
if (!array_key_exists($name, $_SERVER) && !array_key_exists($name, $_ENV)) {
putenv(sprintf('%s=%s', $name, $value));
$_ENV[$name] = $value;
$_SERVER[$name] = $value;
}
}
index.php
<?php
session_start();
require_once 'autoload.php';
?>
<form onsubmit="return submitted(this)">
<input type="text" name="UserName" required="" maxlength="200">
<input type="password" name="UserPassword" required="" maxlength="200">
<div id="showGeneralAjaxMsg"></div>
<input type="submit" title="Sign In Now" value="Sign In"/>
</form>
<script type="text/javascript">
function submitted(incomingForm) {
var FD = new FormData(incomingForm);
FD.append("Function", "Login");
var ajx = new XMLHttpRequest();
ajx.onreadystatechange = function () {
if (ajx.readyState == 4 && ajx.status == 200) {
document.getElementById("showGeneralAjaxMsg").innerHTML = ajx.responseText;
}
};
ajx.open("POST", "Controllers/IndexController.php", true);
ajx.send(FD);
document.getElementById("showGeneralAjaxMsg").innerHTML = "LOADING: Server Is Responding.";
return false;
}
</script>
IndexController.php
<?php
echo "This Text Is Showing After Submit At index.php Page Only";
print_r($_ENV);
echo getenv('APP_ENV');
?>
但是我返回的是空环境变量。响应结果中没有显示任何内容,我只能看到“此文本在 index.php 页面提交后显示”。
现在我的问题是PHP中环境变量的范围是什么?请记住,我没有使用 OOP 概念。这是简单的编程。另外,我很困惑我是否必须在每个 PHP 页面上加载 autoload.php 文件?如果你的回答是肯定的,那么我在 .env 中设置了一些相关变量,这些变量只能从项目根文件夹中保存,而不能从任何其他级别保存。
等待澄清...
您可以使用会话变量将数据存储在变量中,这些变量可以在系统的不同页面中访问
- 假设变量名是 var1,那么只需使用 $_SESSION['var1']
- 确保 session_start();使用会话变量
放置在所有 PHP 脚本的顶部
<?php
session_start();
$_SESSION['var1'] = $var1;
// other statements
?>
我正在做一个普通的 PHP 项目,其中有一些文件结构如下。
project_folder
--> .env
--> autoload.php
--> index.php
--> Controllers
--> IndexController.php
现在我的文件包含以下代码。
.env
# App Constants
APP_ENV = localhost
APP_URL = http://localhost/project_folder
APP_DOMAIN = https://localhost/project_folder
APP_DIR = __DIR__
# Database Connection
DATABASE_HOST = localhost
DATABASE_NAME = test
DATABASE_USER = root
DATABASE_PASSWORD = root
autoload.php
$ENV_filepath = '.env';
$lines = file($ENV_filepath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
if (strpos(trim($line), '#') === 0) {
continue;
}
list($name, $value) = explode('=', $line, 2);
$name = trim($name);
$value = trim($value);
if (!array_key_exists($name, $_SERVER) && !array_key_exists($name, $_ENV)) {
putenv(sprintf('%s=%s', $name, $value));
$_ENV[$name] = $value;
$_SERVER[$name] = $value;
}
}
index.php
<?php
session_start();
require_once 'autoload.php';
?>
<form onsubmit="return submitted(this)">
<input type="text" name="UserName" required="" maxlength="200">
<input type="password" name="UserPassword" required="" maxlength="200">
<div id="showGeneralAjaxMsg"></div>
<input type="submit" title="Sign In Now" value="Sign In"/>
</form>
<script type="text/javascript">
function submitted(incomingForm) {
var FD = new FormData(incomingForm);
FD.append("Function", "Login");
var ajx = new XMLHttpRequest();
ajx.onreadystatechange = function () {
if (ajx.readyState == 4 && ajx.status == 200) {
document.getElementById("showGeneralAjaxMsg").innerHTML = ajx.responseText;
}
};
ajx.open("POST", "Controllers/IndexController.php", true);
ajx.send(FD);
document.getElementById("showGeneralAjaxMsg").innerHTML = "LOADING: Server Is Responding.";
return false;
}
</script>
IndexController.php
<?php
echo "This Text Is Showing After Submit At index.php Page Only";
print_r($_ENV);
echo getenv('APP_ENV');
?>
但是我返回的是空环境变量。响应结果中没有显示任何内容,我只能看到“此文本在 index.php 页面提交后显示”。
现在我的问题是PHP中环境变量的范围是什么?请记住,我没有使用 OOP 概念。这是简单的编程。另外,我很困惑我是否必须在每个 PHP 页面上加载 autoload.php 文件?如果你的回答是肯定的,那么我在 .env 中设置了一些相关变量,这些变量只能从项目根文件夹中保存,而不能从任何其他级别保存。
等待澄清...
您可以使用会话变量将数据存储在变量中,这些变量可以在系统的不同页面中访问
- 假设变量名是 var1,那么只需使用 $_SESSION['var1']
- 确保 session_start();使用会话变量 放置在所有 PHP 脚本的顶部
<?php
session_start();
$_SESSION['var1'] = $var1;
// other statements
?>