PHP遞歸創(chuàng)建多級(jí)目錄
我的第一個(gè)感覺(jué)就是用遞歸創(chuàng)建,具體思路如下:
function Directory($dir){ if(is_dir($dir) || @mkdir($dir,0777)){ //查看目錄是否已經(jīng)存在或嘗試創(chuàng)建,加一個(gè)@抑制符號(hào)是因?yàn)榈谝淮蝿?chuàng)建失敗,會(huì)報(bào)一個(gè)“父目錄不存在”的警告。 echo $dir."創(chuàng)建成功<br>"; //輸出創(chuàng)建成功的目錄 }else{ $dirArr=explode('/',$dir); //當(dāng)子目錄沒(méi)創(chuàng)建成功時(shí),試圖創(chuàng)建父目錄,用explode()函數(shù)以'/'分隔符切割成一個(gè)數(shù)組 array_pop($dirArr); //將數(shù)組中的最后一項(xiàng)(即子目錄)彈出來(lái), $newDir=implode('/',$dirArr); //重新組合成一個(gè)文件夾字符串 Directory($newDir); //試圖創(chuàng)建父目錄 if(@mkdir($dir,0777)){ echo $dir."創(chuàng)建成功<br>"; } //再次試圖創(chuàng)建子目錄,成功輸出目錄名 } } Directory("A/B/C/D/E/F");
輸出結(jié)果如圖:
但是可以看得出來(lái),寫(xiě)得也太麻煩了,在手冊(cè)里翻看文件函數(shù),看到一個(gè)dirname()函數(shù),其原型如下:
string dirname ( string $path )
給出一個(gè)包含有指向一個(gè)文件的全路徑的字符串,本函數(shù)返回去掉文件名后的目錄名。
在 Windows 中,斜線(/)和反斜線(\)都可以用作目錄分隔符。在其它環(huán)境下是斜線(/)。
可以稍稍地優(yōu)化一下:
function Directory($dir){ if(is_dir($dir) || @mkdir($dir,0777)){ echo $dir."創(chuàng)建成功<br>"; }else{ Directory(dirname($dir)); if(@mkdir($dir,0777)){ echo $dir."創(chuàng)建成功<br>"; } } }
效果一樣。
之后我在在網(wǎng)上搜一下答案,找到一個(gè)異常精辟的:
function Directory( $dir ){ return is_dir ( $dir ) or Directory(dirname( $dir )) and mkdir ( $dir , 0777); }
現(xiàn)在來(lái)解釋一下整個(gè)函數(shù):
先介紹一下PHP中邏輯運(yùn)算符的優(yōu)先級(jí)順序:&& > || > and > or,即符號(hào)型>字母型,AND型>OR型,所以函數(shù)體可以看成:
is_dir ( $dir ) or (Directory(dirname( $dir )) and mkdir ( $dir , 0777));
先判斷目標(biāo)目錄是否存在,若存在,依or的短路特性,后面的整體被短路,跳過(guò)執(zhí)行;若目標(biāo)目錄不存在,則執(zhí)行后面的函數(shù)體:
Directory(dirname( $dir )) and mkdir ( $dir , 0777)
我考慮了一下先進(jìn)行遞歸的用意:先執(zhí)行遞歸,意在確認(rèn)其父目錄(dirname($dir))都已經(jīng)創(chuàng)建完畢,使后面的mkdir()函數(shù)不會(huì)創(chuàng)建子目錄時(shí)找不到父目錄發(fā)出警告。
進(jìn)入遞歸深處后,確認(rèn)最深處的根目錄存在后,從根目錄向下依次創(chuàng)建目錄。
最后,建議要找工作的親們,去網(wǎng)上找些大公司面試題做一下,畢竟他們考得較為綜合較深,在學(xué)習(xí)知識(shí)的時(shí)候,也刷一下題,另外也一定要做一下,因?yàn)楹苋菀籽鄹呤值?,一開(kāi)始的函數(shù),我優(yōu)化了好幾遍才能正常使用。
這就是一道PHP遞歸創(chuàng)建多級(jí)目錄面試題目,以后小編會(huì)再找些有意思的面試題跟大家分享。
- PHP創(chuàng)建多級(jí)目錄的兩種方法
- php創(chuàng)建多級(jí)目錄的方法
- PHP使用mkdir創(chuàng)建多級(jí)目錄的方法
- php創(chuàng)建多級(jí)目錄完整封裝類(lèi)操作方法
- php刪除一個(gè)路徑下的所有文件夾和文件的方法
- PHP刪除目錄及目錄下所有文件的方法詳解
- PHP 刪除文件與文件夾操作 unlink()與rmdir()這兩個(gè)函數(shù)的使用
- PHP創(chuàng)建/刪除/復(fù)制文件夾、文件
- PHP刪除指定目錄中的所有目錄及文件的方法
- php刪除文件夾及其文件夾下所有文件的函數(shù)代碼
- php創(chuàng)建多級(jí)目錄與級(jí)聯(lián)刪除文件的方法示例
相關(guān)文章
PHP+MySQL高并發(fā)加鎖事務(wù)處理問(wèn)題解決方法
這篇文章主要介紹了PHP+MySQL高并發(fā)加鎖事務(wù)處理問(wèn)題解決方法,結(jié)合實(shí)例形式分析了PHP+MySQL事務(wù)處理相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-04-04PHP SPL標(biāo)準(zhǔn)庫(kù)中的常用函數(shù)介紹
這篇文章主要介紹了PHP SPL標(biāo)準(zhǔn)庫(kù)中的常用函數(shù)介紹,本文著重講解了spl_autoload_extensions()、spl_autoload_register()、spl_autoload()三個(gè)函數(shù),需要的朋友可以參考下2015-05-05PHP開(kāi)發(fā)的微信現(xiàn)金紅包功能示例
這篇文章主要介紹了PHP開(kāi)發(fā)的微信現(xiàn)金紅包功能,結(jié)合實(shí)例形式較為詳細(xì)的分析了php使用微信接口實(shí)現(xiàn)現(xiàn)金紅包功能的相關(guān)步驟與操作技巧,需要的朋友可以參考下2017-06-06PHP實(shí)現(xiàn)根據(jù)銀行卡號(hào)判斷銀行
公司業(yè)務(wù)需要用到根據(jù)銀行卡號(hào)查詢銀行卡的相關(guān)信息,如歸屬地,歸屬銀行,卡的種類(lèi)等,仔細(xì)研究了一番,分享給大家2015-04-04PHP+MySQL存儲(chǔ)數(shù)據(jù)常見(jiàn)中文亂碼問(wèn)題小結(jié)
這篇文章主要介紹了PHP+MySQL存儲(chǔ)數(shù)據(jù)常見(jiàn)中文亂碼問(wèn)題,針對(duì)php+mysql常見(jiàn)的中文亂碼問(wèn)題予以總結(jié)分析,并給出了解決方法供大家參考,需要的朋友可以參考下2016-06-06php.ini中date.timezone設(shè)置分析
date.timezone設(shè)置php5默認(rèn)date.timezone為utc,改為date.timezone = PRC即可解決時(shí)間相差八小時(shí)的問(wèn)題,但我在php的官方文檔中看了半天也沒(méi)找到這個(gè)參數(shù)啊2011-07-07PHP下通過(guò)file_get_contents的代理使用方法
2011-02-02