1. 程式人生 > 程式設計 >PHP mkdir建立資料夾實現方法解析

PHP mkdir建立資料夾實現方法解析

在開始之前,我先說明一下,可能許多朋友與我一樣認為只要給一個路徑,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。

例 2. mkdir() 例子

$dir = iconv("UTF-8","GBK","public/log");
if (!file_exists($dir)){
	mkdir ($dir,0777,true);
	echo '建立資料夾log成功';
} else {
	echo '需建立的資料夾log已經存在';
}

iconv方法是為了防止中文亂碼,保證可以建立識別中文目錄,不用iconv方法格式的話,將無法建立中文目錄

mkdir方法的第一個引數是要建立的目錄路徑,第二個引數是指建立目錄的許可權,在windows系統下該引數會被忽略,第三個引數是指是否建立多級目錄,預設為false
參考連結:https://www.cnblogs.com/modou/p/5991365.html

注意: 自 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 下建立目錄函式 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));
}

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

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

總結:

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

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

3 仍然用mkdir很巧妙的來建立

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。