динамическое выполнение функции плагина, которая позволяет загруженному файлу и функции выполнять все, что она хочет, однако она может принимать и возвращать только переменные, которые могут быть json_encode
'ed.
function proxyExternalFunction($fileName, $functionName, $args, $setupStatements = '') {
$output = array();
$command = $setupStatements.";include('".addslashes($fileName)."');echo json_encode(".$functionName."(";
foreach ($args as $arg) {
$command .= "json_decode('".json_encode($arg)."',true),";
}
if (count($args) > 0) {
$command[strlen($command)-1] = ")";//end of $functionName
}
$command .= ");";//end of json_encode
$command = "php -r ".escapeshellarg($command);
exec($command, $output);
$output = json_decode($output,true);
}
внешний код полностью изолирован, и вы можете применить любые ограничения разрешений, которые вы хотите, выполнив sudo -u restricedUser php -r ...
.