1. 程式人生 > >php mkdir與mkdirs 對目錄的操作

php mkdir與mkdirs 對目錄的操作

開始時我認為,只要給一個路徑,mkdir就可以建立資料夾,但是事實並不是那樣,單個的mkdir只能建立一級目錄,對於多級的就不行了。

那如何用mkdir來建立呢?先我抄一段手冊上的有關mkdir的描述,如下:

bool mkdir ( string pathname [, int mode [, bool recursive [, resource context]]] )


嘗試新建一個由 pathname 指定的目錄。

注意也許想用八進位制數指定模式,也就是說該數應以零打頭。模式也會被當前的 umask 修改,可以用 umask() 來改變。


注意: mode 在 Windows 下被忽略。自 PHP 4.2.0 起成為可選項。

預設的 mode 是 0777,意味著最大可能的訪問權。有關 mode 的更多資訊請閱讀 chmod() 頁面。 例 1. mkdir() 例子

<?php
mkdir("/path/to/my/dir", 0700);
?>


如果成功則返回 TRUE,失敗則返回 FALSE。

注意: 自 PHP 5.0.0 rmdir() 也可用於某些 URL 封裝協議。參見附錄 N 的列表看看 rmdir() 支援哪些 URL 封裝協議。 
注意: 對 context 的支援是 PHP 5.0.0 新增的。有關 context 的說明見參考 CLX, Stream Functions。
注意: recursive 引數是 PHP 5.0.0 新增的。 
注意: 當安全模式被啟用時,PHP 將檢查被操作的目錄是否和正在執行的指令碼有相同的 UID(所有者)。

以上是PHP5手冊上的描述資訊,即你可以這樣:mkdir('./test',0777)就能建立一個檔案夾了。但是如何遞迴建立多級目錄呢?

其方式有:

1. 使用PHP5新增方法

PHP5 下建立目錄函式 mkdir 增加了一個新的引數 recursive ,通過設定 recursive 為 true 可以實現遞迴建立目錄的目的,但是對PHP4就不行了。

2.自己寫一個遞迴建立多級目錄。

這裡,我對第二種方式作一點說明,也有兩種方式,如下:

第一種(用mkdirs來產生多級父級)

複製程式碼
function mkdirs($dir, $mode = 0777)

{

if (is_dir($dir
) || @mkdir($dir, $mode)) return TRUE; if (!mkdirs(dirname($dir), $mode)) return FALSE; return @mkdir($dir, $mode); }
複製程式碼

說明: 

1.首先 簡單說一下mkdir()與mkdirs()的區別,以及,is_dir和dirname():

mkdir() 只能在已經存在的目錄中建立建立資料夾(即父級必須有才行)。 
mkdirs() 可以在不存在的目錄中建立資料夾。諸如:a\\b,既可以建立多級目錄。

dirname()是返回路徑中的目錄部分。

is_dir()用於判斷給出的檔名是否是一個有效的目錄

2.大致流程為:
(1) 先用is_dir判斷是否已是一個資料夾,如果是則返回TRUE。如沒有(或者不是資料夾),則試著建立它,當然有可以父級不存在,那mkdir直接就創不成功,但也為不報錯,所以就用@來抑止報非致命錯誤。

(2)如果傳引數都不滿足條件,那麼就進入第二個if語句,先是取得路徑中的目錄部分,當然有可能是不存在的多級父級,所以用了mkdirs()來先建立父級,如果成功(不成功返回FALSE),那麼再用mkdir來建立最終的目錄了。

好了,以上就是第一種方案。

第二種

(說明:此方案是相當的精簡,那是相當的不錯的方案,推薦使用它)

function create_folders($dir){ 
return is_dir($dir) or (create_folders(dirname($dir)) and mkdir($dir, 0777)); 
}

說明:

大致流程: 得到路徑後,先判斷是否已是一個有效的檔案目錄,如是則返回,結束程式。如果不是,(由於這裡用了OR作先擇性的條件,即只要滿足其中一個條件就行),則遞迴再呼叫自身,並且傳入的路徑中,少一級目錄。這樣來先回到上級有的父級目錄中,再用mkdir來建立下一級的。

好了,以上就是用PHP來建立資料夾(以及多級資料夾)的方法。^_^

總結: 

1.用PHP5中自帶的mkdir 中的一個新的引數 recursive ,通過設定 recursive 為 true 可以實現遞迴建立目錄的目的,但是對PHP4就不行了。

2.自己寫的方法中,用mkdirs來建立多級父級目錄方式

3.仍然可以用mkdir很巧妙的來建立多級資料夾。

相關推薦

php mkdirmkdirs 目錄操作

