Tùy chọn bảo mật và dễ bảo trì nhất sẽ là lập trình một "ngôn ngữ mini" chuyên dụng trong php. Bạn có thể biến nó thành một tập hợp con của php, hoặc làm cho nó trông giống như các công thức Excel, hoặc thậm chí là tạo ra công thức của riêng bạn. Bằng cách này, bạn sẽ luôn có toàn quyền kiểm soát những gì đang xảy ra.
//
chỉ để cho vui, đây là một Lisp nhỏ cho bạn
function lisp($x) {
if(is_string($x)) {
$re = '~\(([^()]*)\)~';
while(preg_match($re, $x))
$x = preg_replace_callback($re, 'lisp', $x);
return trim($x);
}
$x = preg_split('~\s+~', $x[1]);
$e = array_shift($x);
if(!$x)
return is_numeric($e) ? floatval($e) : $e;
switch($e) {
case '+': return lisp($x[0]) + lisp($x[1]);
case '-': return lisp($x[0]) - lisp($x[1]);
case '*': return lisp($x[0]) * lisp($x[1]);
case '/': return lisp($x[0])/lisp($x[1]);
case 'concat': return lisp($x[0]) . lisp($x[1]);
}
return function_exists($e) ?
call_user_func_array($e, array_map('lisp', $x)) : '';
}
$input = '
(strtolower
(concat
(strrev olleh)
(+ 22 20)))';
echo lisp($input); // hello42
;))
@stereofrog Đó là lý do tôi không giới thiệu nó. Vui lòng chỉnh sửa câu trả lời của tôi để làm cho nó ít khó hiểu hơn. Tôi kinh khủng khi giải thích. – NullUserException
Không nên là "chức năng đáng tin cậy ** danh sách trắng ** là không thể trong PHP"? Bởi vì danh sách đen có thể sử dụng disable_functions. – wimvds
Không nhận thấy rằng, tôi sẽ chỉnh sửa nó sau đó: p. – wimvds