PHP Conference Japan 2024

mkdir

(PHP 4, PHP 5, PHP 7, PHP 8)

mkdir建立目錄

描述

mkdir(
    字串 $directory,
    整數 $permissions = 0777,
    布林值 $recursive = false,
    ?資源 $context = null
):布林值

嘗試建立由 directory 指定的目錄。

參數

directory

目錄路徑。

提示

如果已啟用 fopen 封裝器,則可以使用 URL 作為此函式中的檔名。請參閱 fopen() 以取得有關如何指定檔名的詳細資訊。請參閱 支援的協定與封裝器,以取得有關各種封裝器所具備的功能、其使用方式的注意事項,以及它們可能提供的任何預定義變數的資訊連結。

permissions

預設權限為 0777,表示最廣泛的存取權限。如需權限的詳細資訊,請閱讀 chmod() 頁面上的詳細資訊。

注意:

在 Windows 上會忽略 permissions

請注意,您可能想要將 permissions 指定為八進位數,這表示它應該以零開頭。permissions 也會受到目前 umask 的修改,您可以使用 umask() 來變更它。

recursive

如果為 true,則也會建立指定 directory 的任何父目錄,且具有相同的權限。

context

上下文串流 資源

傳回值

成功時傳回 true,失敗時傳回 false

注意:

如果要建立的目錄已存在,則會視為錯誤,且仍會傳回 false。在使用嘗試建立之前,請使用 is_dir()file_exists() 檢查目錄是否已存在。

錯誤/例外

如果目錄已存在,則會發出 E_WARNING 層級的錯誤。

如果相關權限阻止建立目錄,則會發出 E_WARNING 層級的錯誤。

範例

範例 1:mkdir() 範例

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

範例 2:使用 recursive 參數的 mkdir()

<?php
// 想要的目錄結構
$structure = './depth1/depth2/depth3/';

// 若要建立巢狀結構,必須指定 mkdir() 的 $recursive 參數。

if (!mkdir($structure, 0777, true)) {
die(
'建立目錄失敗...');
}

// ...
?>

參見

新增註解

使用者貢獻的註解 5 則註解

35
jack dot sleight at gmail dot com
14 年前
在使用遞迴參數時,請記住,如果您在 mkdir() 之後使用 chmod() 來設定模式,而該模式未被 uchar() 的值修改,則您需要在所有建立的目錄上呼叫 chmod()。例如:

<?php
mkdir
('/test1/test2', 0777, true);
chmod('/test1/test2', 0777);
?>

可能會導致 "/test1/test2" 的模式為 0777,但 "/test1" 仍然具有來自 mkdir() 呼叫的 0755 模式。您需要執行:

<?php
mkdir
('/test1/test2', 0777, true);
chmod('/test1', 0777);
chmod('/test1/test2', 0777);
?>
19
aulbach at unter dot franken dot de
25 年前
這是來自 Stig Bakken 的註解

您的目錄模式會受到您目前 umask 的影響。它將
會具有(<mkdir-mode> 和(not <umask>))。如果您想建立一個
公開可讀取的,請執行以下操作:

<?php
$oldumask
= umask(0);
mkdir('mydir', 0777); // 甚至 01777,以便設定黏著位元
umask($oldumask);
?>
6
Protik Mukherjee
19 年前
適用於 Fedora 3 的 mkdir、檔案讀寫、權限相關注意事項////
如果您正在使用 Fedora 3 且遇到權限問題,最好檢查您的系統是否已啟用 SElinux。它新增了一層額外的安全性,因此即使 PHP 具有 777 權限,也無法寫入資料夾。我花了將近一週的時間來處理這個問題!

如果您不確定,請在 Google 上搜尋 SElinux 或「停用 SELinux」,這可能是解決方案!祝您好運!
3
julius - grantzau - c-o-m
13 年前
請記住使用 clearstatcache()

...在使用檔案系統函式時。

否則,舉例來說,您可能會在刪除資料夾(使用 rmdir)後立即建立資料夾(使用 mkdir)時發生錯誤。
-1
chelidze dot givia at gmail dot com
1 年前
使用 mkdir() 建立檔案時,預設根目錄將會是 DocumentRoot(在 XAMPP 中)本身。

C:\xampp\htdocs\project/includes/something.php

如果在 something.php 中使用 mkdir("myfile"),php 不會在 includes 資料夾中建立資料夾,而是在專案資料夾中建立。
To Top