我正在将使用 AJAX 获取的表数据加载到一个包含datatables的表中。逻辑使用getenv()
函数从.env文件中获取一些值。getenv()只在某些时候返回false,否则不会返回。
我试着在浏览器中打开数据表用来通过 AJAX 获取数据的URL(HTTP GET),在那里似乎一点问题都没有。
public function ap_FetchData()
{
$accountLibrary = new Account();
if($accountLibrary->checkIsUserLogged())
{
// do some stuff and print JSON - dummy logic
$data = [];
for($i=1;$i<=10;$i++)
{
$image = getBucketURL($i.".jpg");
$data[] = $image;
}
outPutAsJSON($data);
}
else outPutAsJSON("Your session is timed-out. Please login again.", 403);
}
有时候我会得到带有Bucket URL(部分)的JSON输出,有时候我会得到session is timed-out错误。然而,这种session timed-out行为只在 AJAX 上可见。checkIsUserLogged
位于库目录下的Account.php中
function checkIsUserLogged(): bool
{
$sessionName = getenv("session.name"); // this is the session name stored in env file sometimes and false sometimes
// do validation and return true or false
}
getBucketURL()位于帮助文件中。
function getBucketURL($key)
{
return getenv("s3bucket.url").$key;
/*
* some times this return as http://www.example.com/$key
* and
* some times it return only $key
* var_dump(getenv("s3bucket.url")) outputs (bool) false is second case
*/
}
预期产出:
{
"http://www.example.com/1.jpg",
"http://www.example.com/2.jpg",
"http://www.example.com/3.jpg",
.
.
"http://www.example.com/10.jpg"
}
实际问题输出:
{
"1.jpg",
"2.jpg",
"3.jpg",
.
.
"10.jpg"
}
编辑
$_SERVER["s3bucket.url]
,$_ENV["s3bucket.url]
和$_SERVER["session.name]
,$_ENV["session.name]
工作完美。似乎问题只出在getenv()
上
1条答案
按热度按时间uurv41yg1#
要获得更 “防弹” 的解决方案,请使用CodeIgniter 4的helper函数:
env(string $key, $default = null)
.即:
它首先搜索
$_ENV
变量中的 'key',然后搜索$_SERVER
环境变量,最后搜索getenv(string $varname, bool $local_only = false)
PHP函数。摘自:
https://github.com/codeigniter4/CodeIgniter4/blob/develop/system/Common.php