繁体   English   中英

如何在Lua Extension for PHP中处理无限循环?

[英]How can I handle a endless loop in Lua Extension for PHP?

我将Lua Extension与PHP 7.1一起使用。 不幸的是,我没有找到真正的文档。 只有这个 我已经知道我可以使用lua沙箱来限制对lua函数的访问。

但是我该如何限制Lua持续时间呢? 我想在x秒后或x计算周期或x行代码后中止lua解析。

如果我解析这样的内容(无限循环):

<?php
try {
    $lua = new Lua();
    $lua->eval("
        while 1 do
            -- something
        end
    ");
} catch (Exception $e) {
    $e->getMessage();
}?>

的PHP脚本永远运行。

不可能像您想要的那样覆盖while循环,但是您可以创建自己的函数(例如While ),该函数接受一个函数并使用count方法。 就像是

local limit = 500

function While( condition, dofunc )
    local count = 0
    repeat
        count = count + 1
        if count > limit then
            print( 'Aborting loop: limit (' .. limit .. ') reached.' )
            break
        end
        dofunc()
        var = condition()
    until not var
end

以及一些示例用法。

local i = 1
local tab = { 'a', 's', 'd', 'f' }
While( function() return tab[i] end, function() 
    print( tab[i] )
    i = i + 1
end )
-- Prints 'a', 's', 'd', 'f'

While( function() return true end, function() print( 'test' ) end )
-- Prints 'test' 500 times, then quits

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM