2011-01-26 3 views
2

필자가 시도한 것은 (실제로 로컬 테스트 서버에서만 가능합니다) PHP로 php 파일을 출력하는 것입니다 .
문제는 PHP의 시작 및 종료 태그 인 것 같습니다.
나는 php.net에서 nowdoc을 찾았지만 해결책에 대한 단서를 찾을 수 없었다. 나는 이런 식으로 사용하는 경우 : 여는 PHP 태그가 발견되는 경우파일에 출력 할 때 "<? php"와 "?>"를 이스케이프 처리합니다. - nowdoc/heredoc

Parse error: syntax error, unexpected T_SL in /home/ua000154/public_html/test.php on line XX

이 구문 분석 오류의 LINENUMBER은 항상 :

$fh = fopen($filenameandpath, 'w') or die("can't open file"); 
$stringData = <<<'WWR' 
<?php 
echo('test'); 
?> 
WWR; 
$suc = fwrite($fh, $stringData); 
fclose($fh); 

나는 구문 분석 오류가 발생합니다. 내 문제는 내가이 태그를 벗어날 필요가있는 것 같다 (나는 닫는 태그와 동일하게해야한다고 생각한다).

나는 어떻게 할 수 있습니까? 이것은 실제로 내 테스트 서버에서 작동하지만 일단 다른 서버의 최종 위치에 업로드하지 않습니다.

도움이 필요합니다. 시간 내 주셔서 감사합니다!

+0

완전한 파일입니까?이 파일의 시작 부분에 shankhan

+0

나는 그것이 지원되지 않는 엣지 케이스라고 의심했을 것이다. 그러나 당신의 예제는 나를 위해 잘 작동한다. 서버가 PHP> 5.3을 실행하고 있습니까? – mario

+0

@shankman, 그렇습니다. 시작 및 종료 태그 인 @mario가있는 전체 파일입니다. 원격 서버가 5.2.17을 실행하고 있고, NOWDOC을 지원하지 않습니다. 출력으로 정확한 문자열이 필요했기 때문에 nowdoc을 사용했습니다. 이제 문자열의 모든 변수를 이스케이프 처리하는 방법을 찾아야합니다. 당신이 나를 도울 수? – leugim

답변

4

NOWDOC 구문을 의도적으로 사용하는 경우 PHP 서버가 도입 된 이후로 is running 5.3 or later이어야합니다. (phpinfo();을 사용하여 확인할 수 있습니다). 그건 왜 당신의 dev에 서버에서 작동하지만 생산에 설명했다.

+0

@yc 이것은 빠른 답장을 보내 주신 덕분에 nowdoc (유효한 따옴표) – shankhan

+0

에 유효한 구문입니다. 사실 PHP 문자열의 작은 따옴표로 묶인 버전 인 NOWDOC을 사용하고 있습니다. 즉, 따옴표를 사용하면 nowdoc 안에 변수가 해석되지 않습니다. 출력을 해석하지 않고 변수를 포함해야합니다. – leugim

+0

죄송합니다, 유효한 포인트! 내 편집을 참조하십시오. – Yahel

1

좋아,이 질문에 대한 답변이되었지만, 이전 버전의 PHP에서 NOWDOC와 비슷한 개념을 구현하고자하는 모든 사람들에게 유용 할 수 있습니다. 출력 버퍼링을 사용하여 변수 파싱 등을하지 않고 소스 파일에서 그대로 텍스트를 캡처합니다. 변수를 삽입하려면 많이 사용하지 말고, 문자를 포함하지 않는 한 그대로 넣을 수 있습니다 "?>", 종료합니다.

변수가 문서 뒤에 정의된다는 점에서 >>> TERMINATOR 및 >>> 'TERMINATOR'를 사용하는 HEREDOC 및 NOWDOC과 다릅니다.

<?PHP 

    function NOWDOC_() { 
     ob_start(); 
    } 

    function _NOWDOC(&$buf=false) { 
     $buf_ = ob_get_contents(); 
     ob_end_clean(); 
     if ($buf!==false) $buf .= $buf_; 
     return $buf_; 
    } 



    NOWDOC_(); ?>random garbage, not shown, but captured into $myvar 


    it has all sorts ] [* \%& of characters in it 

    and completely ignores things like {$this} or $_SERVER['REMOTE_ADDR'; 

    <?PHP _NOWDOC($myvar); 





    NOWDOC_(); ?><HTML><HEAD></HEAD> 

    <BODY>Here is some <B>nice</B> HTML &amp; . 

    <SCRIPT> 

     alert("javascript!"); 

    </SCRIPT> 

      this also demonstrates using $var = _NOWDOC() syntax. 


    </BODY> 

    </HTML><?PHP $myhtml = _NOWDOC(); 


    echo "the html will be [".$myhtml."]"; 

?> 
+0

그냥 기존 문자열에 추가를 허용하지 않았 음을 알았습니다 (원래 코드에는 $ buf 인수가 옵션으로 없으므로이 게시물에 대한 편집은 조금 너무 성급한. – unsynchronized

관련 문제