运行环境:
apache 2.0.49 + php 4.3.5 + win2000 professional sp4;
目录结构如下:
-webroot(是web发布根目录)
test.php
-lib(目录)
dbwrapper.php
-adodb(目录)
adodb.inc.php
文件内容如下:
test.php里面:
include_once(".lib/dbwrapper.php");
dbwrapper.php里面:
include_once("./adodb/adodb.inc.php");
奇怪的是,单独运行dbwrapper.php没关系,可是运行test.php的时候竟然说在dbwrapper.php里面找不到"./adodb/adodb.inc.php"这个文件。
难道是把test.php的目录级别应用于被他引用的dbwrapper.php上面才找不到adodb.inc.php的?是不是bug??
我的dbwrapper.php里面是一些对数据库操作的自定义函数和常量的封装,adodb目录下是adodb这个著名的数据库操作类。我用的虚拟主机,软件配置和我现在测试用的本地机器一样。遗憾的是,我不可能要求虚拟主机提供商给我在php.ini文件里面增加一个引用路径,又不可能把所有的文件放在同一层目录下(不好管理)。
谁能告诉我解决的办法,我将感激不尽!!
---------------------------------------------------------------
include_once("./lib/adodb/adodb.inc.php");
---------------------------------------------------------------
哦,是相对路径的问题啊。
解决方法一:
使用绝对于web根的路径,例如:include_once("/site/lib/dbwrapper.php");
解决方法二:
在每个文件的开头加一段话,
你的文件的修改方法:
test.php里面:
dbwrapper.php里面:
方法3:推荐
在你的站点的顶级目录加一个config.inc文件,文件用来记录各种饮用的路径
----------config.inc----------
然后让你的所有的网页的主文件都包含这个文件,通过这个文件来定义你引用的文件的路径
例如:
include_once(LIBPATH."adodb/adodb.inc.php");
这样好处:
可以统一的记录你的文件的存放的位置;
不会出现你说的那种问题;
整个网站的文件部分更换位置的时候,不用改动每个php文件,只要更改config.inc就可以。
第三种方法你可以自己仔细的考虑研究一下。这种方法可能全天的phper都在用,呵呵。
---------------------------------------------------------------
前面不要加.
直接include("lib/dbwrapper.php");
---------------------------------------------------------------
-webroot(是web发布根目录)
test.php
-lib(目录)
dbwrapper.php
-adodb(目录)
adodb.inc.php
-AAA
-a.php
就是说所有的文件
./lib/dbwrapper.php
./lib/adodb/adodb.inc.php
./AAA/a.php
都通过test.php去调用执行。
---------------------------------------------------------------
dbwrapper.php里面:
include_once("adodb/adodb.inc.php");
嵌入文件的路径应该是绝对路径。当使用相对路径时,则被处理成相对于当前文件所在目录
在网站中若使用在多层目录中存放嵌入文件时,路径始终是一个大问题。
解决的办法是使所有路径都写作从网站根目录算起的格式,比如
$path/lib/dbwrapper.php
$path/lib/adodb/adodb.inc.php
$path 可取$_SERVER[DOCUMENT_ROOT']的值
若$_SERVER[DOCUMENT_ROOT']不可用或不准确的话可以
1、在首页用session保存路径
2、在网站根目录下做一获取根目录路径的程序
比如:
path.php
1
2echo gwetcwd();
嵌入文件时写作:
include file_get_contents("http://localhost/path.php")."/lib/dbwrapper.php";
include file_get_contents("http://localhost/path.php")."/lib/adodb/adodb.inc.php";
---------------------------------------------------------------
一般给出相对路径,而相对路径都以网站,所在的目路的根目路为基础,这样就可了,我建议把所有的文件路径放在一个文件之内,当然最好前如的html页面与后台的.php页面分成不同的目录