2016-07-12 1 views
2

데이터베이스에서 오는 PHP 코드를 실행하기 위해 eval을 사용하고 있습니다. 이 코드는 메타 태그 및 페이지 제목 용입니다. 나는이 ($ 현서을 컨트롤러에서 다음PHP, Eval code 결과 변수가

$name . " test page title |".SiteSettings::getSiteNameAlternate(); 

그리고 meta_title을 가진 개체이며, 그 요소는 DB에서 정확한 문자열을 가지고 : 한 가지 예는 (이 테이블에 저장됩니다) 다음과 같습니다) :

$pageTitle = isset($seo->meta_title) ? @eval("echo $seo->meta_title") : null; 

저는 Larevel 프레임 워크를 사용하고 있으며 해당 페이지 제목을 블레이드 템플리트에 전달하면됩니다. 블레이드 코드

<title>{{ isset($page_title) ? $page_title : SiteSettings::defaultPageTitle() }}</title> 

이 문제는 eval의 에코가 페이지 상단에도 페이지 이름을 가져 오기 때문에 발생합니다.

나는 print (멍청 아)와 printf를 사용해 보았습니다. 작동하지 않았다. 어떻게 화면에 출력하지 않고 변수에 그 평가의 가치를 두는가?

+1

와트에 대해 'eval'을 사용하고 있습니까? 대체 어디 선가 잘못된 방향으로 나아 가지 않았습니까? – PeeHaa

+0

아마 잘못 처리했는데 db에서 PHP 코드를 실행하는 다른 방법이 보이지 않습니다. –

+0

DB에서 코드를 실행하는 것은 일반적으로 좋지 않습니다. eval에서 코드를 실행하는 것은 일반적으로 나쁜 생각입니다. 때로는 정당한 이유가있을 수 있지만 드문 경우입니다. 일반적으로 사람들은 이와 같은 코드를 작성할 때 최종 사용자가 개발자가 변경하지 않고 코드를 시스템에 추가 할 수있는 유연한 CMS 유형 플랫폼을 만들려고합니다. 이는 개발자가 아닌 사람이 코드를 작성하기 때문에 착오에 기반을 둡니까? 구성 가능한 시스템이 필요한 경우 올바른 방법은 설치 가능한 플러그인 시스템을 통해 이루어집니다. – Simba

답변

2
$pageTitle = isset($seo->meta_title) ? @eval("return $seo->meta_title;") : null; 

그렇지 않으면 $seo->meta_title가 설정되어있는 경우 $pageTitlenull$seo->meta_title을 할당합니다.

+0

정확하지만 내 페이지 제목은 다음과 같습니다 : $ name. "테스트 페이지 제목 |".SiteSettings :: getSiteNameAlternate();

+0

@VladimirSabo 내 업데이트 된 코드를 사용해보십시오. – Jocelyn

1

질문을 올바르게 이해할 수 있다면 echo 내에서 eval을 실행했기 때문에 문제가 발생합니다. 그래서 대신 $seo->meta_title의 값을 변수에 저장 한 다음 뷰 echo을 저장해야합니다.

컨트롤러에서

, 페이지 제목 isset처럼 저장 메타 제목 값을위한 ob_start, ob_get_contents 함께보기

<title>{{ isset($page_title) ? $page_title : SiteSettings::defaultPageTitle() }}</title> 
+0

고마워, 당신의 대답은 작동하지만, @ Jocelyn 대답은 깨끗합니다. 또한 if 문에 ")"가 누락되었습니다. –

+0

감사합니다. – Chay22

0

결과를 저장하는 좋은 방법으로 다음 null

$pageTitle = null; 
if (isset($seo->meta_title)) { 
    $metaTitle = ''; 
    eval("\$metaTitle = \"$seo->meta_title\";"); 
    $pageTitle = $metaTitle; 
} 

하지 않는 한 ob_end_clean

/*start buffering;*/ 
ob_start(); 

eval(echo isset($seo->meta_title) ? $seo->meta_title : ""); 

/* now catch the Buffer of the eval */ 

$pageTitle = ob_get_contents(); 

/* pageTitle contains now the value of the buffered echo */ 

/* stop buffering; */ 

ob_end_clean(); 

지금 사용 원하는대로 컨트롤러