PHP致命错误:需要打开失败

JM4*_*JM4 8 php require include

我有一个名为'sess-start.php'的脚本,它位于我的httpdocs目录中的/ include目录中.

我的网站继续给出这个错误:\

[Fri Mar 25 14:52:24 2011] [错误] [客户端12.3.3.3] PHP致命错误:require()[function.require]:无法打开所需的'/includes/sess-start.php'(include_path =' .:')在第4行的/var/www/vhosts/site.com/httpdocs/page.php中,参考:https: //www.site.com/

尽管www.site.com/includes存在DOES.是什么赋予了!

编辑1

这些包含/要求本身可能包含其他要求或包含声明.相对路径不会工作,所以请不要这样做.

我的.htaccess文件已经指向站点根目录的所有包含路径:

php_value include_path.:/ var/www/vhosts/site.com/httpdocs

编辑2

并非所有的include或者必需的脚本都包含在一个目录中,因此建议简单地将/ includes目录放在include_path中也会被取消(反过来也会导致Windows机器出现问题)

更新

也许对现实生活中的例子做一些澄清可能有助于解决我们团队试图解决的问题:

在一个页面上,用户可以输入多个选项,以下页面进行必要的计算,并根据这些计算将客户路由到许多可能的选项中,所有这些选项都会导致需要语句,如DB条目.

然后,在数据库条目(或其他一些操作)内,如果一切顺利,该成员可能已经选择之前根据他/她的行动接收电子邮件确认.此require语句位于第二个require(db insert)内,但与第二个目录位于不同的目录中,因此在第一个文件错误地处理链接时会导致冲突.

对绝对路径进行硬编码甚至每页设置适当的包含路径都是'ok'但是它会禁用我们团队使用Dreamweaver(或任何其他执行相同操作的程序)在文件之间进行热链接的能力,因为它无法识别'site root '在测试环境中运行时.

And*_*ore 8

您的路径前面有正斜杠(/).

在POSIX兼容系统中,如果路径以正斜杠开头,则表示它是绝对路径.第一个正斜杠表示文件系统的根.

从路径中删除正斜杠,然后您应该有一个相对于的路径page.php.

编辑:由于相对路径不起作用,您可以使用dirname(__FILE__)获取当前文件所在目录的绝对路径.

require(dirname(__FILE__) . '/includes/sess-start.php');
Run Code Online (Sandbox Code Playgroud)

  • @ JM4:它有缺陷......只要做一个`realpath('/')`你就会很快找到它.无论环境如何,如果路径以斜杠"/"开头,则**始终为绝对**.因此,在Windows下,`/ includes/sess-start.php`指向`C:\ includes\sess-start.php`.在*nix下,它指向`/ includes/sess-start.php`.不相信我?[`realpath()`](http://php.net/realpath)吧.**所有三个答案都说完全相同:让你的道路绝对**.也许我们没有错......做一个大众更换. (3认同)

mar*_*rio 6

您需要使用相对路径.当您的文件名以/PHP 开头时,您将认为您的意思是根目录.正确的前缀是./

include('./includes/sess-start.php');
Run Code Online (Sandbox Code Playgroud)

如果您希望所有路径都相对于文档根目录,那么这是一种常用方法:

include("$_SERVER[DOCUMENT_ROOT]/includes/sess-start.php");
Run Code Online (Sandbox Code Playgroud)