![](/img/trans.png)
[英]Fatal error: require_once(): Failed opening required 'C:\core/vendor/autoload.php' (include_path='C:\xampp\php\PEAR') in C:\Users\zu
[英]How do I solve the error “Fatal error: require(): Failed opening required '../vendor/autoload.php' (include_path='C:\xampp\php\PEAR') ?”
所以我在我的 php 应用程序中使用 vlucas/phpdotenv 来存储和使用环境变量。 我创建了一个 db.php 文件,其中包含我的数据库连接的配置。 文件夹结构为 root/config/db.php。
我有require('../vendor/autoload.php');
在 db.php 文件中,然后我使用了
$dotenv=Dotenv\Dotenv::createImmutable('../');
$dotenv->load();
print_r($_ENV);
访问环境变量,因为 .env 文件位于目录的根目录中。 当我访问服务器上的 db.php 文件时,一切正常,但是当我将此文件包含在位于根目录中的 register.php 文件中时,我收到错误“致命错误:要求():打开所需的失败”。 ./vendor/autoload.php' (include_path='C:\xampp\php\PEAR')"。
但是,当我更改 autoload.php 的目录以匹配路径时,我会收到此错误:“未捕获 Dotenv\Exception\InvalidPathException:无法读取 [../.env] 处的任何环境文件。”
有人可以帮我吗? 谢谢你。
看起来您正在使用相对路径,但期望它像绝对路径一样 function 。
../ 符号表示父目录,因此如果您移动文件,父目录也会更改。
与其相对工作,我更喜欢建立一个基础并向上工作。
使用$_SERVER['DOCUMENT_ROOT']
,它是应用程序根目录的文件路径。
require($_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php');
然后在createImmutable
static 调用中使用相同的符号。 我不知道你应该指向哪里。 如果是根,请使用...
$dotenv=Dotenv\Dotenv::createImmutable($_SERVER['DOCUMENT_ROOT']);
$dotenv->load();
print_r($_ENV);
那么让我们来看看这个。 您的目录结构似乎是这样的:
/
|- register.php
|- login.php
|- .env
|- /config
|- db.php
这有几个问题。 其中之一是:web 浏览器不应访问的文件是可访问的。 (尝试调用 your-domain.com/.env 如果您没有通过 .htaccess 文件保护它,那么您会将您的数据库信息泄露给公众)
但回到你的问题: ../
是一个相对路径。 相对于文件,这是调用的入口点。 让我们看一下:如果调用config/db.php
,那么current working directory
将是config
并且../
将指向根路径。 如果调用register.php
,则current working directory
将是根路径,而../
将指向父目录。
你应该用这样的东西 go :
/
|- /public
|- login.php
|- register.php
|- .env
|- bootstrap.php
|- /conf
|- db.php
public
的每个文件都应包含bootstrap.php
,其中将执行 dotenv。 而不是像'./env'
之类的东西,你可以使用__DIR__/. '.env'
__DIR__/. '.env'
。 这样做有几个好处:
缺点:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.