Re: [問題] cgi中以二進位寫入(binmode)

看板Perl作者 (Neisseria)時間9年前 (2015/11/12 06:42), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《hijkxyzuw (i,j,k) ×(x,y,z)》之銘言: : 請問寫入時為什麼要用binmode? 也就是`binmode(FHD);`的意義。 : 我寫了一個供上傳的腳本,目前沒有放那行,運作正常。 : (上傳gif, gzip, txt, 再下載都沒有異常,用diff指令看也一樣。 ) 用 binmode 是防止檔案損害、節錄: the binmode function tells Perl to write the file in binary mode, rather than in text mode. This prevents the uploaded file from being corrupted on non-UNIX servers (such as Windows machines). 出處:http://www.sitepoint.com/uploading-files-cgi-perl-2/ : ================================================================= : 另外問一下,一般都怎麼處理用html表單上傳的檔案? : 除了用cgi模組直接讀取外。 : (一直不懂模組、物件導向;而且server也不是我的。) : 我是直接砍掉首四行,末x行。(看表單有沒有其它值。) : 還有上傳的檔案是什麼時候需要解碼? : (目前我只有用到上傳檔案,寫入、讀取沒有問題。) 不太確定這裡提到的『砍掉首四行,末x行』是什麼意思 是指去除一些 HTML tag 嗎?再分享一下細節? Perl 的物件導向不太好學,會用到 module 後來的人為了改善這點,創造了 Moose,但是反而要學更多東西 建議先學純 module,就是不加入物件導向,單純放 subroutine 之後再學傳統的 Perl OOP,就是用 blessed hash 或 array 搭配 module 之後再學 Moose,雖然這不是內建的功能,但是對 OOP 蠻有幫助的 不過,實務上,可以用 Moo 取代 Moose,Moo 比較小,啟動速度也比較快 : =============================================================== : 我是perl新新手,最近在學perl, 學的方法是寫cgi. : 之前是用php. : 但覺得perl是通用語言,學起應該不錯,就跳槽了。 這種學習方式還蠻特別的,一般不是學 command line app 比較簡單嗎? command line app 不用透過網頁進行 I/O,寫起來會比較快 現在很少人在寫 CGI 了,除非是很簡單的單頁網頁 就算是 PHP,也較少土炮單頁的 PHP 網頁,而會引入 framework 喜歡寫 CGI 的話,建議用 Dancer (http://perldancer.org/) 對於不需要寫後台管理的中小型網站 我個人還蠻建議用 Sinatra-like framework Sinatra-like framework 的特色是用 HTTP action 做為組織 code 的方式 不過,這種 framework 沒有典型 MVC 的概念,要自已安排 code 就是了 這種概念的 framework 在很多語言都可以看到,包括 Dancer 和 Mojolicious : 目前覺得perl的語法有點亂……,處處充滿驚奇R! XD : 也許我該學個「工整」、「制式化」的語言作基礎才對。 : 像python, java, pascal.... 的確有時候會有這種感覺,有時候寫錯了也可以跑 先在 use strict; use warnings; 的模式下練習,這種感覺會比較少 可以找一本時間較近的參考書籍,對學習會有幫助 像是 Beginning Perl, Curtis Ovid Poe, Wrox 2012 這本寫得不錯 而且會提到一些比較新的東西,像是 Moose 等 學程式語言,除了語法上的不同,還是要看實用面 像 Perl 或 AWK,可以寫 one-liner 程式 雖然可以用對等的 Python 程式完成,但是就是比較慢 如果用對等的 Java 也可以,但只會更慢 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 112.105.246.186 ※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1447281772.A.8C9.html

11/12 13:29, , 1F
意思是如果不用binmode, 會自動把CRLF換成LF嗎?
11/12 13:29, 1F

11/12 13:31, , 2F
而用了binmode, 寫入時就不會對內容更改,直接寫入?
11/12 13:31, 2F

11/12 13:48, , 3F
前四行是報頭`...Content-Type: text/html name:"file"
11/12 13:48, 3F

11/13 00:06, , 4F
可能要再自已查一下 binmode 的功能
11/13 00:06, 4F
文章代碼(AID): #1MGyHiZ9 (Perl)
文章代碼(AID): #1MGyHiZ9 (Perl)