require('/head.inc.php') 指 /var/www/html/head.inc.php 也就是php认为head.inc.php是一个在html路径下的目录,而不是一个php文件。

解决方案 »

  1.   

    或者你可以这样写:require(dirname(__FILE__).'/head.inc.php')
      

  2.   

    require 使用的是文件系统的路径而不是 web 的路径
      

  3.   

    谢谢changjay和xuzuning,但是dirname(__FILE__)获取的是当前文件的路径吧?我要获取根目录,例如有个子目录文件/var/www/html/report/index.php同样也要reqire根目录下的head.inc.php,如果用dirname(__FILE__)的话,就变成了require '/var/www/html/report/head.inc.php'版主提到的是文件系统的路径,我想可能是这个原因,我试下改成/var/www/html/head.inc.php
      

  4.   

    版主,我试着改成了文件系统目录,可以了zmzkkk,我已经把Apache的DocumentRoot和Directory都设置成了/var/www/html,还有其他要修改的吗?网上说用/就表示根目录,好像include也是按文件系统目录的,这个问题google了半天也很少人提及大家还有什么更好的解决办法?晚上结贴
      

  5.   

    是的 / 表示根目录既然你的在做网站,那么你就不得不面对两个系统,也就是有两个根
    网站的文件存放在操作系统的文件系统中,/var/www/html,/是文件系统的根
    浏览器访问的是 http://localhost/index.php,/是 web 系统的根web 系统的根是由你在 web 服务器中指定的,如
    DocumentRoot = /var/www/html其实 php 已经给出了解决方案:include_path
      

  6.   

    谢谢版主,但是我改了/etc/php.ini的include_path=".:/var/www/html",还是会出现:
    Fatal error: require() [function.require]: Failed opening required '/head.inc.php' (include_path='.:/var/www/html') in xxx我改后重启了linux,确认var,www,html以及html下面所有文件都是755,关闭了SeLinux(getenforce=permissive),但是还是错误。改成了你说的require('/var/www/html/head.inc.php')就可以,我再查查
      

  7.   

    Novolee,我也想过一个全局变量,但是绝对路径还是会泄露到php代码里
      

  8.   

    发现还有个变量$_SERVER['DOCUMENT_ROOT'],我用这个变量替代/又可以了就是直接用/为什么还不可以
      

  9.   

    PhpNewnew,我的网页有好几层,但是header.inc.php,css样式表全部放在根目录里,所以直接用根目录加载这些会方便很多。./只能读取到当前目录Novolee,是,但是php里就必须写成/var/www/html/head.inc.php了,有点担心这样的路径会不会不小心显示到网页里,所以还是用'DOCUMENT_ROOT了谢谢大家,结贴