“(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/我遇到了类似的问题。 只是为了帮助有同样问题的人:
我的错误是 /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')”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章