Laravel - 当 运行 排队作业时 $_SERVER['DOCUMENT_ROOT'] 为空?

Laravel - $_SERVER['DOCUMENT_ROOT'] empty when running queued jobs?

在我的一些文件中有这样几行:

require_once($_SERVER['DOCUMENT_ROOT'].'/../vendor/stripe/stripe-php/init.php');

通常一切都很好。现在我 运行 一些排队的作业,我看到了这样的错误:

Failed opening required '/../vendor/stripe/stripe-php/init.php' (include_path='.:/usr/local/php5/lib/php') in /Library/WebServer/Documents/mysite/app/Somemodel.php:9

所以就好像从 artisan 执行的时候 $_SERVER['DOCUMENT_ROOT'] 是空的。 我在 Sierra 的 MAC 上。也许我忽略了一些设置?

排队的作业在后台 运行,因此 $_SERVER['DOCUMENT_ROOT'] 为空,因为它是从网络服务器指令检索的路径

这也解释了为什么当 运行 Artisan CLI

时它是空的

您可以使用 base_path 代替

来要求文件
require_once base_path() . '/vendor/stripe/stripe-php/init.php';

这是 Artisan Tinker 的不同之处

~/Sites/laravel (master ✗) ✹ ★ ᐅ  tinker
Psy Shell v0.9.9 (PHP 7.3.9-1~deb10u1 — cli) by Justin Hileman
>>> require_once base_path() . '/vendor/stripe/stripe-php/init.php';
=> true
>>> require_once $_SERVER['DOCUMENT_ROOT'] . '/vendor/stripe/stripe-php/init.php';
PHP Fatal error:  Failed opening required '/vendor/stripe/stripe-php/init.php' in Psy Shell code on line 1
>>> $_SERVER['DOCUMENT_ROOT']
=> ""
>>> base_path()
=> "/home/caddy/Sites/laravel"