2010-03-26 6 views
2

데이터베이스 테이블에 PHP와 HTML 코드가 저장되어 있습니다. 이 데이터를 얻으면 HTML을 반향하고 PHP를 처리해야합니다. 나는 이것을 위해 eval()을 사용할 수 있다고 생각했는데, 만약 내가 이것을했다면, eval("echo 'dlsj'; ?> EVALED "); "dlsjEVALED"가 출력된다.PHP + HTML 코드가있는 PHP 평가판

더 긴 스크립트를 실행하면 치명적인 오류가 발생합니다. 상황 :

Parse error: syntax error, unexpected '<' in /home/content.php(18) : eval()'d code on line 1

+3

문제는 eval''이다. 완전히 피하십시오! – poke

+1

폭발적인 혼란이 있습니다. 그렇지 않습니까? 데이터베이스의 코드를 전체 PHP가되도록 변경하는 것이 좋습니다 ('

Foo

'대신'echo'

Foo

'). 아니, 실제로'eval'을 전혀 사용하지 말 것을 제안합니다. 그러나 그것은 나뿐입니다. – zneak

+1

왜 PHP 코드를 데이터베이스에 저장하겠습니까? –

답변

3

오픈 <?php 태그가 포함 된 것을 eval()하려는 것 같습니다. 그리고 그 순간에 오류가 발생합니다.

+0

맞습니다. 하지만 이렇게해야합니다 :

텍스트

more text

+0

당면한 문제에 대한 매우 못생긴 해결책은 데이터베이스에 임시 파일을 쓰고 그 파일을로드하는 것입니다. 이것은 최소한 시도하려고하는 것을 성취합니다 . –

11

최상의 조언 - 데이터베이스에는 절대로 php 및 html 코드를 저장하지 마십시오. 그리고 전염병처럼 eval()을 피하십시오.

충분한 정보를 제공하지 않아서 코드에 무엇이 잘못되었는지 알 수 없습니다. 그러나 제가 조언을 하나 했어도 좋은 양심으로 줄 수 있다고 생각하지 않습니다.

데이터베이스에 이러한 내용을 저장할 필요가 없도록 전체 응용 프로그램을 다시 디자인해야합니다. 나는 그것이 왜 필요한지 상상할 수 없다.

4

EVALED 뒤에 php 모드를 다시 열어야합니다. Apparently<?php 대신 <?을 사용해야합니다.

원칙적으로 평가는 피해야합니다. 그러나 규칙이 깨지게됩니다. 약간의 독단적 인 충고를하는 스레드가 When is eval evil in php?에 있습니다.

원하는 작업에 따라 소스를 제공하는 템플릿 파일을 사용하는 것이 좋으며, 템플릿을 소싱하기 전에 로컬 변수에 저장되는 텍스트가 다를 수 있습니다.

DB에서 실행되는 코드를 저장하는 경우 ... 편리한 확장 성을 제공하는 Drupal과 같은 일부 프레임 워크에서는 이러한 일이 발생하지만 Drupal은 보안 취약점에 대해 철저히 조사됩니다.

또한 자기 수정 코드를 작성하는 경우 eval()을 사용해야합니다. 누구든지 PHP에서 그 짓을했는지는 확실하지 않지만 확실히 흥미로울 것입니다.

9

바로 데르 ...........

eval('?>' . $content .'<?php'); 
+0

은 가장 간단하고 쉬운 솔루션입니다. – caesay

+0

이것은 대답이어야합니다 – arslan

+0

이것은 anser입니다. – hogan

0
$contents = htmlentities($contents); 
echo html_entity_decode(eval($contents)); 
+2

답변의 품질을 향상 시키려면 게시물로 인해 문제가 해결되는 방법/이유를 포함 시키십시오. –