2012-07-12 52 views
6

可能重複:
PHP uploading script - create folder automaticallyPHP的mkdir()函數 - 如果文件夾存在

我有一個PHP腳本,創建基於窗體上的文件夾中。我想知道是否有辦法創建並替換該文件夾,如果它已經存在?

<?php 
mkdir("QuickLinks/$_POST[contractno]"); 
?> 
+0

你想達到什麼目的?你的程序做什麼? – 2012-07-12 15:27:18

+0

程序根據表單的輸入創建一個文件夾,然後將模板文件夾複製到新文件夾中。我想知道是否也有辦法告訴腳本,如果該文件夾已經存在;不要複製任何東西?它是一個內部項目,需要密碼才能訪問該網頁。 – ItsJoeTurner 2012-07-12 15:29:54

回答

15

您可以使用is_dir

<?php 
$path = "QuickLinks/$_POST[contractno]"; 
if(!is_dir($path)){ 
    mkdir($path); 
} 
?> 
2

一般:

$dirname = "whatever"; 
if (!is_dir($dirname)) { 
    mkdir($dirname); 
} 

特別是:在執行涉及用戶輸入的文件系統(或任何其他類型的敏感)操作時,必須非常小心!目前的例子(創建一個目錄)並沒有留下大量的開放式攻擊面,但驗證輸入永遠不會受到傷害。

1

使用PHP的is_dir函數檢查是否已經存在一個目錄,並且只有在沒有目錄時才調用mkdir函數。

2

你可以試試:

<?php 
    if (!is_dir("QuickLinks/$_POST[contractno]")) 
     mkdir("QuickLinks/$_POST[contractno]"); 
?> 
+0

這似乎奏效了。有沒有辦法做到這一點複製文件夾?如果該文件夾已經存在,那麼不要複製任何東西? – ItsJoeTurner 2012-07-12 15:28:23

+0

是的,這應該工作:'<?php if(!is_dir($ dest_dir))shell_exec(「cp -r $ src_dir $ dest_dir」); ?>'。如果shell_exec()函數存在問題,請將其替換爲其他從[this]啓發的其他複製函數(http://stackoverflow.com/questions/2050859/copy-entire-contents-of-a-directory-to-another -using-php)主題。 – 2012-07-12 15:37:04

0

做一些驗證規則(正則表達式)這裏使用POST變量來創建目錄之前!

if(!file_exists("QuickLinks/$_POST[contractno]")) 
    mkdir("QuickLinks/$_POST[contractno]"); 
+0

file_exists不區分文件和目錄,因此具有您正在查找的名稱的文件將產生錯誤的真值。 is_dir檢查它是否存在以及它是否爲目錄 – hellsgate 2012-07-12 15:14:34

+1

@hellsgate:在這種情況下哪種方法更好。如果存在同名的文件或命名套接字,則不能創建該目錄。因此,'is_dir'聽起來更加確切,但可能會導致錯誤的否定和更多的錯誤。純屬虛構。但是應該爲現有文件*和*目錄調用回退代碼。 – mario 2012-07-12 15:19:21

+0

@mario:好點。對於這種情況,我現在認識到filelist是更好的選擇,因爲你列出的原因。 – hellsgate 2012-07-12 15:24:27

2

使用is_dir檢查文件夾是否存在

$dir = "/my/path/to/dir"; 
if (!is_dir($dir)) { 
    if (false === @mkdir($dir, 0777, true)) { 
     throw new \RuntimeException(sprintf('Unable to create the %s directory', $dir)); 
    } 
} 

關注不受控制的輸入,這是非常危險的!