2013-02-08 5 views
2

내 include 문에 문제가 있습니다. 페이지가 처음로드 된 다음 jQuery 아약스 호출에 의해 다시 호출 될 때로드되는 여러 PHP 파일이 있습니다. Ajax 호출 때문에 함수에 PHP 스크립트가 없지만 다른 위치 (ajax 호출)에서 호출 할 때 include 문과 함께 오류가 발생합니다.include 문과 함께 jquery ajax에서 php 함수를 호출하는 중

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

: 여기

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

가 아약스 호출입니다 : 여기
<div id="controlPanelForm"> 
    <?php include "lib/getControlPanel.php"; ?> 
</div> 

가 getControlPanel.php 파일의 처음 몇 줄 수 있습니다 : 예를 들어 내 메인 페이지는이 PHP 스크립트를 포함 그래서 문제는 내가이 오류가 발생하면 아약스 호출에서 PHP 스크립트를 호출 할 때입니다 :

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

상대 경로를 변경하면 기본 페이지의 원본 포함이 작동하지 않습니다 ...

이 문제를 어떻게 해결할 수 있습니까?

미리 감사드립니다.

+1

아마도 파일이 절대 경로 여야합니다.jQuery 파일이 실행되는 곳마다 그 파일을 포함하려고합니다. –

+0

나는 그것을했지만 내 include.php 파일에서 함수를 정의하고 함수를 다시 선언 할 수 없다는 오류가 발생합니다. – rodzilla

+1

파일을 잘못 참조하고 있습니다. 브라우저에서 getControlPanel.php를 치면 같은 오류가 발생합니다. 참고 사항 : Kacey : ajax 호출을 만드는 파일에 상대적인 파일을 참조하지 않습니다. 경로는 include/require 호출을하는 파일에 상대적입니다. – Todd

답변

0

포함 된 파일 (includes.php)의 경로를 수정하여 수정할 수 있습니다. 당신은 asbolute 또는 relative를 참조 할 수 있습니다. 중요하지 않습니다. 중요한 것은 적절하게 참조된다는 것입니다.

그렇기 때문에 절대 경로 (웹/앱 루트까지 경로를 정의하는 데 상수를 사용)를 선호합니다.

, 당신의 파일에

echo phpinfo(); 

드롭 (당신이 상대 또는 절대 사용할지 여부를) 적절한 경로를 파악하고 DOCUMENT_ROOT 또는 SCRIPT_FILENAME이 바르 살펴보고합니다.

2
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'); 

많은 더 많은 등, A의

을 로딩 파일 기능을 만드는 헤더를 재 전송 이러한 정의와 함께 할 수 AJAX 호출로 디버깅하기 전에 웹 브라우저를 사용하여 직접 AJAX 페이지로 이동하여 테스트하십시오. 그런 식으로 문제가 PHP 문제인지 자바 스크립트 문제인지 알 수 있습니다.

+0

그런 다음 config.php 파일을 포함하여 동일한 문제가 발생하지 않습니까? – rodzilla

+0

포함 방법을 알아야하는 유일한 파일은 config.php 파일입니다. 나머지는 올바른 경로를 사용하여 포함됩니다. –

+0

문제는 파일을 올바르게 포함시키는 방법을 모른다는 것입니다 ... – rodzilla

관련 문제