PHP如何建立文件夾(mkdir的用法,mkdirs的語法)【轉】

(PHPmkdir如何建立多級目錄)php

   在開始以前,我先說明一下,可能許多朋友與我同樣認爲只要給一個路徑,mkdir就能夠建立文件夾,其它不是那樣,單個的MKDIR只能建立一級目錄,對於多級的就不行了,那如何用mkdir來建立呢?先我抄一段手冊上的有關mkdir的描述,以下:安全

說明函數

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

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

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

 

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

 
默認的 mode 是 0777,意味着最大可能的訪問權。有關 mode 的更多信息請閱讀 chmod() 頁面。get

例 1. mkdir() 例子string

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

若是成功則返回 TRUE,失敗則返回 FALSE。io

注意: 自 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很巧妙的來建立

原文連接:https://blog.csdn.net/fc_lamp/article/details/6474340#commentBox

相關文章
相關標籤/搜索