我的div中有一个php需要
require('inc/coreturni/list.php');
再次需要数据库连接
require('inc/connect.inc.php');
当我加载页面时,它们都工作。
但是,如果我尝试刷新div,在点击事件后刷新第一个include文件,使用jquery load()
我得到以下路径错误:
警告:require(inc/connect.inc.php):无法打开流:在第2行的C:\examplep\htdocs\taximat\inc\coreturni\list.inc.php中没有这样的文件或目录
致命错误:require():无法在第2行上打开C:\xamp\htdocs\taximat\inc\coreturni\list.inc.php中所需的"inc/connect.inc.php"(include_path='.;C:\xamp\php\PEAR')
为什么路径应该不同?我该怎么修?
您的错误解释了一切:
警告:require(inc/connect.inc.php):无法打开流:没有这样的中的文件或目录第2行上的C:\examplep\htdocs\taximat\inc\coreturni\list.inc.php
致命错误:require():无法打开所需的'inc/connect.inc.php'(include_path='.;C:\examplep\php\PEAR')第2行上的C:\examplep\htdocs\taximat\inc\coreturni\list.inc.php
注意它是如何表示在以下目录中找不到inc/connect.inc.php
的:
C:xampphtdocstaximatinccoreturni
这是因为您的require
语句引用的是相对路径。因此,当加载文件list.inc.php
时,require
假设inc/connect.inc.php
位于C:xampphtdocstaximatinccoreturni
中。这就是它失败的原因。
你应该这样在你的应用程序中设置一个基本路径。只是需要注意的是,我不清楚在这种情况下的正斜杠或反斜杠语法,因为我主要在Mac上工作;Unix系统,错误显示窗口路径,但PHP显示Unix路径。
$BASE_PATH='/xampp/htdocs/taximat/inc/coreturni/';
需要这样的所有文件:
require($BASE_PATH . 'inc/coreturni/list.php');
像这样:
require($BASE_PATH . 'inc/connect.inc.php');
这样,无论从哪里调用文件,require
都将使用文件的绝对路径。由于$BASE_PATH
是一个一次性变量,您可以在主配置文件中设置它,而无需担心。要使代码可移植,只需根据系统设置更改$BASE_PATH
即可。
当页面第一次显示时,您的路径如下:
page.php
inc/
coreturni/
list.php
connect.php
换句话说,从page.php
可以看出,所有require
语句都是相对的。
然而,当您直接使用AJAX请求list.php
时,它看起来更像这样:
list.php
../
connect.php
现在,require
应该用于../connect.php
。
解决方案
解决这个问题的一种方法是根据当前正在处理的文件(即list.php
)计算绝对路径,如下所示:
require dirname(__DIR__) . '/connect.php';
dirname(__DIR__)
构造将始终在文件系统上生成比当前脚本所在位置高一个的目录。