From: Wakou Aoyama Date: 2000-06-12T05:56:42+09:00 Subject: [ruby-dev:10008] Re: [ruby-talk:03267] Re: mod_ruby error? 青山です。 On Mon, 12 Jun 2000 01:43:39 +0900, Wakou Aoyama wrote: > また、問題は eruby(.rhtml), mod_ruby(.mrb) どちらでも発生し、行ける時 > には、100MB 程度もきちんと行くので、ファイルサイズによるものでも無さそ > うです。 apache -X で起動すると 100% 落ちますね。なぜ multipart form を受け取っ た場合にだけ落ちるのかまでは不明ですが、引金は Apache::request#[], Apache::request#send_http_header のようです。cgi.rb ではこれらを使わず に通常のヘッダ出力を行なうようにすると、落ちなくなります。 実験用のスクリプトを付けておきます。 #!/usr/local/bin/ruby -T1 require "cgi" cgi = CGI.new("html3") cgi.out() do cgi.html("PRETTY"=>($DEBUG ? " " : false)) do cgi.head{ cgi.title{ "file upload test" } } + cgi.body() do cgi.multipart_form() do cgi.file_field("uploaded_file") + cgi.br + cgi.file_field("uploaded_file") + cgi.br + cgi.file_field("uploaded_file") + cgi.br + cgi.submit() end + if cgi.has_key?("uploaded_file") cgi["uploaded_file"].collect() do |uploaded_file| cgi.hr + cgi.dl() do cgi.dt{ 'Content-Type: ' } + cgi.dd{ CGI::escapeHTML(uploaded_file.content_type) } + cgi.dt{ 'Original Filename: ' } + cgi.dd{ CGI::escapeHTML(uploaded_file.original_filename) } + cgi.dt{ 'Local Path: ' } + cgi.dd{ CGI::escapeHTML(uploaded_file.local_path) } + cgi.dt{ 'Size: ' } + cgi.dd{ CGI::escapeHTML(uploaded_file.stat.size.to_s)} + cgi.dt{ 'Body (head 200 bytes): ' } + cgi.dd{ cgi.pre{CGI::escapeHTML(uploaded_file.read(200) || "")}} end end.join() else '' end end end end <% require "cgi" cgi = CGI.new() %> file upload test



<% if cgi.has_key?("uploaded_file") %> <% cgi["uploaded_file"].each() do |uploaded_file| %>
Content-Type:
<%= CGI::escapeHTML(uploaded_file.content_type) %>
Original Filename:
<%= CGI::escapeHTML(uploaded_file.original_filename) %>
Local Path:
<%= CGI::escapeHTML(uploaded_file.local_path) %>
Size:
<%= CGI::escapeHTML(uploaded_file.stat.size.to_s) %>
Body (head 200 bytes):
<%= CGI::escapeHTML(uploaded_file.read(200) || "") %>
<% end %> <% end %> -- 青山 和光 Wakou Aoyama