3

include ステートメントに問題があります。ページが最初に読み込まれたときに読み込まれ、jQuery ajax 呼び出しによって再度呼び出されるいくつかの php ファイルがあります。ajax 呼び出しのため、関数に php スクリプトがありませんが、別の場所 (ajax 呼び出し) から呼び出すと、includes ステートメントでエラーが発生します。たとえば、私のメイン ページには、次の 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>

getControlPanel.php:

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

ファイルをロードするための関数の作成、リダイレクト ヘッダーの送信など、これらの定義を使用してさらに多くのことができます。

補足として、AJAX 呼び出しでデバッグする前に、Web ブラウザーを使用して直接 ajax ページにアクセスして、常に ajax ページをテストしてください。そうすれば、問題が php の問題なのか JavaScript の問題なのかがわかります。

于 2013-02-08T22:43:14.860 に答える
0

インクルード ファイル (includes.php) へのパスを修正することで修正できます。絶対的または相対的に参照できますが、問題ではありません。重要なことは、それが適切に参照されていることです。

そうは言っても、私は絶対パスを好みます(定数を使用してWeb /アプリルートまでのパスを定義します)。

適切なパス (相対または絶対を使用するかどうか) を把握するには、

echo phpinfo();

ファイルの DOCUMENT_ROOT または SCRIPT_FILENAME vars を見てください。

于 2013-02-08T22:38:33.590 に答える