在Ruby中保存到文件时遇到问题

在Ruby中保存到文件时遇到问题,ruby,cgi,Ruby,Cgi,嗨,我有一个简单的表单,允许用户输入姓名、性别和密码。我使用Digest::MD5.hexdigest对输入进行加密。一旦我有了加密的输入,比如d1c261ede46c1c66b7e873564291ebdc,我希望能够将它附加到我已经创建的文件中。然而,我尝试过的每一件事都不起作用。请任何人帮忙,提前谢谢你。以下是我所拥有的: input = STDIN.read( ENV["CONTENT_LENGHT"] ) puts "Content-type: text/html \n\n" req

嗨,我有一个简单的表单,允许用户输入姓名、性别和密码。我使用Digest::MD5.hexdigest对输入进行加密。一旦我有了加密的输入,比如d1c261ede46c1c66b7e873564291ebdc,我希望能够将它附加到我已经创建的文件中。然而,我尝试过的每一件事都不起作用。请任何人帮忙,提前谢谢你。以下是我所拥有的:

input = STDIN.read( ENV["CONTENT_LENGHT"] )
puts "Content-type: text/html \n\n"

require 'digest/md5'
digest = Digest::MD5.hexdigest(input)

f = File.open("register.txt", "a")
    f.write(digest)
f.close
我也尝试过这种方法,但运气不佳:

File.open("register.txt", "a") do |f|
    f.puts(digest)
end

如果代码是逐字逐句的,那么我认为您在第一行中有一个拼写错误:您是指内容长度还是拼写错误?如果设置了变量,ENV[]将返回一个字符串,这将打乱
STDIN#read
。我得到
类型错误:无法将字符串转换为整数。假设输入错误,那么
ENV[]
返回
nil
,这会告诉
STDIN#read
一直读到EOF,我认为控制台的意思是Control-Z。这可能会导致问题

我建议您通过修改脚本进行调查,如下所示:

read_length = ENV["CONTENT_LENGTH"].to_i # assumed typo fixed, convert to integer
puts "read length = #{read_length}"
input = STDIN.read( read_length )
puts "input = #{input}"
puts "Content-type: text/html \n\n" # this seems to serve no purpose

require 'digest/md5'
digest = Digest::MD5.hexdigest(input)
puts "digest = #{digest}"

# prefer this version: it's more idiomatically "Rubyish"
File.open("register.txt", "a") do |f|
  puts "file opened"
  f.puts(digest)
end

file_content = File.read("register.txt")
puts "done, file content = #{file_content}"
这在我的机器上工作,具有以下输出(当CONTENT_LENGTH设置为12时):


我不确定我是否理解;什么不起作用?虽然我不知道为什么要将内容类型写入stdout,但您的代码工作得很好。(我也不明白为什么要使用环境变量来设置变量;你确定输入错误不是唯一的问题吗?)谢谢你的回答,我是Ruby的新手,据我所知,STDIN和STDOUT用于使用POST方法的表单,我就是。老实说,我对ruby有点困惑,我读过的所有东西都让我不知所措。我所要做的就是对表单输入进行加密,然后在表单提交后将其附加到文件中。如果我走错了方向,请给我指出正确的方向。再次感谢。到底是什么不起作用?复制/粘贴您的代码并按预期将摘要添加到我的文件(Ubuntu/Ruby 1.8.7)表单输入?你在做什么CGI的事情吗?!我对此一无所知。现在还不清楚什么不起作用,你是说你没有得到任何表单数据吗?是的,这是CGI的东西,很抱歉我忘了提到它。谢谢你的回复,这是一个很大的帮助,我确实忘了提到这是CGI,我得到一个没有内容类型的内部服务器错误,在提交我收到的表格时:read length=36 input=Username=abc&Gender=abc&Password=abc digest=47ff5e5e40fbceced5c2e24702f236235它没有打开文件并附加任何内容。我已经设法让它写入文件了。谢谢大家的帮助,谢谢迈克·伍德豪斯我确实有一个打字错误。
read length = 12
abcdefghijkl
input = abcdefghijkl
Content-type: text/html

digest = 9fc9d606912030dca86582ed62595cf7
file opened
done, file content = 6cfbc6ae37c91b4faf7310fbc2b7d5e8
e271dc47fa80ddc9e6590042ad9ed2b7
b0fb8772912c4ac0f13525409c2b224e
9fc9d606912030dca86582ed62595cf7