Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理PHP的Lua扩展中的无止境循环?_Php_Lua - Fatal编程技术网

如何处理PHP的Lua扩展中的无止境循环?

如何处理PHP的Lua扩展中的无止境循环?,php,lua,Php,Lua,我在PHP7.1中使用。不幸的是,我没有找到真正的文档。只有我已经知道我可以使用lua沙盒来限制对lua函数的访问 但是如何限制lua的持续时间呢?我想在x秒或x个计算周期或x行代码后中止lua解析 如果我分析如下内容(无止境循环): php脚本将永远运行。不可能像您希望的那样覆盖while循环,但是您可以创建自己的函数(例如,while),该函数接受一个函数并使用count方法。差不多 local limit = 500 function While( condition, dofunc

我在PHP7.1中使用。不幸的是,我没有找到真正的文档。只有我已经知道我可以使用lua沙盒来限制对lua函数的访问

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

如果我分析如下内容(无止境循环):



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

它不会附加一个精确的时间,但是您可以在循环之外创建一个变量,比如
count=0
或其他什么,然后在每个循环中递增它。如果超过某个值,
中断
循环。你也可以考虑使用一个库(比如),或者至少看看它是如何实现的谢谢你的答案。lua代码将由用户编写脚本。我不能直接处理。php lua扩展不支持协同路由。但是您的sandbox.lua解决方案使用协同程序。它也不起作用。我想我必须查一下扩展码本身。谢谢你的回答。我不知道用户将上传和执行什么样的lua代码。所以,也许下面的代码是可能的:“While(function()返回true end,function()While true do print(‘无尽循环’)end end)”如果没有协同程序,我无法在lua中解决它。我认为它可以与php fork扩展或单独的php进程上的ajax调用和服务器端超时一起工作,但未经测试,感觉非常脏。
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