程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php mkdir與mkdirs 對目錄的操作

php mkdir與mkdirs 對目錄的操作

編輯:關於PHP編程

PHP中使用mkdir創建多級目錄的方法

2012-09-09 17:50:58| 分類: 默認分類

function mkdirs($dir)
{
if(!is_dir($dir))
{
if(!$this->mkdirs(dirname($dir))){
return false;
}
if(!mkdir($dir,0777)){
return false;
}
}
chmod($dir, 777); //給目錄操作權限
return true;
}

開始時我認為,只要給一個路徑,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() 例子

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很巧妙的來創建多級文件夾。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved