2012-01-06 35 views
0

您好我有一个简单的表单,允许用户输入名称,他们的性别和密码。我使用Digest :: MD5.hexdigest加密输入。一旦我有加密的输入,例如,d1c261ede46c1c66b7e873564291ebdc,我希望能够将其附加到我已创建的文件。然而,我尝试过的每一件事都无法正常工作。任何人都可以请帮助,并提前感谢你。以下是我有:无法保存到Ruby文件

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 
+1

我不知道我明白;什么不工作?你的代码工作得很好,但我不知道你为什么写内容类型到标准输出。 (我也不明白你为什么使用环境变量来设置一个变量;你确定错字不是唯一的问题吗?) – 2012-01-06 13:13:06

+0

感谢您的回复,我是Ruby的新手,据我所知,STDIN&STDOUT用于使用POST方法的形式,我是。说实话,我对红宝石有些困惑,我读过的所有东西都只是在我的头上。我之后的所有内容都是要加密的表单输入,然后在提交表单后将其附加到文件中。如果我走错了方向,请指向正确的方向。再次感谢。 – Yokocapolo 2012-01-06 13:35:54

+0

什么不工作?按照预期将复制/粘贴代码附加到我的文件中(Ubuntu/Ruby 1.8.7) – 2012-01-06 13:39:40

回答

1

如果代码是逐字那么我认为你必须在第一行输入错误:你的意思是CONTENT_LENGHT还是它是一个错字?如果变量被设置,ENV []将返回一个字符串,这会使STDIN#read沮丧。我得到TypeError: can't convert String into Integer。假设输入错误,然后ENV[]返回nil,它告诉STDIN#read读取,直到EOF,从控制台意味着,我认为,控制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):

read length = 12 
abcdefghijkl 
input = abcdefghijkl 
Content-type: text/html 

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

谢谢你的回复,这是一个很大的帮助,我忘了提及这是CGI,当我提交表单时,我得到一个没有内容类型的内部服务器错误: read length = 36 input = Username = abc&Gender = abc&Password = abc digest = 47ff5e5e40fbcced5c2e24702f236235 它没有打开文件并追加任何内容。 – Yokocapolo 2012-01-06 14:12:59

+0

我已经设法让它写入一个文件,现在感谢大家的帮助,谢谢麦克伍德豪斯我确实有一个错字。 – Yokocapolo 2012-01-06 15:31:04