我有一个PHP包含路径为/ usr / share / php的站点 在这条路径中,我有一个包含一些实用程序文件的子文件夹,例如在/ usr /共享/ PHP / utils的。 my_session.php是这些实用程序文件之一。
我的应用程序调用
require ("my_session.php");
即使该文件实际位于utils文件夹中,也可以正常工作。
我正在尝试在另一个安装中复制此站点,我收到错误:
Failed opening required 'my_session.php' (include_path='.:/usr/share/php)
我的问题是:
php包含路径还应该包含include路径中子文件夹中的文件吗? 这似乎是我原始网站上的情况,我不知道为什么第二个网站上的行为似乎有所不同。
答案 0 :(得分:4)
根据PHP文档,当您尝试包含文件时,仅检查include_path指令中列出的路径。 PHP不应该检查它们的子文件夹。
答案 1 :(得分:2)
我的猜测是因为您使用require
的相对路径而失败。
您的include_path
定义为.:/usr/share/php
。这意味着require('my_session.php')
执行时只会检查两个文件夹:
/usr/share/php
我不知道您的文件夹结构,所以让我们想象一下:
my_project
- app
-- index.php
- lib
-- my_session.php
现在,如果my_project/app/index.php
尝试require('my_session.php')
这将失败,因为执行require
时的当前文件夹为my_project/app/
并且my_session.php
相对于my_project/app/
没有相应的文件条目(相对于my_project/lib/
而言)。
长话短说:尝试使用绝对路径而不是相对路径,例如。
require('/var/www/html/my_project/lib/my_session.php');
编辑:删除及其子文件夹,这是错误的。我脑子里的__autoload太多了^^
答案 2 :(得分:0)
两种解决方案:
将/usr/share/php/utils
添加到您的include_path。
或
使用require ("utils/my_session.php");