程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP遞歸創建目錄(偽原創)

PHP遞歸創建目錄(偽原創)

編輯:關於PHP編程

有時候需要遞歸創建目錄函數,這時需要使用dirname()函數(取得路徑中的目錄部分)和mkdir()函數(創建目錄)。

先普及一下語法:

dirname

(PHP 4, PHP 5)

dirname — 返回路徑中的目錄部分

說明 ?

string dirname ( string $path )

給出一個包含有指向一個文件的全路徑的字符串,本函數返回去掉文件名後的目錄名。

參數 ?

path

一個路徑。

在 Windows 中,斜線(/)和反斜線(\)都可以用作目錄分隔符。在其它環境下是斜線(/)。

返回值 ?

返回 path 的父目錄。 如果在 path 中沒有斜線,則返回一個點('.'),表示當前目錄。否則返回的是把 path 中結尾的 /component(最後一個斜線以及後面部分)去掉之後的字符串。

更新日志 ?

版本 說明 5.0.0 dirname() 的操作從 PHP 5.0.0 版開始是二進制安全的。 4.0.3 在這個版本中,dirname() 被修正為 POSIX 兼容。

范例 ?

Example #1 dirname() 例子

echo "1) " . dirname("/etc/passwd") . PHP_EOL; // 1) /etc
echo "2) " . dirname("/etc/") . PHP_EOL; // 2) / (or \ on Windows)
echo "3) " . dirname("."); // 3) .
?>

注釋 ?

Note:

dirname() operates naively on the input string, and is not aware of the actual filesystem, or path components such as "..".

Note:

dirname() is locale aware, so for it to see the correct directory name with multibyte character paths, the matching locale must be set using the setlocale() function.

Note:

Since PHP 4.3.0, you will often get a slash or a dot back from dirname() in situations where the older functionality would have given you the empty string.

檢查下面發生變化的例子:


// PHP 4.3.0 以前
dirname('c:/'); // 返回 '.'

// PHP 4.3.0 以後
dirname('c:/x'); // 返回 'c:'
dirname('c:/Temp/x'); // 返回 'c:/Temp'
dirname('/x'); // 返回 '/' (or '\' on Windows)

?>

參見 ?

  • basename() - 返回路徑中的文件名部分
  • pathinfo() - 返回文件路徑的信息
  • realpath() - 返回規范化的絕對路徑名


    mkdir

    (PHP 4, PHP 5)

    mkdir — 新建目錄

    說明 ?

    bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource$context ]]] )

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

    參數 ?

    pathname

    目錄的路徑。

    mode

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

    Note:

    mode 在 Windows 下被忽略。

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

    recursive

    Allows the creation of nested directories specified in the pathname.

    context

    Note: 在 PHP 5.0.0 中增加了對上下文(Context)的支持。有關上下文(Context)的說明參見 Streams。

    返回值 ?

    成功時返回 TRUE, 或者在失敗時返回 FALSE

    更新日志 ?

    版本 說明 5.0.0 添加 recursive 參數。 5.0.0 mkdir() 也可用於某些 URL 封裝協議。參見支持的協議和封裝協議 的列表看看 mkdir() 支持哪些 URL 封裝協議。 4.2.0 mode 成為可選項。

    范例 ?

    Example #1 mkdir() 例子

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

    Example #2 通過 recursive 參數使用 mkdir()

    // Desired folder structure
    $structure = './depth1/depth2/depth3/';

    // To create the nested structure, the $recursive parameter
    // to mkdir() must be specified.

    if (!mkdir($structure, 0, true)) {
    die('Failed to create folders...');
    }

    // ...
    ?>

    注釋 ?

    Note: 當啟用 安全模式時, PHP 會在執行腳本時檢查被腳本操作的目錄是否與被執行的腳本有相同的 UID(所有者)。

    參見 ?

    • is_dir() - 判斷給定文件名是否是一個目錄
    • rmdir() - 刪除目錄

      遞歸創建目錄函數:

      /**
      	 * Create the directory recursively.
      	 * @param $path The directory to create, such as, /a/b/c/d/e/
      	 * @param $mode The mode of the directory to create, such as, 0755, 0777.
      	 */
      	function RecursiveMkdir($path,$mode) {
      		
      		if (!file_exists($path)) { // The file is not exist.
      			RecursiveMkdir(dirname($path), $mode); // Call itself.
      			if(mkdir($path, $mode)) { // Call mkdir() to create the last directory, and the result is true.
      				return true; 
      			} else { // Call mkdir() to create the last directory, and the result is false.
      				return false;
      		   }
             } else { // The file is already exist.
      		   return true;
      	   }
         }



      參考資料:

      點擊打開鏈接點擊打開鏈接
      點擊打開鏈接

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