我有一个使用CGI和LUA的网络服务器(uhttpd)。 我用textarea做了一个表格。 我需要的是将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
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>")
此脚本向我展示了textrea上file.txt的内容。 现在我需要一个按钮&#34; Save&#34;将textarea再次发布到文件中。
感谢您的帮助,祝您度过愉快的一天。
答案 0 :(得分:0)
小批评:lines_from
文件每次调用时都会覆盖全局变量lines
。这应该是本地的。在阅读之前打开和关闭文件以查看它是否存在是浪费。该操作可以折叠为lines_from
:
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>")
要将文本写回文件,只需颠倒过程,在&#34; w +&#34;中打开文件。模式(替换现有数据):
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)