我正在编写一段代码,用于上传.zip文件,获取.zip文件的内容并删除.zip本身。它还根据您自己的输入更改目录的名称,这是必需的。这是表单:
<form action ="" method="post" enctype="multipart/form-data">
<div>
<p><input type="text" name="NewName" placeholder="Enter New Name" required/></p>
<p><input type="file" name="zip" required/></p>
<p><input type="submit" value="upload" /></p>
</div>
</form>
这是我用来重写目录的php,默认命名为"NewMap"
if($_POST['NewName']){
$NewNameStr = $_POST['NewName'];
$NewNameTrim=preg_replace('/'s+/', '', $NewNameStr);
rename("uploads/NewMap/", "uploads/" . $NewNameTrim);
mkdir("uploads/NewMap/");
}
正如你所看到的,在我重命名它之后,我再次创建了目录以供将来使用。
我的问题如下:有可能用户将使用一个已经存在的名称,当这种情况发生时,它不会重命名任何东西,并且映射结构变得混乱。我如何检查名称是否已经存在$_POST['NewName'];再加上一个数字?如果user1将目录命名为onions user2也将目录命名为onions user2的目录命名为onions1
试试这样:
$dirName = YOUR_PATH;
$directoryExists = false;
$i = 1;
$tempName = $dirName;
do{
if(file_exists($tempName)){
$tempName = $dirName.$i;
$i++;
}else{
$directoryExists = true;
$dirName = $tempName;
}
}while(!$directoryExists);
或者您可以在每个文件夹名称后添加日期时间(例如2016082916001234)
我强烈建议您不要允许这种情况发生。我指出,使用用户的id,或任何唯一标识符,并在他的所有文件夹中连接。也就是说,如果他想创建一个名为potato的文件夹,那么实际名称应该是:Potatouser