PHP 에서,방법이 있을 캡처의 출력 PHP 파일을 변수로 사용하지 않고 출력 버퍼링?

StackOverflow https://stackoverflow.com/questions/222925

  •  03-07-2019
  •  | 
  •  

문제

PHP 에서,저는 읽고 싶은 파일을 변수로 처 PHP 에서 파일을 동시에 사용하지 않고 출력 버퍼링이다.이것이 가능한가요?

기본적으로하고 싶을 수행할 수 있 사용하지 않고 이 ob_start():

<?php
ob_start();
include 'myfile.php';
$xhtml = ob_get_clean();
?>

이것이 가능한 PHP?

업데이트:내가 하고 싶은 좀 더 복잡한 일이에 출력 콜백(어디로 출력 버퍼링이 허용되지 않습니다).

도움이 되었습니까?

해결책

작은 알려진 기능을 PHP 할 수 있는 치료는 포함되/에 필요한 파일과 같은 함수 호출에는 반환 값.

예를 들어:

// myinclude.php
$value = 'foo';
$otherValue = 'bar';
return $value . $otherValue;


// index.php
$output = include './myinclude.php';
echo $output;
// Will echo foobar

다른 팁

PHP 문서에서 내가 알 수있는 것에서, no. 출력 버퍼링을 피하고 싶은 이유는 무엇입니까?

이 문제를 해결하는 유일한 방법은 명령 줄 PHP 클라이언트를 호출하거나 사용 가능한 것과 특정 요구 사항에 따라 CURL 요청을 수행하는 해킹 방법입니다.

모든 사람의 제안을 읽고, 많은 문서를 읽고, 몇 가지를 가지고 놀면서 나는 이것을 생각해 냈습니다.

<?php
$file = file_get_contents('/path/to/file.php');
$xhtml = eval("?>$file");
?>

내가 얻을 수있는만큼 가까이 있지만 불행히도 작동하지 않습니다. 이것의 열쇠는 닫는 PHP 비트를 포함시키는 것입니다 (?>) 파일의 내용 이전. 이것은 eval() PHP 평가 모드를 벗어나 파일의 내용을 비 -PHP 코드로 처리합니다. 그런 다음 파일 내에 PHP 코드 블록이있는 경우 PHP로 평가됩니다. Bummer는 변수에 평가 내용을 저장하지 않고 페이지에 출력하는 것입니다.

모두 도와 주셔서 감사합니다!

Joeri Sebrechts가 맞습니다. PHP 스크립트가 HTTP 액세스 가능하면 동등하고 약간 쉬운 방법을 사용할 수 있습니다.

$data = file_get_contents('http://google.com/');

출력 버퍼링을 사용하는 것이 리소스에서 더 쉬울 것입니다.

PHP 페이지에 컬 요청을 수행하고 본질적으로 브라우저 인 척하십시오.

파일이 로컬 인 경우 수행 할 수있는 작업은 스크립트를 String으로 변수로로드 한 다음 문자열에서 평가를 실행합니다. 그런 다음 나중에 다른 모든 작업을 수행 할 수 있습니다. 그렇지 않으면 출력 버퍼링을 사용해야합니다.

$fileData = file_get_contents('fileOnDisk.php');
$results = eval($fileData);

그러나 실제로 호출하는 파일을 반환하는 것이 아니라 반환하는 것이 아니라 반환하는 것이기 때문에 Eval의 문서를 확인하십시오.

http://us2.php.net/eval

해킹 경고! 당신은 약간의 해커를 사용하여 PHP를 스스로 평가할 수 있습니다. preg_replace_callback PHP 블록을 검색하고 교체합니다.

function evalCallback($matches)
{
    // [0] = <?php return returnOrEcho("hi1");?>
    // [1] = <?php
    // [2] = return returnOrEcho("hi1");
    // [3] = ?>
    return eval($matches[2]);
}

function evalPhp($file)
{
    // Load contents
    $contents = file_get_contents($file);
    // Add returns
    $content_with_returns = str_replace(
                               "returnOrEcho"
                              ,"return returnOrEcho"
                              ,$contents);
    // eval
    $modified_content = preg_replace_callback(
                              array("|(\<\?php)(.*)(\?\>)|"
                             ,"evalCallback"
                             ,$content_with_returns);
    return $modified_content;
}

사용하는 PHP 파일을 수정해야합니다. returnOrEcho 이 경우와 정상적인 경우에 과부하 할 수 있도록 기능. 이 경우 당신은 원합니다 return 그래서 그것은 그것이 픽업 될 것입니다 eval 당신이 원하는 방식으로, 그러나 정상적인 경우는 echo 귀환없이.

따라서이 경우에는 다음을 정의합니다.

function returnOrEcho($str)
{
    return $str;
}

그리고 정상적인 경우에 당신은 다음을 정의 할 것입니다.

function returnOrEcho($str)
{
    echo $str;
}

포함 된 PHP 파일 (또는보기 파일)에는 다음과 같은 것이 있습니다.

<?php returnOrEcho("hi1");?>
<?php returnOrEcho("hi3"."oo");?>
<?php returnOrEcho(6*7);?>

나는 얻을 수 없었다 preg_replace_callback 인라인 콜백 작동이므로 별도의 기능을 사용했지만 수행 방법의 예가 있습니다. preg_replace_callback () - 현재 객체 인스턴스 내부의 calback.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top