如何解决该错误;致命错误:require():无法打开required'/供应商/autoload.php';(包括路径=';C:\xampp\php\PEAR';)?”;

如何解决该错误;致命错误:require():无法打开required'/供应商/autoload.php';(包括路径=';C:\xampp\php\PEAR';)?”;,php,composer-php,phpdotenv,Php,Composer Php,Phpdotenv,因此,我在php应用程序中使用vlucas/phpdotenv来存储和使用环境变量。我创建了一个db.php文件,其中包含数据库连接的配置。文件夹结构是root/config/db.php 我有require('../vendor/autoload.php')在db.php文件中,然后我使用 $dotenv=dotenv\dotenv::createImmutable('../'); $dotenv->load(); 打印(美元环境); 访问环境变量,因为.env文件位于目录的根目录中。当我访

因此,我在php应用程序中使用vlucas/phpdotenv来存储和使用环境变量。我创建了一个db.php文件,其中包含数据库连接的配置。文件夹结构是root/config/db.php

我有
require('../vendor/autoload.php')在db.php文件中,然后我使用

$dotenv=dotenv\dotenv::createImmutable('../');
$dotenv->load();
打印(美元环境);
访问环境变量,因为.env文件位于目录的根目录中。当我访问服务器上的db.php文件时,一切都很好,但当我将此文件包含在根目录中的register.php文件中时,我会得到错误“致命错误:require():无法打开required'../vendor/autoload.php'(include_path='C:\xampp\php\PEAR')

但是,当我更改autoload.php的目录以匹配路径时,会出现以下错误: “未捕获的Dotenv\Exception\InvalidPathException:无法读取位于[../.env]的任何环境文件。”

有人能帮帮我吗?谢谢。

让我们看看这个。 您的目录结构似乎如下所示:

/
|- register.php
|- login.php
|- .env
|- /config
   |- db.php 
/
|- /public
   |- login.php
   |- register.php
|- .env
|- bootstrap.php
|- /conf
   |- db.php
这有几个问题。其中之一是:web浏览器无法访问的文件可以访问。(尝试调用您的domain.com/.env如果您没有使用.htaccess文件来保护它,那么您将向公众泄露您的数据库信息)

但回到你的问题上来:
。/
是一个相对路径。相对于文件,这是调用的入口点。 让我们看一下:如果调用
config/db.php
,那么
当前工作目录将是
config
。/
将指向根路径。 如果调用
register.php
,则
当前工作目录
将是根路径,
。/
将指向父目录

你应该这样做:

/
|- register.php
|- login.php
|- .env
|- /config
   |- db.php 
/
|- /public
   |- login.php
   |- register.php
|- .env
|- bootstrap.php
|- /conf
   |- db.php
public
中的每个文件都应该包含将在其中执行dotenv的
bootstrap.php
。您可以使用
\uuuu DIR\uuuu/,而不是像
'./env'
这样的东西。env'
。 这有几个好处:

  • 您不会有泄漏敏感文件/数据的风险
  • 您总是有相同的包含路径,不必担心从何处调用此文件
缺点:

  • 您必须将服务器配置为服务于公用文件夹,而不是根目录

看起来您使用的是相对路径,但希望它的功能类似于绝对路径

../notation表示父目录,因此如果移动文件,父目录也会更改

与其相对地工作,我更喜欢建立一个基础,向上工作

使用
$\u服务器['DOCUMENT\u ROOT']
,这是应用程序根目录的文件路径

require($_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php');
然后在
createImmutable
静态调用中使用相同的符号。我不知道你应该把它指向哪里。如果是根,请使用

$dotenv=Dotenv\Dotenv::createImmutable($_SERVER['DOCUMENT_ROOT']);
$dotenv->load();
print_r($_ENV);

您好,您创建了.env文件吗?是的,我在根文件夹中创建了一个.env文件,其中包含所有数据库信息,如用户名、密码、主机等。是的,这正是我现在的文件夹结构。如果有人键入www.website.com/.env而不更改文件夹结构,是否有办法创建对.env文件的访问块?同时考虑到您的文件夹结构,如何阻止某人访问浏览器中的.env文件?谢谢你在这方面的帮助D正如@hubare所提到的,我能够使用$\u SERVER['DOCUMENT\u ROOT']方法修复它。>如果有人在www.website.com/.env中键入内容,是否有方法可以创建对.env文件的访问块是的。您可以在
.htaccess
中定义不能提供哪些文件。(假设您使用Apache。)>同时考虑到您的文件夹结构,如何阻止某人访问浏览器中的.env文件?您可以将服务器的web根目录设置为
/public
。因此,无法访问
/public
之外的任何文件。(如果你看看任何现代框架,它们都有一个
/public
文件夹)>(假设你使用的是Apache)。我使用'PHP-S localhost':XXXX在PHP服务器上运行它。>>您可以将服务器的web根目录设置为/public。因此,无法访问/public之外的任何文件。哦,是的,这是有道理的。非常感谢>我注意到很多现代框架使用public作为根目录。非常感谢你的帮助。