23

我在 EC2 上有文件结构,例如:但面临一些文件引用问题。

index.php
-db
  -config.php
-cron
  -cron1.php

我尝试将文件引用为:

`require_once (dirname(__FILE__).'/db/config.php');`
`require_once (($_SERVER['DOCUMENT_ROOT']).'/db/config.php');`

但 cron 没有运行。它在邮件中给出错误

`PHP Warning:  require_once(/db/config.php): failed to open stream: No such file or directory in /var/www/html/cron/cron1.php on line 3

Warning: require_once(/db/config.php): failed to open stream: No such file or directory in /var/www/html/cron/cron1.php on line 3

PHP Fatal error:  require_once(): Failed opening required '/db/config.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/cron/cron1.php on line 3

Fatal error: require_once(): Failed opening required '/db/config.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/cron/cron1.php on line 3`
4

8 回答 8

14

如果您查看 PHP 常量PATH_SEPARATOR,您会看到它是“:”。

如果您使用该字符拆分字符串“.:/usr/share/pear:/usr/share/php”,您将得到 3 个部分。

  • . (这意味着您的代码所在的当前目录)
  • /usr/share/梨
  • /usr/share/php

任何尝试 include()/require() 的东西,都会按照这个顺序在这些目录中查找。

它向您显示,在错误消息中让您知道它在哪里找不到您尝试 require() 的文件

对于您的第一个要求,如果它包含在您的 index.php 中,那么您不需要 dir 的东西,只需...

require_once ( 'db/config.php');
于 2013-08-08T06:38:47.660 回答
12

问题的解决方案

正如Uberfuzzy所提到的[问题的真正原因]

如果您查看 PHP 常量 [PATH_SEPARATOR][1],您会看到它是“:”。

如果您使用该字符拆分字符串“.:/usr/share/pear:/usr/share/php”,您将获得 3 个部分

  • . (这意味着您的代码所在的当前目录)
  • /usr/share/梨
  • /usr/share/ph

任何尝试 include()/require() 的东西,都会按照这个顺序在这些目录中查找。

它向您显示,在错误消息中让您知道它在哪里找不到您尝试 require() 的文件

这就是错误的原因。

现在来解决

  1. 第 1 步:使用命令找到您的 php.ini 文件php --ini(在我的情况下/etc/php5/cli/php.ini:)
  2. 第2步include_path在vi中找到esc然后按/include_paththenenter
  3. 第 3 步:如果已注释,请取消注释该行并包含您的服务器目录,您的路径应如下所示include_path = ".:/usr/share/php:/var/www/<directory>/"
  4. 第 4 步:重新启动 Apachesudo service apache2 restart

就是这个。希望能帮助到你。

于 2014-12-07T06:27:00.593 回答
1

实际上,解决方案是打开 php.ini 文件编辑 include_path 行并将其完全更改为

include_path='.:/usr/share/php:/usr/share/pear' 

或附加

'.:/usr/share/php:/usr/share/pear' 

到 include_path 的当前值。

进一步解释: http: //pear.php.net/manual/en/installation.checking.php#installation.checking.cli.phpdir

于 2014-07-30T10:41:48.867 回答
1

许多开发人员通过指向远程 URL 来包含文件,即使文件在本地系统中也是如此。例如:

<php include("http://example.com/includes/example_include.php"); ?>

禁用 allow_url_include 后,此方法不起作用。相反,该文件必须包含在本地路径中,并且有三种方法可以做到这一点:

通过使用相对路径,例如../includes/example_include.php. 通过使用绝对路径(也称为 relative-from-root),例如/home/username/example.com/includes/example_include.php.

通过使用 PHP 环境变量$_SERVER['DOCUMENT_ROOT'],它返回 Web 根目录的绝对路径。这是迄今为止最好的(也是最便携的)解决方案。以下示例显示了环境变量的作用。

示例包括

<?php include($_SERVER['DOCUMENT_ROOT']."/includes/example_include.php"); ?>
于 2019-12-17T07:23:55.580 回答
0

那只是向您显示 PHP 在哪里寻找您的文件的目录。确保它cron1.php存在于你认为它存在的地方。并确保您知道dirname(__FILE__)$_SERVER['DOCUMENT_ROOT']指向您期望的位置。

这个值可以在你的 php.ini 文件中调整。

于 2013-08-08T06:18:24.633 回答
0

我有一个类似的问题。只是为了帮助有同样问题的人:

我的错误是 /var/www 中文件的用户文件属性。将它们改回用户“www-data”后,问题就消失了。

于 2015-07-13T10:57:46.920 回答
0

在我的项目的根目录中包含文件时,我遇到了同样的错误。我在我的项目中codeigniter使用它common.php

<?php include_once base_url().'csrf-magic-master/csrf-magic.php';  ?>

我把它改成

<?php include_once ('csrf-magic-master/csrf-magic.php');  ?>

现在工作正常。

于 2015-11-07T05:54:52.807 回答
0

赶紧跑

 composer install

接着,

 php artisan migrate

最后,启动服务器

php artisan serve

运行composer install,问题是我们想在composer.json文件中安装 laravel 依赖项......因此这样做,,,你会喜欢的。

于 2021-06-29T18:00:20.507 回答