“(include_path='.:/usr/share/pear:/usr/share/php')”是啥意思?

Posted

技术标签:

【中文标题】“(include_path=\'.:/usr/share/pear:/usr/share/php\')”是啥意思?【英文标题】:what does it mean "(include_path='.:/usr/share/pear:/usr/share/php')"?“(include_path='.:/usr/share/pear:/usr/share/php')”是什么意思? 【发布时间】:2013-08-09 18:13:06 【问题描述】:

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

【问题讨论】:

require_once在哪个php页面?是在index.php吗? 【参考方案1】:

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

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

【讨论】:

但是你能告诉我它是什么意思“(include_path='.:/usr/share/pear:/usr/share/php')” 它给了我'/var/www/html' 我需要更改php.ini 中的任何内容吗? 我告诉过你想要这个意思。它告诉您引擎在哪些目录中查找您的文件。它是一个冒号分隔的列表。所以它查看了.,这是当前的工作目录。然后它查看/usr/share/pear,最后查看/usr/share/php。它无法找到您的文件。 你不需要弄乱 php.ini 文件,忽略我说的那部分。【参考方案2】:

如果您查看 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');

【讨论】:

【参考方案3】:

其实解决方法是打开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

【讨论】:

【参考方案4】:

问题的解决方法

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

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

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

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

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

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

这是错误的原因。

现在找到解决方案

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

就是这样。 希望对您有所帮助。

【讨论】:

另外,在require_once中,我们必须使用完整路径为:`require_once'/var/www//'` 如果您在免费主机上无权访问 php.ini 文件怎么办?【参考方案5】:

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

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

【讨论】:

【参考方案6】:

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

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

我改成

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

现在工作正常。

【讨论】:

【参考方案7】:

许多开发人员通过指向远程 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"); ?>

【讨论】:

【参考方案8】:

快跑

 composer install

然后,

 php artisan migrate

最后,启动服务器

php artisan serve

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

【讨论】:

以上是关于“(include_path='.:/usr/share/pear:/usr/share/php')”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章