開始時我認為,只要給一個路徑,mkdir就可以建立資料夾,但是事實並不是那樣,單個的mkdir只能建立一級目錄,對於多級的就不行了。 那如何用mkdir來建立呢?先我抄一段手冊上的有關mkdir的描述,如下: bool mkdir ( string pathname [, int mode [, b

php 文件夾 文件目錄操作

dirname 重命名 否則 flags noescape 修改文件 情況 尋找 新建 php文件夾操作函數 string basename ( string path [, string suffix] )給出一個包含有指向一個文件的全路徑的字符串,本函數返回基本的文件名

Java的mkdir()mkdirs()引發的悲劇---關於java的mkdir()方法無法建立檔案目錄失敗問題

昨晚深夜在做專案的檔案上傳,在上傳之前要先判斷指定的檔案目錄是否存在,如果不存在就先建立改目錄。 因為之前已經做過類似的功能了,所以就把判斷檔案目錄以及建立的程式碼直接copy過來了,然而很鬱悶的是,一模一樣的程式碼,這回卻遇到一個特別奇葩的問題: 一下是昨晚我要判斷的檔案目錄:

Java的mkdir()mkdirs()引發的悲劇---關於java的mkdir()方法無法建立檔案目錄問題

昨晚深夜在做專案的檔案上傳,在上傳之前要先判斷指定的檔案目錄是否存在,如果不存在就先建立改目錄。 因為之前已經做過類似的功能了,所以就把判斷檔案目錄以及建立的程式碼直接copy過來了,然而很鬱悶的是,一模一樣的程式碼,這回卻遇到一個特別奇葩的問題: 一下是昨晚我要判斷的檔

javajavascriptcookie操作的工具類

check cells ram tco expire turn get servle request Java對cookie的操作 package cn.utils; import java.util.HashMap; import java.util.Map;

檔案和目錄操作相關的函式

獲取檔案資訊: #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> // 成功返回0,出錯返回-1 int stat(const char *path, struct stat *b

【Java】File類mkdir()mkdirs()方法的區別

在java中File --》指--》檔案+檔案目錄 建立資料夾實現程式碼 //檔案存放path String strPath = "E:\\a\\aa\\aaa.txt"; File file = new File(strPath); //檔案存放p

Java中的mkdirs()建立目錄操作

回顧Java第二週,參考網址: 在其中“Java中的目錄”這一欄裡的程式碼,在動手測試中發現執行不通過,原始碼: import java.io.File; public class CreateDir { public static void main(S

java.io.File類中mkdir()mkdirs()區別

在Java中對檔案進行操作時常常用到java.io.File.mkdir()和java.io.File.mkdirs()兩個方法來建立一個目錄(資料夾),這兩個方法非常相似,都是無引數且返回值都為boolean型別的方法,都是用於建立指定路徑名稱對應的目錄,但二者主要區別如

PHP學習】檔案程式設計——目錄操作

什麼是檔案程式設計 所謂的檔案程式設計技術,指的就是對==檔案==或==目錄==的==增刪改查操作 可參考菜鳥教程:http://www.runoob.com/php/php-ref-filesystem.html 檔案程式設計的分類 對目錄的操作 對檔案的操作 對目錄的操作

python 目錄檔案操作

1. os.remove(path) 刪除一個檔案 2. os.rmdir(path) 刪除目錄 3. os.removedirs(path) 刪除多級目錄 4. os.path.isdir(path) 判斷是否為目錄 5. os.path.i

Python:使用 os、shutil 模組檔案目錄操作

當你想批量處理檔案的時候,使用 python 對檔案或者資料夾進行操作,可以迅速地解決問題。 在 python 裡面有幾個內建模組可以對檔案進行復制、移動、重新命名及讀寫等操作。以下是對 os、shut

前端學PHP之面向象系列第五篇——操作

fas get toolbar 影響 運算 描述 ssa reference 保持 對象克隆   對象復制,又叫對象克隆,可以通過 clone 關鍵字來完成   在多數情況下,我們並不需要完全復制一個對象來獲得其中屬性。但有一個情況下確實需要:如果你有一個窗口對象,該對象持

python2.7.13標準庫文件目錄操作文件操作

mov abs 庫文件 shell htm .com 及其 rec lose 標準庫的中文參考文檔: http://python.usyiyi.cn/translate/python_278/library/index.html 官方標準庫文檔:https://docs.p

PHP-文件目錄操作

style ext closed 檢查 路徑 font strong dir() 句柄   使用遞歸遍歷指定文件目錄及其子目錄下的所有文件   思路:      1.打開目錄;      2.遍歷目錄,判斷是否還是目錄。是目錄則返回第1步,不是目錄進入第三步;     

PHP基礎JS操作的區別

整型 多個 time isn 字符串拼接 ech 函數 操作 bool   嵌入頁面方式   JS嵌入方式:<script></script>   PHP嵌入方式:<?php           ?>(常用)   輸出語法 Javascr

PHP面試題之文件目錄操作

als brush 文件名 func ram class png 後綴 extension 獲取文件後綴,遍歷目錄層次 /** * 5種方式獲取文件後綴名 * 這道題其實就是考函數substr() strrchr() array_pop() strrpos() str

JS基礎--函數BOM、DOM操作、JS中的事件以及內置

對話框 回車 == 問題 tde tle ets fixed 訪問 前 言 絮叨絮叨 這裏是JS基礎知識集中講解的第三篇,也是最後一篇,三篇JS的基礎,大多是知識的羅列,並沒有涉及更難得東西,幹貨滿滿!看完這一篇後,相信許多正在像我一樣正處於初

第六課 系統目錄操作命令(cd mkdir rmdir rm)

cd mkdir rm上一次我們學習了linux目錄的介紹,以及查看命令ls及alias,那麽我們如何學習對這些目錄進行操作,具體如下:cd mkdir rmdir rm.1、首先先講兩個概念:每個文件或目錄都有自己的路徑,那什麽是相對路徑和絕對路徑:相對路徑:從當前目錄開始的路徑

Python3.x:os.mkdir os.makedirs(創建目錄方法)區別

align 存在 多級 enter 一級目錄 ext error ont err Python3.x:os.mkdir與 os.makedirs區別 1,os.mkdir mkdir( path [,mode] ) 說明: 創建一個目錄,可以是相對或者絕對路徑,mode