2013-02-25 5 views
1

저는 일종의 사용자 지정 CMS (홈 오토메이션)를 만들고 있습니다. 글쎄, 나는 취미 개발자 일 뿐이다. 내가 달성하기 위해 노력하고 무엇MySQL 데이터베이스에서 PHP 코드를 어떻게 렌더링 할 수 있습니까?

이다 : 나는 데이터베이스에서 가져 오는하고

"<?php echo $pageBody; ?> " 

PageBody이, 잘은 HTML, JS 잘 작동 : 내 index.php를 페이지에서

내가 좋아하는 뭔가가있다. 그러나 PHP 코드 소스에서는 작동하지 않습니다.

나는이 연구가 PHP 보안 제한과 관련이 있다고 생각했다.

내 질문 : 누구든지 안전한 샘플을 제공 할 수 있습니까 (이처럼 샘플을 찾을 수 없음) - 어떻게해야합니까?

나는 약간의 PHP 코드를 삽입하고 브라우저를 통해 결국 렌더링하려고 :

<div id="outer"> 
     <div id="inner"> 
        ***PHP Code should go here***  
     </div> 
    </div> 

을 분에서 - 그것은 텍스트로 렌더링되고있다. 그러나 HTML과 JS를 제대로 렌더링 할 수 있습니다.

내 선호하는 방법은 가능한 한 안전 할 것입니다.

많은 감사합니다!

+0

템플릿 언어를 사용 해본 적이 있습니까? – Gumbo

+0

PHP는 템플릿 언어입니다 :) –

답변

0

문자열이나 데이터베이스에 저장하는 PHP를 실행하려면 the eval function을 사용할 수 있지만 다소 위험 할 수 있으므로주의해야합니다.

0

PHP 스크립트가 서버에서 실행되고 출력이 브라우저로 전송되기 때문에 브라우저에서 PHP 코드를 렌더링 할 수 없습니다 (실행 가능성이 높음). 브라우저가 응답을 받으면 스크립트는 이미 실행을 마쳤습니다.

데이터베이스에서 코드를 가져 와서 출력을 보내기 전에 eval()을 사용할 수 있습니다. 그러나이 접근법의 단점을 알고 있어야합니다.

1

데이터베이스 텍스트 필드에서 PHP 코드를 검색 할 때 PHP 인터프리터는 데이터를 PHP 스크립트로 구문 분석해야한다는 것을 "알지 못합니다". PHP 인터프리터의 경우 해당 필드의 데이터는 다른 데이터와 다르지 않습니다. 특별한 의미가없는 모든 문자열입니다.

순수한 PHP 스크립트을 사용하는 경우 (docs)을 사용하여 을 수행 할 수 있습니다. 미리 경고하십시오 : eval은 위험을 동반하기 때문에 특히 사용자가 데이터베이스의 내용에 대해 어떤 입력을해야하는 경우 "위험한"것으로 간주됩니다.

당신의 경우 데이터베이스 필드에 저장된 혼합 된 PHP와 HTML을 구문 분석하는 것처럼 들립니다. 이것을하기 위해서 데이터베이스 데이터를 파일에 쓰고, 그 다음에 include을 써야만 PHP 인터프리터가 그 일을 할 수 있습니다. 이 프로세스에서 일종의 캐싱 메커니즘을 구현해야합니다. 그렇지 않으면 많은 사용자가있는 서버에서 무거워 질 수 있습니다. 또한 출력 버퍼링 (docs)을 사용하여 즉시 출력하는 대신 출력을 캡처 할 수 있습니다.

간단히 말해서, 당신은 이런 식으로 뭔가하고 싶은 것 :

$content_from_db = "<h1>Hello <?php print 'Clarisse'; ?></h1>"; 
$identifier_from_db = '12'; // like the primary key from the table 

$file_handle = fopen('cached_content/CACHE_'.$identifier_from_db.'.php', 'w'); 
fwrite($file_handle, $content_from_db); 
fclose($file_handle); 

// here is where you'd start output buffering, if you're going to do that (optional) 

include('cached_content/CACHE_'.$identifier_from_db.'.php'); 

// and then here you retrieve the output buffer's content (optional) 

이 동적 콘텐츠를 포함하는 "전통적인"방법은 아니며, 위의 코드 하지 생산 준비가되어 있습니다를 . 귀하의 유스 케이스를 모른 채, 나는 확실히 말할 수는 없지만, PHP 코드를 데이터베이스에 저장하는이 아이디어는 다소 특이한 방법입니다.

자신 만의 롤링에 대한 또 다른 대안으로는 멋진 템플릿 라이브러리가 있습니다. 여기에서 확인하십시오 : http://www.smarty.net. smarty를 사용하면 리소스 플러그인을 작성하여 데이터베이스에서 템플릿을 가져올 수 있습니다. http://php.net/manual/en/function.fwrite.php

  • include - - http://php.net/manual/en/function.include.php
  • PHP 기본 theopensourcery.com에-http://theopensourcery.com/phpbasics.htm
  • 이 (more info)

    문서

  • +0

    감사합니다 크리스, 이것은 흥미 롭습니다. 지금까지 내가 네트워크에서 찾은 가장 포괄적 인 대답입니다. 그래서 DB에서 PHP 코드를 처리하는 좋은 전문적이고 안전한 방법이 존재합니까? 이 시나리오에서 어떤 전략 레이아웃을 권하고 싶습니다. (나는 항상 Joomla와 다른 오픈 소스 소프트웨어를 사용할 수 있지만, 이것으로는 아무것도 가르쳐주지 않을 것이다). 웹에서 CMS와 관련된 유용한 정보가 충분하다는 것을 알았지 만 모든 샘플을 적용 할 수있는 것은 아닙니다. – Tom

    +0

    현명한 체크 아웃 : http://www.smarty.net/docsv2/en/template.resources.tpl - 내 대답에 추가했습니다. 이는 데이터베이스 템플리트를보다 단순하게 유지하는 데 도움이 될 수 있습니다. 문제는 ... 일반적으로 HTML 및 PHP 템플릿을 파일에 보관하는 것이 좋습니다. 템플릿 데이터를 데이터베이스에 기록 할 수 있다면 파일에 쓰고 번거로운 작업을하지 않아도 될까요? 당신이 ** 데이터베이스에서 **해야한다면, 당신은 일종의 "흔적을 벗어난"것입니다. 나는 당신을 위해 이것을 수행하는 PHP 라이브러리를 모르지만, 일부 구글 검색은 하나를 돌릴 수 있습니다. –

    +0

    evel 문을 사용하면 응용 프로그램에 보안 취약성이 생기므로 수행중인 작업에주의하십시오. –

    -1

    브라우저 것은 렌더링 할 수 PHP 코드를 (실행). PHP는 서버가 실행하고 표시 할 일반 HTML로 브라우저에 보내는 것입니다.

    테스트 목적으로 개발을위한 가장 번거롭지 않은 원 스톱 솔루션 인 WAMP를 다운로드하여 설치할 수 있습니다.

    링크 : http://www.wampserver.com/en/

    +0

    고마워 -하지만 내 리눅스 박스를 선호 할거야. .. 이미 강화되어 웹용으로 준비 됐어. – Tom

    관련 문제