Post 使用lua将文本区域保存到文件中
我有一个web服务器(uhttpd),它使用CGI和LUA。 我制作了一个带有文本区域的表单。 我需要的是将textarea的内容保存在/etc/list.txt中的文件中 我认为LUA脚本必须读取POST变量,然后将它们保存到本地文件/etc/list.txt中 我已经有了读取文件的脚本:Post 使用lua将文本区域保存到文件中,post,lua,textarea,Post,Lua,Textarea,我有一个web服务器(uhttpd),它使用CGI和LUA。 我制作了一个带有文本区域的表单。 我需要的是将textarea的内容保存在/etc/list.txt中的文件中 我认为LUA脚本必须读取POST变量,然后将它们保存到本地文件/etc/list.txt中 我已经有了读取文件的脚本: function file_exists(file) local f = io.open(file, "rb") if f then f:close() end return f ~= nil
function file_exists(file)
local f = io.open(file, "rb")
if f then f:close() end
return f ~= nil
end
function lines_from(file)
if not file_exists(file) then return {} end
lines = {}
for line in io.lines(file) do
lines[#lines + 1] = line
end
return lines
end
local file = '/etc/list.txt'
local lines = lines_from(file)
print ('<textarea name="mensaje" cols="40" rows="40">')
for k,v in pairs(lines) do
print(v)
end
print ("</textarea>")
功能文件\u存在(文件)
本地f=io.open(文件“rb”)
如果为f,则为f:close()结束
返回f~=nil
结束
来自(文件)的功能行
如果文件不存在(file),则返回{}end
行={}
对于io中的行。行(文件)do
线条[#线条+1]=线条
结束
回程线
结束
本地文件='/etc/list.txt'
本地行=来自(文件)的行
打印(“”)
对于k,v成对(线)do
印刷品(五)
结束
打印(“”)
此脚本将file.txt的内容显示在文本区域中。
现在我需要一个“保存”按钮,将文本区域再次发布到文件中
感谢您的帮助,祝您度过愉快的一天。小评论:文件中的
行\u每次调用时都会覆盖全局变量行。这应该是本地的。在读取文件之前打开和关闭文件以查看它是否存在也是浪费。该操作可以从
折叠到行中:
function lines_from(filename)
local lines = {}
local file = io.open(filename)
if file then
for line in file:lines(file) do
lines[#lines + 1] = line
end
file:close();
end
return lines
end
在你的情况下,甚至没有理由把文本读成行。只需读取文件的所有文本:
function text_from(filename)
local text = ''
local file = io.open(filename)
if file then
text = file:read('*a')
file:close();
end
return text
end
local file = 'test.lua'
local text = text_from(file)
print ('<textarea name="mensaje" cols="40" rows="40">')
print(text)
print ("</textarea>")
function save_text_to(filename, text)
local file = io.open(filename, 'w+')
if file then
text = file:write(text);
file:close();
end
end
save_text_to('foo', text)