老地方冰果室交流區

歡迎冰果室讀者在此交流
現在的時間是 12/06/2019 10:08 am

所有顯示的時間為 UTC + 8 小時




發表新文章 回覆主題  [ 5 篇文章 ] 
發表人 內容
 文章主題 : CGI Database PROBLEM
文章發表於 : 11/27/2005 3:20 am 
離線
基本會員

註冊時間: 08/11/2001 1:01 am
文章: 34
來自: Hong Kong
我有一個投票網是用cgi來寫的, 但不知為什麼, 我的database久不久就重置到0. 我是用一個*.dat來當database的... 最初以為是檔案鎖的問題, 但加了exclusive lock情況也是一樣... 很絕望, 有沒有人知道為何會這樣呢?


回頂端
 個人資料  
 
 文章主題 :
文章發表於 : 11/27/2005 10:11 am 
離線
討論區管理員
頭像

註冊時間: 04/22/2005 7:51 pm
文章: 2894
來自: 台北
我不會寫 CGI 但是有遇過用 PHP 寫計數器遇到相同的問題。
問題就是有使用者同時開啟要寫入這個檔案的時候,大概是 PHP 的 File Lock 只有一種,所以會使得文字檔的資料遺失,也就是歸零了。
後來還是使用資料庫來做這個動作。

而 CGI 的 File Lock 有兩種,您選用的那種「exclusive lock」是不能多執行緒(process) 同時執行的,
改用「shared lock」吧。

參考:
http://www.cgi101.com/book/ch6/text.html


回頂端
 個人資料  
 
 文章主題 :
文章發表於 : 11/27/2005 12:34 pm 
離線
基本會員

註冊時間: 08/11/2001 1:01 am
文章: 34
來自: Hong Kong
詹姆士 寫:
我不會寫 CGI 但是有遇過用 PHP 寫計數器遇到相同的問題。
問題就是有使用者同時開啟要寫入這個檔案的時候,大概是 PHP 的 File Lock 只有一種,所以會使得文字檔的資料遺失,也就是歸零了。
後來還是使用資料庫來做這個動作。

而 CGI 的 File Lock 有兩種,您選用的那種「exclusive lock」是不能多執行緒(process) 同時執行的,
改用「shared lock」吧。

參考:
http://www.cgi101.com/book/ch6/text.html


謝謝你的回覆, 其實我也看了這個網站。有一個地方不明是加了shared lock之後, 如果有兩個人同時要寫入datafile會怎樣?

我發覺另一問題是當有人(超無聊的人)不停在看結果時按reload page, 票數就會直線上升, 然後出現reset這種情況... 有沒有script可以disable reload 呢??


回頂端
 個人資料  
 
 文章主題 :
文章發表於 : 11/27/2005 1:45 pm 
離線
討論區管理員
頭像

註冊時間: 04/22/2005 7:51 pm
文章: 2894
來自: 台北
kris_mac 寫:
謝謝你的回覆, 其實我也看了這個網站。有一個地方不明是加了shared lock之後, 如果有兩個人同時要寫入datafile會怎樣?

用 Shared Lock 看他的說明就是系統會等待一個程序完成後再進行。
只是我不知道在網頁上是不是會等,因為你做的應該不是非同步,是同步,所以網頁會不會 Timeout 呢?我不太清楚。

kris_mac 寫:
我發覺另一問題是當有人(超無聊的人)不停在看結果時按reload page, 票數就會直線上升, 然後出現reset這種情況... 有沒有script可以disable reload 呢??

有人超無聊要這樣 reload 也要同時喔~
我是用 Opera 開多個視窗設定不同秒數自動 Reload 來測試。就會產生那個狀況。

要預防這樣的問題可以用 cookies 去預防,但是如果使用者端沒有開啟就無效了。
麻煩是用資料庫去紀錄囉。

不過那都很麻煩,所以盡量不要用文字檔作可直接寫入的資料庫... 讀取的話當然 OK。
或是就產生空的檔案,以檔名去判斷檔案數目,這樣是不是可以避免那個問題。

用計數器只是短短的幾個字而已都會產生搶灘的情形了,您的投票計數資料應該也有一小段,寫入也要時間耶。
8)


回頂端
 個人資料  
 
 文章主題 :
文章發表於 : 11/27/2005 6:38 pm 
離線
基本會員

註冊時間: 08/11/2001 1:01 am
文章: 34
來自: Hong Kong
詹姆士 寫:
kris_mac 寫:
謝謝你的回覆, 其實我也看了這個網站。有一個地方不明是加了shared lock之後, 如果有兩個人同時要寫入datafile會怎樣?

用 Shared Lock 看他的說明就是系統會等待一個程序完成後再進行。
只是我不知道在網頁上是不是會等,因為你做的應該不是非同步,是同步,所以網頁會不會 Timeout 呢?我不太清楚。

kris_mac 寫:
我發覺另一問題是當有人(超無聊的人)不停在看結果時按reload page, 票數就會直線上升, 然後出現reset這種情況... 有沒有script可以disable reload 呢??

有人超無聊要這樣 reload 也要同時喔~
我是用 Opera 開多個視窗設定不同秒數自動 Reload 來測試。就會產生那個狀況。

要預防這樣的問題可以用 cookies 去預防,但是如果使用者端沒有開啟就無效了。
麻煩是用資料庫去紀錄囉。

不過那都很麻煩,所以盡量不要用文字檔作可直接寫入的資料庫... 讀取的話當然 OK。
或是就產生空的檔案,以檔名去判斷檔案數目,這樣是不是可以避免那個問題。

用計數器只是短短的幾個字而已都會產生搶灘的情形了,您的投票計數資料應該也有一小段,寫入也要時間耶。
8)


其實這是我第一次寫cgi的程式, 我上個星期一才開始看書學,邊學邊寫。 這個也是我第二個寫的網站,對網路安全一竅不通。我這個網站是選"你最討厭的歌手"... 也許因為太多人很"熱心",投不喜愛的歌手一票,導致有這種情況。 我是有用cookies防止reload的,但看來沒用喔 (他們像是一班人一同攻擊, 也可能用script)。 現在改了用share lock試試看。同時又用了automator來每15分鍾下載資料檔當作backup,不便的是要把我部powerbook長開機了。

我的資料檔只有122個數目, 寫入時間應該不會太久吧。

不介意的話請看看這就是我的網站了。http://www.littlelosangeles.com/poll/index.html


回頂端
 個人資料  
 
顯示文章 :  排序  
發表新文章 回覆主題  [ 5 篇文章 ] 

所有顯示的時間為 UTC + 8 小時


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
POWERED_BY
正體中文語系由 竹貓星球 維護製作