3

我的包含语句有问题。我有几个 php 文件在页面最初加载时加载,然后由 jQuery ajax 调用再次调用。由于 ajax 调用,我在函数中没有 php 脚本,但是当我从不同的位置(ajax 调用)调用它们时,我的 include 语句出现错误。例如,我的主页包含这个 php 脚本:

<div id="controlPanelForm">
    <?php include "lib/getControlPanel.php"; ?>
</div>

这是 getControlPanel.php 文件的前几行:

<?php
include_once("../etc/includes.php");
...do something...

这是ajax调用:

    function getControl(teamID)
{     $.ajax({
            type: "GET",
            data: {teamID: teamID},
            url: "./lib/getControlPanel.php",
            dataType: "html",
            async: true,
            success: function(response) 
            {
                $('#controlPanelForm').html(response);
            }
    });
}

所以问题是当我从 ajax 调用中调用 php 脚本时,我得到了这个错误:

include_once(../etc/includes.php): failed to open stream: No such file or directory in 

如果我更改相对路径,则主页中的原始包含不起作用...

我该如何解决这个问题?

提前致谢!

4

2 回答 2

3
include_once(../etc/includes.php): failed to open stream: No such file or directory in

此错误表明 '../etc/includes.php' 中的文件不存在。您可以查看当前工作目录,getcwd()以确定您的相对链接实际指向的位置。

然而,相对路径是一种痛苦。我从不使用它们。我所有的项目都包含一个包含配置值的 config.php 文件:

// paths and urls
define('SITE_PATH', '/var/www/my_website/');
define('SITE_URL', 'http://localhost/my_website/');

现在一切都可以是绝对的。修改您的示例:

<div id="controlPanelForm">
    <?php include SITE_PATH . 'lib/getControlPanel.php'; ?>
</div>

获取控制面板.php:

<?php
include_once(SITE_PATH . 'etc/includes.php');

使用这些定义可以完成更多工作,例如创建用于加载文件的函数、发送重定向标头等。

附带说明一下,在使用 AJAX 调用对其进行调试之前,始终使用 Web 浏览器直接访问它来测试 ajax 页面。这样您就可以判断问题是 php 问题还是 javascript 问题。

于 2013-02-08T22:43:14.860 回答
0

您可以通过更正包含文件 (includes.php) 的路径来修复它。您可以将其作为绝对值或相对值引用,没关系。重要的是它被正确引用。

话虽如此,我更喜欢绝对路径(使用常量定义到 web/app root 的路径)。

要找出正确的路径(无论您要使用相对还是绝对),请删除

echo phpinfo();

在您的文件中查看 DOCUMENT_ROOT 或 SCRIPT_FILENAME 变量。

于 2013-02-08T22:38:33.590 回答