2012-01-06 59 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