2011-01-22 2 views
4

일부 데이터베이스 작업을 수행 한 페이지를 디자인하려고하는데, 사용자가 원래 페이지로 리다이렉트합니다. 문제는 데이터베이스에 연결하기 위해 require() 함수를 사용하므로 헤더가 이미 전송 된 것입니다. meta 태그는 문제가되지 않습니다. 왜냐하면 나는 모든 프로세스가 그들이 나온 페이지에서 완료된 것처럼 보이기를 원하기 때문입니다. 어떤 팁? require()header()을 사용할 수있는 방법이 있습니까? 아니면 하나 놓아야합니까? header()에 대한 대안이 있습니까?header() 또는 메타없이 PHP 리디렉션

+8

어떻게 데이터베이스에 연결이 헤더를 전송하게 않습니다 수행하여 그것을 짓을 한거야? – Artefacto

답변

3

Artefacto가 지적했듯이 데이터베이스에 연결하면 출력이 필요하지 않습니다. 포함되지 않은 내용 (예 : database_connect.php)을 출력하지 않도록 수정하십시오. "숨겨진"출력을 찾는 데 도움이 될 수있는 "이미 보낸 헤더"문제에 대해서는 this search을 참조하십시오.

+2

당신은 절대적으로 옳았습니다. 내 필수 파일에서 php 태그를 끝낸 후에 여분의 공간을 찾았습니다. – Yoshiyahu

1

일부 콘텐츠가 이미 전송 된 후에는 머리글을 보낼 수 없습니다. header() 호출을 require() 호출 전에 이동하십시오.

+0

스크립트가 일부 데이터베이스 작업을 수행해야하므로 리디렉션 할 수 없습니다. – Yoshiyahu

7

일부 콘텐츠가 전송되기 전에 header()을 보낼 수 없으면 아무 것도 보내기 전에 ob_start();을 스크립트 시작 부분에 배치하여 output buffering을 사용하십시오. 이렇게하면 모든 내용이 버퍼에 저장되고 스크립트가 끝날 때까지 또는 버퍼의 내용을 수동으로 보낼 때까지 보내지 않습니다.

또 다른 참고로, 단순히 포함 된 스크립트가 보내지 않는 한 다른 파일은 어떤 헤더/내용도 생성하지 않습니다. require 이것의 가장 일반적인 "숨겨진"원인은 <?php ?> 태그 앞이나 뒤에 공백이 있습니다.

+0

아, 버퍼가하는 것입니다. 나는 결코 모른다. – think123

0

데이터가 클라이언트로 전송 된 후에는 헤더를 보낼 수 없습니다.

그러나 require을 사용하면 결과물을 출력하지 않습니다. 귀하의 권리를 이해하는 경우 데이터베이스 파일을 포함하고 쿼리를 실행 한 다음 사용자를 리디렉션 할 수 있습니다. 이것은 완벽하게 유효합니다.

출력을 보내야하는 경우 (리디렉션을해야하는 이유는 무엇입니까?) 다른 옵션은 출력 버퍼링을 사용하는 것입니다. 출력 버퍼링을 사용하면 데이터를 반향 출력 할 때 브라우저로 데이터를 보내지 않지만 버퍼에 저장합니다. ob_end_flush으로 전화를 걸거나 스크립트가 끝나면 데이터가 전송됩니다. ob_end_flush 이후에는 새 헤더를 보낼 수 없습니다. ob_start을 사용하여 출력 버퍼링을 시작합니다.

+0

출력을 보내지 않습니다. 'require()'는 헤더를 자동으로 보내는 것 같습니다. 출력 텍스트가 없습니다. – Yoshiyahu

2
ob_start(); // start output buffering 
echo "<html......"; // You can even output some content, it will still work. 
. 
. 
. 
. 
. 
header("Location: mypage.php"); 
ob_flush(); //flush the buffer 

이 경우 모든 출력이 버퍼링됩니다. 즉, 헤더가 먼저 처리 된 다음 출력이 재생됩니다.

0

출력 버퍼링을 사용할 때 header()require()을 사용할 수 있습니다. 즉, 스크립트 전체가 버퍼링되고 스크립트가 끝나면 먼저 전송됩니다.

나는이

ob_start("ob_gzhandler"); //begin buffering the output 

require_once('/classes/mysql.php'); 

// Some code where I access the database. 

header('/somepage.php'); 
exit; 

ob_flush(); //output the data in the buffer