作曲家 如何解决错误"Fatal error: require(): Failed opening required '../vendor/autoload.php' (include_path=



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

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

$dotenv=DotenvDotenv::createImmutable('../');
$dotenv->load();
print_r($_ENV);

访问环境变量,因为.env文件位于目录的根目录中。当我访问服务器上的db.php文件时,一切都很好,但当我将此文件包含在根目录中的register.php文件中时,我会收到错误";致命错误:require((:无法打开必需的"/vendor/autoload.php'(include_path='C:\examplep\php\PEAR'("。

然而,当我更改autoload.php的目录以匹配路径时,我会收到以下错误:"未捕获的Dotenv\Exception\InvalidPathException:无法读取[../.env]中的任何环境文件;

有人能帮我吗?非常感谢。

看起来您使用的是相对路径,但期望它像绝对路径一样发挥作用。

../表示法意味着父目录,所以如果移动文件,父目录也会更改。

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

使用$_SERVER['DOCUMENT_ROOT'],它是应用程序根目录的文件路径。

require($_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php');

然后在createImmutable静态调用中使用相同的表示法。我不知道你应该把它指向哪里。如果它是根,请使用。。。

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

让我们来看看这个。您的目录结构似乎是这样的:

/
|- register.php
|- login.php
|- .env
|- /config
|- db.php 

这有几个问题。其中之一是:不应被web浏览器访问的文件是可访问的。(试着调用你的域.com/.env如果你没有通过.htaccess文件保护它,那么你会将数据库信息泄露给公众(

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

你应该选择这样的东西:

/
|- /public
|- login.php
|- register.php
|- .env
|- bootstrap.php
|- /conf
|- db.php

public中的每个文件都应该包括bootstrap.php,其中将执行dotenv。您可以使用__DIR__/ . '.env'来代替'./env'。这有几个好处:

  • 您不会有泄露敏感文件/数据的风险
  • 您总是有相同的包含路径,不必担心从哪里调用此文件

缺点:

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

相关内容

  • 没有找到相关文章

最新更新