在 Laravel 5 中加载 GOOGLE_APPLICATION_CREDENTIALS

rse*_*ara 5 php google-cloud-storage laravel google-cloud-platform google-cloud-sdk

我正在使用 Laravel 5.2,并且php artisan config:cache按照官方文档中的建议进行操作以提高速度。

您可能知道,此命令使 .env 文件变量直接不可访问(您可以使用 测试它php artisan tinker),因此,除了 config 文件夹中的文件外,所有对env()和函数的调用都必须在代码中getenv()替换为。config()执行该命令后,调用类似env('APP_ENV')return NULL。

在我的项目中,我使用google-auth-library-php连接到 Google Cloud 。getenv(self::ENV_VAR)不幸的是,在 CredentialsLoader.php 文件中,有一个对尝试获取 Google 凭据文件路径的函数的调用。当我运行命令时php artisan config:cache,无法从 .env 文件读取路径,并且连接无法完成。

我可以看到 3 种继续的方法:

  1. 忘记跑步吧php artisan config:cache
  2. 在此询问是否有人知道如何将 Google 凭据文件的路径指定为包的任何函数的参数。
  3. (上帝请原谅我)将 CredentialsLoader.php 文件更正为getenv()config()运行命令并在存储库中跟踪此文件,然后在拉取时此更改将传播到每个团队成员。

先感谢您!

Lor*_*o S 0

这是一个非常古老的问题,但也许对于那些在 Laravel 的新版本中遇到同样问题的人来说可能很有用。基本上我没有一个适用于所有可能环境的解决方案,但它给出了想法。我的环境运行php7.4-fpmNGINX. 如果您使用相同的环境,您将拥有locationphp 文件的指令。Nginx 可以设置 FastCGI 参数fastcgi_param,您可能已经使用过它SCRIPT_FILENAME等。然后您可以添加

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    [...]
    fastcgi_param GOOGLE_APPLICATION_CREDENTIALS "/absolute/path/to/keyfile.json";
}
Run Code Online (Sandbox Code Playgroud)

然后只需重新加载 Nginx(例如 Ubuntu 20.04,sudo systemctl reload nginx)。

对于 Apache,同样的想法可能适用于SetEnv https://httpd.apache.org/docs/2.4/mod/mod_env.html#setenv