2012-10-20 3 views
0

이것은 성가신 일입니다. 이론적으로는 쉬워야하지만 이론적으로 살지는 않습니다.반환 된 문자열/int 평가 된 PHP 코드에서?

기본적으로 문자열이나 int 인 '코드'를 만들기 위해 맞춤 알고리즘을 설정할 수있는 옵션이 있습니다.

이것은 사용자가 생성 한 것입니다.

이 코드를 사용하여 실행하려고했습니다 :

$code = eval('return($custalg);'); 

하지만 실제 입력 알고리즘, 그리고 그것을 생산하는 것 값을 반환합니다.

내 질문은 어떻게 PHP로 $ custalg에서 문자열을 실행하고 그 결과를 변수에 저장합니까?

+3

답변이 없지만 제발 please * 디자인을 재고하십시오. 'eval()'은 일반적으로 매우 좋지 않지만, 사용자가 제공 한 코드는 insta 해킹입니다. – PeeHaa

+0

@PeeHaa 작동 방식, 이것은 사람들의 서버에 있습니다.) –

+3

책임에 대해 들어 본 적이 있습니까? 그렇지 않다면 당신이 그걸 들여다 볼 것을 제안하겠습니까? – PeeHaa

답변

1

당신은 PHP output control functions를 사용하여 에코 된 출력을 얻을 수 있습니다 :

ob_start(); 
eval("echo $custalg;"); 
$tmp = ob_get_contents(); 
ob_end_clean(); 
$evalOutput = $tmp; 

을 또는 당신은 단지 전역 변수에 반환 값을 할당이 다음과 같은 코드를 사용합니다.

+0

질문에 묘사 된 것과 똑같은 문제가 있습니다. –

+0

@liamwli 예, 맞습니다. 답변을 업데이트했습니다 ... – feeela

+0

감사합니다! 그 완벽하게 일했다 :) –

4

PHP에서는 단 하나 인용 '과 큰 따옴표 " 문자열의 차이점을 알지 못합니다. 당신은 사용해야

$code = eval("return($custalg);"); 

당신이 $custalog가 확장되도록하려면 :

The most important feature of double-quoted strings is the fact that variable names will be expanded. See string parsing for details.

See more in docs합니다.

기본적으로 올바른 구문은 $custalg의 위치와 할당 된 위치에 따라 다릅니다. 귀하의 경우에 귀하의 $custalg이 주 코드로 지정되어 귀하가 대체를 원하지 않는다고 생각합니다.

$code = eval("return \$custalg;"); 
+0

나는 차이가 있다는 것을 깨닫지 못했습니다. 이제이 오류가 발생합니다 :'구문 분석 오류 : 예기치 않은 구문 오류 ',' /pathtofile/login.php(119) : eval() 'd 코드 (57) : eval()'d 코드 on line 1'. 두 번째 eval의 코드는 $ code = one입니다. –

+1

편집 된 답변보기 –

+0

수정 된 답변은 질문 –

관련 문제