我在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`
答案 0 :(得分:9)
如果您查看PHP常量PATH_SEPARATOR,您会看到它为“:”。
如果你使用该字符拆分你的字符串“。:/ usr / share / pear:/ usr / share / php”,你将得到3个部分
任何包含()/ require()内容的尝试都将按此顺序查看这些目录。
它告诉您在错误消息中告诉您哪里找不到您要求的文件()
对于你的第一个要求,如果你的index.php中包含了这个,那么你不需要dir的东西,只需这样做:
require_once ( 'db/config.php');
答案 1 :(得分:7)
正如Uberfuzzy [问题的真正原因]所提到的
如果你看一下PHP常量[PATH_SEPARATOR] [1],你会发现它是":"对你而言。
如果你拆分你的字符串"。:/ usr / share / pear:/ usr / share / php"使用该角色,你将得到3个部分
任何包含()/ require()内容的尝试都将按此顺序查看这些目录。
它告诉您在错误消息中告诉您哪里找不到您要求的文件()
这是导致错误的原因。
现在要解决方案
php --ini
(在我的情况下:/etc/php5/cli/php.ini
)include_path
在vi中找到esc
,然后按/include_path
,然后按enter
include_path = ".:/usr/share/php:/var/www/<directory>/"
sudo service apache2 restart
就是这样。 希望它有所帮助。
答案 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 依赖项...因此这样做,,你会喜欢的。