可能重複:
PHP uploading script - create folder automaticallyPHP的mkdir()函數 - 如果文件夾存在
我有一個PHP腳本,創建基於窗體上的文件夾中。我想知道是否有辦法創建並替換該文件夾,如果它已經存在?
<?php
mkdir("QuickLinks/$_POST[contractno]");
?>
可能重複:
PHP uploading script - create folder automaticallyPHP的mkdir()函數 - 如果文件夾存在
我有一個PHP腳本,創建基於窗體上的文件夾中。我想知道是否有辦法創建並替換該文件夾,如果它已經存在?
<?php
mkdir("QuickLinks/$_POST[contractno]");
?>
您可以使用is_dir:
<?php
$path = "QuickLinks/$_POST[contractno]";
if(!is_dir($path)){
mkdir($path);
}
?>
一般:
$dirname = "whatever";
if (!is_dir($dirname)) {
mkdir($dirname);
}
特別是:在執行涉及用戶輸入的文件系統(或任何其他類型的敏感)操作時,必須非常小心!目前的例子(創建一個目錄)並沒有留下大量的開放式攻擊面,但驗證輸入永遠不會受到傷害。
使用PHP的is_dir函數檢查是否已經存在一個目錄,並且只有在沒有目錄時才調用mkdir函數。
你可以試試:
<?php
if (!is_dir("QuickLinks/$_POST[contractno]"))
mkdir("QuickLinks/$_POST[contractno]");
?>
這似乎奏效了。有沒有辦法做到這一點複製文件夾?如果該文件夾已經存在,那麼不要複製任何東西? – ItsJoeTurner 2012-07-12 15:28:23
是的,這應該工作:'<?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
做一些驗證規則(正則表達式)這裏使用POST變量來創建目錄之前!
if(!file_exists("QuickLinks/$_POST[contractno]"))
mkdir("QuickLinks/$_POST[contractno]");
file_exists不區分文件和目錄,因此具有您正在查找的名稱的文件將產生錯誤的真值。 is_dir檢查它是否存在以及它是否爲目錄 – hellsgate 2012-07-12 15:14:34
@hellsgate:在這種情況下哪種方法更好。如果存在同名的文件或命名套接字,則不能創建該目錄。因此,'is_dir'聽起來更加確切,但可能會導致錯誤的否定和更多的錯誤。純屬虛構。但是應該爲現有文件*和*目錄調用回退代碼。 – mario 2012-07-12 15:19:21
@mario:好點。對於這種情況,我現在認識到filelist是更好的選擇,因爲你列出的原因。 – hellsgate 2012-07-12 15:24:27
使用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));
}
}
關注不受控制的輸入,這是非常危險的!
你想達到什麼目的?你的程序做什麼? – 2012-07-12 15:27:18
程序根據表單的輸入創建一個文件夾,然後將模板文件夾複製到新文件夾中。我想知道是否也有辦法告訴腳本,如果該文件夾已經存在;不要複製任何東西?它是一個內部項目,需要密碼才能訪問該網頁。 – ItsJoeTurner 2012-07-12 15:29:54