【问题标题】:PHP mkdir() Function - If Folder Exists [duplicate]PHP mkdir()函数 - 如果文件夹存在[重复]
【发布时间】:2012-07-12 15:10:32
【问题描述】:

可能重复:
PHP uploading script - create folder automatically

我有一个基于表单创建文件夹的 PHP 脚本。我想知道如果它已经存在,是否有办法不创建和替换该文件夹?

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

【问题讨论】:

  • 你到底想达到什么目的?你的程序是做什么的?
  • 程序根据来自表单的输入创建一个文件夹,然后将一个模板文件夹复制到新文件夹中。我想知道是否还有一种方法可以告诉脚本该文件夹是否已经存在;不要复制任何东西?这是一个内部项目,访问网页需要密码。

标签: php forms


【解决方案1】:

你可以使用is_dir:

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

【讨论】:

    【解决方案2】:

    一般:

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

    特别是:非常小心在执行涉及用户输入的文件系统(或任何其他类型的敏感)操作时!当前示例(创建目录)并没有留下太多开放的攻击面,但验证输入永远不会受到伤害。

    【讨论】:

      【解决方案3】:

      使用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));
          }
      }
      

      注意不受控制的输入,很危险!

      【讨论】:

        【解决方案4】:

        你可以试试:

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

        【讨论】:

        • 这似乎奏效了。有没有办法复制文件夹?如果文件夹已经存在,那么不要复制任何东西?
        • 是的,这应该可以工作:&lt;?php if (!is_dir($dest_dir)) shell_exec("cp -r $src_dir $dest_dir"); ?&gt;。如果 shell_exec() 函数有问题,请将其替换为受 this 主题启发的其他复制函数。
        【解决方案5】:

        【讨论】:

          【解决方案6】:

          使用 PHP 的 is_dir 函数检查是否已经存在目录,只有在没有目录时才调用 mkdir 函数。

          【讨论】:

            【解决方案7】:

            在使用 POST 变量创建目录之前,在这里做一些验证规则(正则表达式)!

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

            【讨论】:

            • file_exists 不区分文件和目录,因此具有您要查找的名称的文件将产生假真。 is_dir 检查它是否存在以及它是否是一个目录
            • @hellsgate:在这种情况下,哪种方法更好。如果存在同名的文件或命名套接字,则无法创建目录。所以is_dir 听起来像是更准确的方法,但可能会导致误报和其他错误。纯属虚构。但是应该为现有文件和目录调用后备代码。
            • @mario:好点子。对于这种情况,由于您列出的原因,我现在意识到 file_exists 是更好的选择。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-03-03
            • 2013-09-08
            • 1970-01-01
            • 2013-06-24
            • 1970-01-01
            • 2018-08-12
            • 2016-10-15
            相关资源
            最近更新 更多