예를 들어, 결과를 생성하는 실행해야합니다 몇 가지 변수를 저장하는 문자열 한 I : 내가 평가가 경우 안전하지 않은 것을 이해eval() 대신 무엇을 사용할 수 있습니까?
$foo = eval("return ".RUN_THIS.";");
: 다음 -uated eval()
define('RUN_THIS', '\$something.",".$somethingElse');
어느 평가되는 문자열은 사용자가 입력 한 것입니다. 그러나 예를 들어, 모든 것을 eval()을 지원하지 않는 Facebook의 HipHop에서 실행하고 싶다면이 작업을 수행 할 수 없습니다.
명백하게 나는 call_user_func()
을 사용할 수 있습니다 .- eval()
과 같은 효과가 있습니까? eval()
이 실제로 그렇지 않은 경우 어떻게 안전하다고 간주됩니까?
편집 : 댓글에 대한 응답으로, 원래 목표가 무엇인지 분명히하지 않았습니다. 상수는 구성 상수 나 프로 시저 코드에 액세스 할 수있는 클래스 내에있는 이후 코드가 주어진 변수 문자열을 평가하기 위해이를 사용할 수 있도록 미리 정의됩니다. 상황에 따라 평가해야하는 변수 (완전히 다른 이름, 순서, 형식)가 다를 수 있지만 같은 목적으로 실행됩니다. 따라서 현재 변수의 문자열이이 변수에 상수로 설정되어 있습니다. 방법. 기술적으로 eval()
은 상수를 정의하는 config.php가 제어되는 한 안전하지 않습니다.하지만 질문의 요지는 아닙니다.
처음에 변수를 저장하는 이유를 설명 할 수 있다면 도움이 될 것입니다. – Cfreak
그래, 이건 디자인 결함 같아. 나중에 코드에서 파싱되는 더 추상적 인 "RUN_THIS"(실제 코드를 포함하지 않는)를 정의 할 수 있습니까? –
당신이 할 수없는 이유가 있나 :'$ foo = "\ $ something, $ somethingElse";' –