輪子哥編程
❶ 程序員鄙視鏈,所有工程師都鄙視php工程師,為什麼
鄙視像條食物鏈,無處不在。
工作篇

❷ 怎麼獲取文件擴展名
如何獲取文件擴展名(獲取文件的擴展名)引言通常文件擴展名在Linux系統毫無意義,只是用來標記文件屬於哪種類型?但大多數人從瀏覽器上訪問Web程序。提交給伺服器的文件有擴展名稱。例如,上傳圖片和上傳文件是一些經典應用。
那麼如何在編程中准確獲取文件的擴展名,並根據分類進行相應的處理呢?實現的方法有很多。今天,我們將向您介紹一些最佳實踐。
粗糙的例子獲取上傳圖片的擴展名,有些學生可能會這樣寫:
$userfile_name = $_FILES['image']['name'];$userfile_extn = explode(".", strtolower($_FILES['image']['name;
然後直接執行文件名 explode ,切出來的是屬組。假設上傳文件的最後一個欄位是文件的擴展名,那麼文件的擴展名就是end($userfile_extn)。假設上傳文件的最後一個欄位是文件的擴展名,那麼文件的擴展名就是
end($userfile_extn)。
這種實現方法完美嗎?有更好的嗎?
如果文件名字元串特殊,這樣的程序會嗎? explode 失敗返回 False?拋出異常?
有可能會!所以有這個寫法 bug 的。
PHP 函數都准備好了!
PHP 內置無數實用函數的工具箱。有一個函數是專門設計來解決這個需求的:pathinfo。以下是用法:$path = $_FILES['image']['name'];$ext = pathinfo($path, PATHINFO_EXTENSION);
瞬間感覺香多了。
還是要多看文檔,我把這個函數的參數和用法貼在下面。所以盡量不要重復輪子。用官方寫的輪子,它靜靜地躺在幫助手冊里等著你去發現。輪子哥
當然,程序是活的。因為我的開發者給出其他解決方案是可以理解的。用 PHP 實現自帶函數的功能已經有了 N 多個辦法。讓我們貼幾個看起來不錯的輪子。至少容錯性比上面寫的高。
比如使用 strrpos substr 實現的:$userfile_name = $_FILES['image']['name'];$userfile_extn = substr($userfile_name, strrpos($userfile_name, '.') 1);
通過查找「.位置,向後一個開始截取字元串的末尾。避免了這種寫法 explored 截取數組失敗,然後返回 false 這個 bug。
另一個例子是,一些開發者只想要圖片的擴展名,可直接使用 image 相關的函數 getimagesize:$image = getimagesize($_FILES['image']['tmp_name']);getimagesize()
任何函數都會被測量 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 圖像文件的大小和返回圖像的大小、文件類型和一個可以用於普通文件 HTML 文件中 IMG 標記中的 height/width 文字字元串。若無法訪問 filename 指定圖像或非有效圖像,getimagesize()將返回
FALSE並產生一條 E_WARNING 級的錯誤。
如果 $image 不為 false,所以是屬組,其中鍵 mime 返回是圖片文件類型 image/jpeg 這樣的字元串。
如果 $image 不為 false,所以是屬組,其中鍵 mime 返回是圖片文件類型 image/jpeg 這樣的字元串。但是沒什麼LUAN用!
寫在最後
比較,還是 pathinfo 最香。
因為這就是 PHP 為什麼不使用官方給定的方式?
❸ 學習數據結構有什麼用
學了順序表和鏈表,你就知道,在查詢操作更多的程序中,你應該用順序表;而修改操作更多的程序中,你要使用鏈表;而單向鏈表不方便怎麼辦,每次都從頭到尾好麻煩啊,怎麼辦?你這時就會想到雙向鏈表or循環鏈表。學了棧之後,你就知道,很多涉及後入先出的問題,例如函數遞歸就是個棧模型、Android的屏幕跳轉就用到棧,很多類似的東西,你就會第一時間想到:我會用這東西來去寫演算法實現這個功能。學了隊列之後,你就知道,對於先入先出要排隊的問題,你就要用到隊列,例如多個網路下載任務,我該怎麼去調度它們去獲得網路資源呢?再例如操作系統的進程(or線程)調度,我該怎麼去分配資源(像CPU)給多個任務呢?肯定不能全部一起擁有的,資源只有一個,那就要排隊!那麼怎麼排隊呢?用普通的隊列?但是對於那些優先順序高的線程怎麼辦?那也太共產主義了吧,這時,你就會想到了優先隊列,優先隊列怎麼實現?用堆,然後你就有疑問了,堆是啥玩意?自己查吧,敲累了。總之好好學數據結構就對了。我覺得數據結構就相當於:我塞牙了,那麼就要用到牙簽這「數據結構」,當然你用指甲也行,只不過「性能」沒那麼好;我要擰螺母,肯定用扳手這個「數據結構」,當然你用鉗子也行,只不過也沒那麼好用。學習數據結構,就是為了了解以後在IT行業里搬磚需要用到什麼工具,這些工具有什麼利弊,應用於什麼場景。以後用的過程中,你會發現這些基礎的「工具」也存在著一些缺陷,你不滿足於此工具,此時,你就開始自己在這些數據結構的基礎上加以改造,這就叫做自定義數據結構。而且,你以後還會造出很多其他應用於實際場景的數據結構。你用這些數據結構去造輪子,不知不覺,你成了又一個輪子哥。