2009-07-07 3 views
2

URL을 변경하는 PHP 스크립트가 포함됩니다.포함 된 PHP 스크립트가 위치 URL을 변경하지 못하게하려면 어떻게해야합니까?

// index.php 
ob_start(); 
include "script.php"; 
    // This script redirects using header("Location:"); 
$out = ob_get_clean(); 
// I use the $out data for calculations 
echo $out; 

이 원치 않는 리디렉션을 쉽게 카운터에 추가하거나 실행 취소 할 수 있습니까? 어떻습니까 :

header("Location: index.php"); // redirect back to self 

그러나 이것은 끝없는 리디렉션 루프를 유발합니다 ... 어떤 아이디어입니까?

또는 $ out 버퍼에서 header() 호출을 제거하여 클라이언트에 도달하지 못하도록하는 방법이 있습니까?

답변

5

앞으로 참조할만한 내용입니다. PHP 5.3에서 이러한 상황을 처리하는 데 도움이되는 header_remove()이라는 새로운 기능이 있습니다.

3

당신은 같은 잘못된 값이 헤더 필드를 덮어을 시도 할 수 있습니다 :

header('Location: ', true); 

그러나 클라이언트가 그것에 어떻게 반응하는지 모르겠어요.

2

정말 좋은 방법은 아닙니다. 두 가지 마음에 와서 : 텍스트 파일로

  1. 열기 script.php이란, 어떤 헤더() 명령 다음 평가() 결과를 빼내야.
  2. script.php를 포함하기 전에 공백을 에코 한 다음 출력이 이미 시작된 후 PHP가 header()를 발행하는 것에 대한 경고를 트랩합니다. 출력을 버퍼링하기 전에 공간을 에코해야합니다.
1

무엇, file_get_contents()의 변수로 먼저 파일을 포함하여 원치 않는 헤더를 제거하고 (나는 PHP 코드로 PHP의 문자열을 구문 분석하는 데 사용되는 악 단어를 언급하지 않습니다) PHP 코드를 실행하는 방법에 대한?

+0

악의적 인 :) –

0

출력하기 전에 문자열에 전체 텍스트가 있으므로 검색 및 바꾸기 (예 : 정규식 사용)에서 원하는 헤더를 간단하게 제거 할 수 있습니다.

1

PHP5.3을 마음대로 사용할 수 없다면 (아마도 그렇지 않을 것입니다) Gumbo's answer이 작동하지 않고 eval을 사용하고 싶지 않다면, 볼 수있는 유일한 옵션은 사용법입니다 streams입니다. 그러나 이것은 또 다른, 더 유연하지만 복잡한 형태의 평가입니다. 스트림을 tokenizer과 결합하면 간단한 방법으로 해당 함수 호출을 제거 할 수 있습니다.

require 'no-header://script.php';