我正在将使用AJAX获取的表数据加载到具有数据表的表中.该逻辑使用getenv()函数从.env文件中获取一些值.此getenv()只在某些情况下返回False,否则不返回.

我try 在浏览器中打开DataTables用来通过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错误.然而,这种会话超时行为仅在AJAX上可见.

checkIsUserLogged在库目录下的Account t.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
     */
}

Expected output:

{
    "http://www.example.com/1.jpg",
    "http://www.example.com/2.jpg",
    "http://www.example.com/3.jpg",
    .
    .
    "http://www.example.com/10.jpg"
}

Actual problematic Output:

{
    "1.jpg",
    "2.jpg",
    "3.jpg",
    .
    .
    "10.jpg"
}

Edit

$_SERVER["s3bucket.url],$_ENV["s3bucket.url]$_SERVER["session.name],$_ENV["session.name]可以完美地工作.问题似乎只出现在getenv()

Output

推荐答案

对于'bulletproof'个以上的解决方案,请使用CodeIgniter 4的helper函数:

env(string $key, $default = null).

即:

echo env("s3bucket.url");

它首先搜索$_ENV变量中的'key',然后搜索$_SERVER环境变量,最后搜索getenv(string $varname, bool $local_only = false) PHP函数.


EXCERPT FROM:

https://github.com/codeigniter4/CodeIgniter4/blob/develop/system/Common.php


if (! function_exists('env')) {
    /**
     * Allows user to retrieve values from the environment
     * variables that have been set. Especially useful for
     * retrieving values set from the .env file for
     * use in config files.
     *
     * @param string|null $default
     *
     * @return bool|string|null
     */
    function env(string $key, $default = null)
    {
        $value = $_ENV[$key] ?? $_SERVER[$key] ?? getenv($key);

        // Not found? Return the default value
        if ($value === false) {
            return $default;
        }

        // Handle any boolean values
        switch (strtolower($value)) {
            case 'true':
                return true;

            case 'false':
                return false;

            case 'empty':
                return '';

            case 'null':
                return null;
        }

        return $value;
    }
}

Php相关问答推荐

无法使用PHP DomDocument找到IMG元素

Laravel通过(扩展FormRequest类)方法验证表单请求

PHP FFI—将PHP数组转换为C指针数组

将变体设置字段添加到WooCommerce中的特定变量产品

RediSearch PHP希望我在每次使用时定义所有字段

免费送货柜台,考虑到折扣码

如何在laravel中使用script type= text/html/script

如何将WooCommerce产品从一个产品复制到另一个产品S

添加不存在的订单元数据以扩展WooCommerce管理订单搜索

Filament v3:具有 hasMany 和 BelongsTo 的关系管理器

woocommerce_available_ payment_gateways 过滤器挂钩多次触发

使用 secure 和 httponly 选项删除 php 中的 cookie 值得吗?

PHP API - 本地主机中的 SSL 证书问题

WooCommerce 相关产品(按 children 类别)作为排名数学主要类别的后备

如何在 Laravel 中修改嵌套数组的键?

仅允许减少 WooCommerce 中已完成订单的库存数量

使用来自 PHP 表单的数据更新 xml 命名空间

判断类别是否存在 Shopware 6

从 CSV 文件 seeder 数据库时的额外行

hasOne/belongsToMany 或多对多