(PECL luasandbox >= 1.0.0)
LuaSandbox::registerLibrary β Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ Π½Π°Π±ΠΎΡ PHP-ΡΡΠ½ΠΊΡΠΈΠΉ ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Lua
Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ Π½Π°Π±ΠΎΡ PHP-ΡΡΠ½ΠΊΡΠΈΠΉ ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Lua, ΡΡΠΎΠ±Ρ Lua ΠΌΠΎΠ³ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ PHP.
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΉ Lua ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ ΡΠΌΠΎΡΡΠΈΡΠ΅ LuaSandboxFunction::call().
libnameΠΠ°Π·Π²Π°Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. Π ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Lua Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Ρ ΡΡΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Π² ΡΠ°Π±Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡΠ»ΠΈ ΡΠ°Π±Π»ΠΈΡΠ° ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΠΊ Π½Π΅ΠΉ Π±ΡΠ΄ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
functionsΠΠ°ΡΡΠΈΠ² (array), Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ»ΡΡ - ΡΡΠΎ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ, Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ - ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΉ (callable) PHP-ΠΊΠΎΠ΄.
Π€ΡΠ½ΠΊΡΠΈΡ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ #1 Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ PHP-ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΈΠ· Lua
<?php
// ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ LuaSandbox
$sandbox = new LuaSandbox();
// ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ Π² ΡΡΠ΅Π΄Π΅ Lua
function frobnosticate( $v ) {
return [ $v + 42 ];
}
$sandbox->registerLibrary( 'php', [
'frobnosticate' => 'frobnosticate',
'output' => function ( $string ) {
echo "$string\n";
},
'error' => function () {
throw new LuaSandboxRuntimeError( "Π§ΡΠΎ-ΡΠΎ ΠΏΠΎΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΊ" );
}
] );
?>