我有一个名为'sess-start.php'的脚本,它位于我的httpdocs目录中的/ include目录中。
我的网站继续提供此错误:\
[Fri Mar 25 14:52:24 2011] [错误] [client 12.3.3.3] PHP致命错误: require()[function.require]: 打开失败 '/includes/sess-start.php' (include_path =':')in /var/www/vhosts/site.com/httpdocs/page.php 在第4行,引用者: https://www.site.com/
尽管www.site.com/includes存在DOES。是什么给了!
这些包含/要求本身可能包含其他要求或包含声明。相对路径不起作用所以请不要这样做。
我的.htaccess文件已经指向站点根目录的所有包含路径:
php_value include_path :/无功/网络/虚拟主机/ site.com /的httpdocs
并非所有的include或必需脚本都包含在一个目录中,因此建议简单地将/ includes目录放在include_path中也会被取消(反过来也会导致Windows机器出现问题)
或许对现实生活中的例子进行一些澄清可能有助于解决我们团队试图解决的问题:
在一个页面上,用户可以输入多个选项,以下页面进行必要的计算,并根据这些计算将客户路由到许多可能的选项中,所有这些选项都会导致需要语句,如DB条目
然后,在数据库条目(或其他一些操作)中,如果一切顺利,该成员可能已经选择之前根据他/她的行动接收电子邮件确认。此require语句位于第二个require(db insert)内,但与第二个目录位于不同的目录中,因此在第一个文件错误地处理链接时会导致冲突。
对绝对路径进行硬编码甚至每页设置适当的包含路径都是“正常”但是它会禁用我们团队使用Dreamweaver(或任何其他执行相同操作的程序)在文件之间进行热链接的能力,因为它无法识别在测试环境中运行时的“站点根目录”。
答案 0 :(得分:8)
您的路径前面有正斜杠(/
)。
在POSIX兼容系统中,如果您的路径以正斜杠开头,则表示它是绝对路径。第一个正斜杠表示文件系统的根。
从路径中删除正斜杠,然后应该有一条相对于page.php
的路径。
编辑:由于相对路径不起作用,您可以使用dirname(__FILE__)
获取当前文件所在目录的绝对路径。
require(dirname(__FILE__) . '/includes/sess-start.php');
答案 1 :(得分:6)
您需要使用相对路径。当您的文件名以/
开头时,PHP将假定您指的是根目录。正确的前缀是./
include('./includes/sess-start.php');
如果您希望所有路径都相对于文档根目录,那么这是一种常用方法:
include("$_SERVER[DOCUMENT_ROOT]/includes/sess-start.php");
答案 2 :(得分:1)
看起来您需要从包含行中删除前导斜杠。
编辑:解决您的疑虑。在前置文件或一些常见包含中,创建一个类似DOCROOT
的常量。您可以从__FILE__
常量动态确定它。
然后:
include(DOCROOT.'myfile.php');
就个人而言,我会尽力设置以避免这类事情。