luasandbox-php-examples-basic-9

  • Examples
  • Basic usage for LuaSandbox

  • Basic usage for LuaSandbox
  • Basic usage for LuaSandbox

    Basic usage for LuaSandbox

    Once you’ve compiled PHP with LuaSandbox support,
    you can begin using LuaSandbox to safely run user-provided Lua
    code.

    Example #1 Execute some Lua code

    <?php

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

    // Register some functions in the Lua environment

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

    $sandbox->registerLibrary'php', [
        
    'frobnosticate' => 'frobnosticate',
        
    'output' => function ( $string ) {
            echo 
    "$string\n";
        },
        
    'error' => function () {
            throw new 
    LuaSandboxRuntimeError"Something is wrong" );
        }
    ] );

    // Execute some Lua code, including callbacks into PHP and into Lua

    $luaCode = <<<EOF
    php.output( "Hello, world" );

    return "Hi", function ( v )
        return php.frobnosticate( v + 200 )
    end
    EOF;

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

    // PHP-thrown LuaSandboxRuntimeError exceptions can be caught inside Lua

    list( $ok$message ) = $sandbox->loadString'return pcall( php.error )' )->call();
    assert( !$ok );
    assert$message === 'Something is wrong' );

    ?>