这是什么意思 “(include_path='.:/usr/share/pear:/usr/share/php')“?问题的解决方案

2022-08-30 18:32:02

我在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没有 run.it 在邮件中给出错误

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

答案 1

如果你看一下PHP常量PATH_SEPARATOR,你会看到它对你来说是“:”。

如果你把你的绳子拆开“.:/usr/share/pear:/usr/share/php“使用该字符,你会得到3个部分。

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

任何包含()/require()事物的尝试,都将按此顺序在这些目录中查找。

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

对于您的第一个需求,如果将其包含在您的索引.php,那么您不需要dir的东西,只需...

require_once ( 'db/config.php');

答案 2

问题的解决方案

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

如果你看一下PHP常量[PATH_SEPARATOR][1],你会看到它对你来说是“:”。

如果你把你的绳子拆开“.:/usr/share/pear:/usr/share/php“使用该字符,你会得到3个部分

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

任何包含()/require()事物的尝试,都将按此顺序在这些目录中查找。

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

这是错误的原因。

现在来看看解决方案

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

就是这样。希望它有帮助。


推荐