看板 PHP 關於我們 聯絡資訊
※ 引述《gyd (ipod touch之路)》之銘言: : 以下是計數器的程式碼 : $c=file("counter.txt"); : $visit=$c[0]+1; : echo "$visit"; : $fp=fopen("counter.txt", "w"); 問題在這個"w" 根據php.net Open for writing only;place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it. 就是說,當執行到 $fp=fopen("counter.txt","w"); 之後 counter.txt 會被清空 這時如果有另一人執行同樣的 php $c=file("counter") 會變成空的陣列 所以 fputs($fp,$c[0]+1); 會將 1 寫入 counter.txt 看起來就好像是歸零一樣XD 解決方法....我不知道XD 或許 file_put_contents() 可以避免這個問題?w : fputs($fp,$c[0]+1); : fclose($fp); : ---------------------------------------- : 想請問一下 : 每過一段時間後我都會發現計數器又從0開始算 : 是code有bug還是? : 請問如何解決或是有更佳的程式寫法? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.71.78.201
chrisQQ :flock 可以解決嘛@@? 05/19 11:32
bibo9901 :file_put_contents()也會清空... 05/19 11:38
Justisaac :如果將檔案設定讀取限制勒? 05/19 12:16
Justisaac :一次限定一人讀取? 05/19 12:16
HuangJC :multi-thread 裏常談限制或同步,但也會影響效率 05/19 12:28
EragonJ :flock可以做到! 05/19 13:05
w3c :樓樓上的好像很喜歡 multi-thread 05/19 17:04
HuangJC :我喜歡的可多了;對 server 來說,同時上千人瀏覽,的確 05/19 18:45
HuangJC :是上千個 thread.資料庫也要解決這個問題 05/19 18:45
HuangJC :之前高鐵不是出包了? 05/19 18:46
w3c :解決方式有很多 ~ 不只有multi-thread 05/19 19:49
w3c :看到你提multi-thread好幾次了 ... 05/19 19:50
Xezzaosui :通常應該會稱作 race condition 啦 XD 05/19 20:07
gyd :謝謝各位,已嘗試修改,等幾天後看會不會又歸0..XD 05/19 22:17
HuangJC :multi-thread 不見得是方法,而是現象;我沒說要用它解 05/19 22:39
HuangJC :決,而是我理解的現象已經存在了.當你學的領域多了就 05/19 22:40
HuangJC :會開始有名詞借用,好像電學字眼借去磁學用一樣 05/19 22:40
HuangJC :當然從更高領域來說,單 CPU 根本沒有 multi-thread 05/19 22:42
HuangJC :全都是 time-slide;如果想到 multi-thread,解決方法 05/19 22:43
HuangJC :是 critical section,而 flock 的確就是這個東西 05/19 22:43
HuangJC :在一些別人的 data-sheet 裏,人家開 API 給你用,就是 05/19 22:44
HuangJC :會詳細描述每個狀態;server 跑到哪裏,client 跑到哪 05/19 22:45
HuangJC :一次看到兩個都在執行,可以說是遲早要想通的事 05/19 22:45
HuangJC :沒想通前,另一個經典問題'怎麼跳轉網頁',就會變很怪 05/19 22:46
HuangJC :header('Location:xxx') 會被以goto來理解;其實不是 05/19 22:47
HuangJC :cpu 或程序本來就有 thread 概念,不必有這個指令它還 05/19 22:50
HuangJC :是有 thread,很多人學程序語言都在想像 goto,while等 05/19 22:51
HuangJC :那都是想像一個 thread 跑到哪;然後衍生其他誤會 05/19 22:51
HuangJC :我們可以給魚,或者趁機講清楚;我不覺得給魚才正確 05/19 22:52
HuangJC :要不然,上次怎麼會有那種錯誤的描述? 05/19 22:53
w3c :我覺得 你還是說中文好了 ~ multi-thread 可以指很多 05/19 23:14
w3c :東西 ~ 老是套一堆非專有名詞的英文 ~ 05/19 23:14
w3c :誰知道你講哪個鬼 05/19 23:15
HuangJC :那我說多執行緒好了.. 05/20 00:17
HuangJC :你愛不愛用這個概念我不在乎,因為溝通是要用對方能用 05/20 00:17
HuangJC :的字眼,如果你聽不懂,我就換一個字眼;但不代表我的字 05/20 00:18
HuangJC :眼錯了.所以上次我沒爭辯什麼,因為只要了解就是最好 05/20 00:18
HuangJC :但如果你有點'不許用',而不是聽不懂,那我就得護航了 05/20 00:19
HuangJC :因為,或許有些人對這個字眼是了解很快的 05/20 00:19
w3c :我不是那個意思,上次或許是他問的方式有問題 05/20 00:20
w3c :導致有誤解的狀況 05/20 00:21
w3c :只是你提出multi-thread 卻讓我想到別的東西 ~ 05/20 00:21
w3c :那是跟那篇的原PO提出的問題相關好嗎? 05/20 00:22
w3c :要教人 給魚不見得不是好方法 ~ 05/20 00:23
w3c :可是 你給的釣竿 ~ 卻像給根竹子要人先做釣竿一樣 05/20 00:23
w3c :降子 ~ 我怕他吸收也有問題吧 ~ 您說是吧 ?! 05/20 00:24
HuangJC :上次的主因是我沒耐性看他的程式 XD;我一向很依賴發 05/20 00:25
gpmm : w 兄,隨他去吧(拍肩) 05/20 00:25
HuangJC :問者自己的描述.描述得愈好,我了解問題愈快 05/20 00:25
HuangJC :我手上有一支程式是這樣的:一個網頁要等待另一個網頁 05/20 00:30
HuangJC :的執行結果.這裏有些巧妙的東西要看穿 05/20 00:31
HuangJC :這個我另外 PO 文吧.. 05/20 00:34
w3c :呃 不需要吧 ~ 我懂你的意思啦 @@ 05/20 00:34
HuangJC :你就教一下我另一個問題吧,看有沒有更好的解法 05/20 01:00