[精讚] [會員登入]
82

一個邏輯的錯誤刪了全部檔案的經驗

今天本來想做一件很簡單的事,但卻足足浪費我多一倍的時間,再加上刪掉我全部的檔案,原因只是因為我自己的邏輯錯誤。

此文完整連結 http://n.sfs.tw/10100

複製連結 一個邏輯的錯誤刪了全部檔案的經驗@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2016-12-25 10:39:15 最後編修
2016-10-30 03:25:09 By 瘦河馬
 

今天本來想做一件很簡單的事,但卻足足浪費我多一倍的時間,再加上刪掉我全部的檔案,原因只是因為我自己的邏輯錯誤。

原本我的想法是這樣:

刪除資料庫的文件-->刪除資料庫中此文件的圖片和檔案-->刪除實體的圖片和檔案

這個流程很簡單,我一開始是這麼認為的,沒有好好的思考,於是我這樣子寫:

1. 刪除資料庫的文件
2. 刪除資料庫中此文件的圖片和檔案
3. 刪除實體的圖片和檔案

當我執行下去的時候,發現整個上傳的資料匣全部被清空,咦?難道是我的遞迴函式寫錯?我抽程式碼出來模擬測試,並沒有錯誤,但是真正實機執行時,竟然會把我整個上傳的資料匣全部被清空。

我費了很多時間在研究我程式的錯誤點,足足多花了快二個小時。

最後我發現原來是我自己白痴的邏輯問題所產生,

好吧,以前當我是嫩b時,我有時會信誓旦旦的說一定是電腦的問題,發現bug...

後來幾次的結果都是我自己本身是bug。

那不是重點,回到主題,上面看起來很正常,事實上卻是白痴到不行:

1. 刪除資料庫的文件--很ok
2. 刪除資料庫中此文件的圖片和檔案--很ok

3. 刪除實體的圖片和檔案--這裡出錯,因為我的方法是去資料庫把檔案的路徑讀出來,再送到我的遞迴函式去刪掉。沒錯,我竟然沒想到我第2步就把所有檔案的資料庫內容刪掉了,當然讀不出資料。結果傳到我的遞迴函式中的目錄原本應該是:

/path/to/uploads/class/dir/

結果變成

/path/to/uploads/

然後我的遞迴函式就把整個 uploads/的目錄匣裡的檔案全部清空了....

delTree( "/path/to/uploads/");

修正方法很簡單,就是把2和3互調就好了,但我也是搞得焦頭爛額才發現。

--
今天要說白痴的事,還有第2件,下面是我的php程式碼:

    $op= "rename";

   if($op==="del")
      if (is_dir($full_dir)) do_something();
   elseif($op==="rename"){
      do_rename();
   }

踏馬的電腦是不是又透斗了?為什麼一直不給我執行do_rename()?

我在想,是不是因為我的php是5.6版,他對於運算子"==="的定義有修改?

然後我又多花了幾十分鐘,又測試研究為什麼,然後把程式改得不像樣後終於正常了:

  $op= "rename";
  if($op=="del"){
      if (is_dir($full_dir)) do_something();
  }

  if($op=="rename"){
      do_rename();
  }

我神…機…病…啊,這種爛code怎麼可以接受,我又再努力思考原來的code到底哪裡出問題。

原來我犯了一個初學者會犯的錯誤
 

   if($op==="del")
      if (is_dir($full_dir)) do_something();
   elseif($op==="rename"){
      do_rename();
   }

因為少了大刮號,所以if 後面的 if...elseif是同一組,要修改成這樣才行:

   if($op==="del"){
      if (is_dir($full_dir)) do_something();
   }elseif($op==="rename"){
      do_rename();
   }

我只能說我自己太不小心,浪費很多不必要的時間。

下面結論一下寫程式的幾個原則,這些原則是經驗累積,非常重要:

1. 千萬不要在快下班的時候改程式,改壞的機率是87%。你有可能被call回來加班。

2.千萬不要在神智不清的時候改程式,改壞的機率是78%。你有可能會產生非常嚴重的災難,例如這個

3. 千萬不要在運作中的伺服器中改程式,改壞的機率是38%,請你先建立副本再改,包括資料庫,必要時先備份。

4. 在實機中下資料庫的update/delete時,請先用 select確認你設的條件是對的。不然你有可能會.被..火..了,例如這個

5. 請隨時存檔和備份,災難永遠都會出現,只有備份能救你,真的...不騙你。

6. 不要覺得會寫程式,會用艱澀的語言很了不起,寫出能商業化能賣錢有人要用的程式才有用

7. 不要覺得只有什麼語言什麼框架才是王道,別人都落伍,真正的高手連小畫家都能畫出傑作,那些都只是工具!就算給你萬能的工具,連個輪子都不會造一點用也沒有。

8. 電腦不會錯,錯的都是人腦,好吧,電腦錯的機率比麻雀摔死的機率還低。

9. 請不要在家目錄建立以 etc, home 為名稱的目錄,因為你有很高的機率會把自己的系統刪掉,只因為多加了一個"/"或是少加一個"."。

10. 每個程式都一定有bug,使用越久的程式雖然改得亂七八糟,但相信我,他的bug可能是最少的。


來貝比~多吃點才會長大!
 

 

你可能感興趣的文章

只會買到爛貨的政府採購法 政府採購的公開招標,常常就只能比價格不能比品牌,只能比價格不能比品質,只能比價格不能比口碑,只能比價格不能比信用...

[申訴] 中彰快速74號道西屯路南下匝道塞車問題 中彰快速74號道西屯路南下匝道塞車問題,終於受不了所以投書交通部公路總局局長信箱

分享還是炫耀? 是分享還是炫耀,取決於對方的的心態和你的心態...

別人憑什麼教你? 憑什麼別人要把成功的技巧教給你?

當壞人被放縱,就等於是處罰好人 當壞人被放縱,就等於是處罰好人就是這個社會的現況

罰單申訴和註銷記錄 沒發現新裝了一台測速器讓我連二天接到超速的罰單,去申訴成功的記錄

一個邏輯的錯誤刪了全部檔案的經驗 今天本來想做一件很簡單的事,但卻足足浪費我多一倍的時間,再加上刪掉我全部的檔案,原因只是因為我自己的邏輯錯誤。

詭異的創業思維 創業的思維中,有多少銀彈,有多少技術,有多少人脈,有多少時間等等,每個都要考慮進去,以熱忱建立的關係脆弱的像蘇打餅乾一樣..

信用卡被盜刷全記錄 我的信用卡被盜刷了,以下是全記錄,內容有情緒用字,不能接受者請離開。

博客來洩漏個人資料 「博客來網路書店」洩漏我的個人資料的一個記錄

我有話要說


限制:留言最高字數1000字,超過部分會被截掉。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

[MAC] 截取螢幕畫面的方法 截取螢幕畫面的方法,在MAC中叫作螢幕快照,英文是screenshot

HP SAS硬碟leds燈號說明 HP SAS硬碟leds燈號(hp g7/g6系統適用)說明

[Freebsd] 定時測試 ADSL 是否斷線並重連 中華電信 ADSL 雖有固定 ip,可是他卻會不定時「斷線」, 使用以下的 方法可以定時測試是否斷線,以及重新撥接。

[札記] 2016.7~12月札記 札記,只是札記

看懂DSUB DVI HDMI USB等各式影音接頭 看懂DSUB DVI HDMI等各式影音接頭