Базовое использование LuaSandbox

После того, как вы скомпилировали PHP с поддержкой LuaSandbox, вы можете начать использовать LuaSandbox для безопасного выполнения предоставленного пользователем кода Lua.

Пример #1 Выполните код Lua

<?php

$sandbox 
= new LuaSandbox;
$sandbox->setMemoryLimit50 1024 1024 );
$sandbox->setCPULimit10 );

// Зарегистрируйте некоторые функции в среде Lua

function frobnosticate$v ) {
    return [ 
$v 42 ];
}

$sandbox->registerLibrary'php', [
    
'frobnosticate' => 'frobnosticate',
    
'output' => function ( $string ) {
        echo 
"$string\n";
    },
    
'error' => function () {
        throw new 
LuaSandboxRuntimeError"Что-то пошло не так" );
    }
] );

// Выполните некоторый код Lua, включая callback-функции PHP и Lua.

$luaCode = <<<EOF
php.output( "Привет, мир" );

return "Привет", function ( v )
    return php.frobnosticate( v + 200 )
end
EOF;

list( 
$hi$frob ) = $sandbox->loadString$luaCode )->call();
assert$frob->call4000 ) === [ 4242 ] );

// Вызываемые PHP исключения LuaSandboxRuntimeError могут быть пойманы внутри Lua

list( $ok$message ) = $sandbox->loadString'return pcall( php.error )' )->call();
assert( !$ok );
assert$message === 'Что-то пошло не так' );

?>