这是什么意思“(include_path ='。:/ usr / share / pear:/ usr / share / php')”?

时间:2013-08-08 06:17:38

标签: php path cron apache2 include-path

我在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`

8 个答案:

答案 0 :(得分:9)

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

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

  • (这意味着您的代码所在的当前目录)
  • 的/ usr /共享/梨
  • 的/ usr /共享/ PH

任何包含()/ require()内容的尝试都将按此顺序查看这些目录。

它告诉您在错误消息中告诉您哪里找不到您要求的文件()

对于你的第一个要求,如果你的index.php中包含了这个,那么你不需要dir的东西,只需这样做:

require_once ( 'db/config.php');

答案 1 :(得分:7)

解决问题的方法

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

如果你看一下PHP常量[PATH_SEPARATOR] [1],你会发现它是":"对你而言。

如果你拆分你的字符串"。:/ usr / share / pear:/ usr / share / php"使用该角色,你将得到3个部分

  • (这意味着您的代码所在的当前目录)
  • 的/ usr /共享/梨
  • 的/ usr /共享/ PH

任何包含()/ require()内容的尝试都将按此顺序查看这些目录。

它告诉您在错误消息中告诉您哪里找不到您要求的文件()

这是导致错误的原因。

现在要解决方案

  1. 第1步:使用命令php --ini(在我的情况下:/etc/php5/cli/php.ini
  2. 找到php.ini文件
  3. 第2步:使用include_path在vi中找到esc,然后按/include_path,然后按enter
  4. 第3步:如果已注释并取消包含您的服务器目录,则取消注释该行,您的路径应如下所示include_path = ".:/usr/share/php:/var/www/<directory>/"
  5. 第4步:重启apache sudo service apache2 restart
  6. 就是这样。 希望它有所帮助。

答案 2 :(得分: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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

这就是显示PHP在哪里查找文件的目录。确保cron1.php存在于您认为的位置。并确保您知道dirname(__FILE__)$_SERVER['DOCUMENT_ROOT']指向您所期望的位置。

可以在php.ini文件中调整此值。

答案 5 :(得分:0)

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

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

我把它改成了

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

现在工作正常。

答案 6 :(得分:0)

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

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

在禁用allow_url_include的情况下,此方法无效。相反,该文件必须包含在本地路径中,并且有三种方法可以做到这一点:

使用相对路径,例如../includes/example_include.php。 通过使用绝对路径(也称为相对于根),例如/home/username/example.com/includes/example_include.php.

使用PHP环境变量$_SERVER['DOCUMENT_ROOT'],该变量将返回Web根目录的绝对路径。到目前为止,这是最好的(也是最便携式的)解决方案。以下示例显示了运行中的环境变量。

包含示例

<?php include($_SERVER['DOCUMENT_ROOT']."/includes/example_include.php"); ?>

答案 7 :(得分:0)

就跑

 composer install

然后,

 php artisan migrate

最后,通过

启动服务器
php artisan serve

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