使用php的MKDIR 3级以上

使用php的MKDIR 3级以上,php,Php,级别1的名称未知;是用户指定的&可以是任何内容。level2和level3的名称是已知的,将保持不变。 当前工作目录包含mkdir.php文件,该文件是在level1中使用用户提供的名称创建目录所必需的。 下面的mkdir.php文件完成了这项工作,但不知道它是否正确。希望得到专家的认可和建议。提前谢谢 level1/level2/level3/CWD/mkdir.php 为什么使用\而不是/ 您使用的变量太多,可以将路径写入目录,在其中使用一行创建新目录 $\u POST['Name']

级别1的名称未知;是用户指定的&可以是任何内容。level2和level3的名称是已知的,将保持不变。 当前工作目录包含mkdir.php文件,该文件是在level1中使用用户提供的名称创建目录所必需的。 下面的mkdir.php文件完成了这项工作,但不知道它是否正确。希望得到专家的认可和建议。提前谢谢

level1/level2/level3/CWD/mkdir.php

  • 为什么使用\而不是/
  • 您使用的变量太多,可以将路径写入目录,在其中使用一行创建新目录
  • $\u POST['Name']应该被清理,因为它可以包含../在其中,所以它将使目录位于错误的目录中
  • 更短、更干净的解决方案:

    <?php
        if (isset($_POST['Name']))
        {   
        $newdir = $_POST['Name'];
        $dirname = "..\\$newdir";   
    
        $step1 = "..\\CWD";     
        $step2 = "..\\$step1";      
        $step3 = "..\\$step2\\$dirname";    
    
        if (mkdir($step3, 0777, true))
            {
            echo "dir created successfully";
            }
            else
            {
            echo  "dir not created";
            }
        }
    ?>
    
  • 为什么使用\而不是/
  • 您使用的变量太多,可以将路径写入目录,在其中使用一行创建新目录
  • $\u POST['Name']应该被清理,因为它可以包含../在其中,所以它将使目录位于错误的目录中
  • 更短、更干净的解决方案:

    <?php
        if (isset($_POST['Name']))
        {   
        $newdir = $_POST['Name'];
        $dirname = "..\\$newdir";   
    
        $step1 = "..\\CWD";     
        $step2 = "..\\$step1";      
        $step3 = "..\\$step2\\$dirname";    
    
        if (mkdir($step3, 0777, true))
            {
            echo "dir created successfully";
            }
            else
            {
            echo  "dir not created";
            }
        }
    ?>
    

    如果您正在运行
    mkdir.php
    ,则可以连续使用
    dirname()
    ,直到达到
    level1

    此外,清理输入数据以防止恶意用户在系统上创建“恶意”目录也很重要

    if(isset($_POST['Name'])) {
    
        $new_dir_name = $_POST['Name'];
    
        // it should work on linux and windows
        $new_dir_path = '../../../../'; # '/' should be at the end!!!
    
        //use this if one above doesn't work on windows
        //$new_dir_path = '..\\..\\..\\..\\'; 
    
        if(mkdir($new_dir_path.$new_dir_name, 0777, true)) {
            echo "dir created successfully";
        }
        else {
            echo  "dir not created";
        }
    }
    

    如果您正在运行
    mkdir.php
    ,则可以连续使用
    dirname()
    ,直到达到
    level1

    此外,清理输入数据以防止恶意用户在系统上创建“恶意”目录也很重要

    if(isset($_POST['Name'])) {
    
        $new_dir_name = $_POST['Name'];
    
        // it should work on linux and windows
        $new_dir_path = '../../../../'; # '/' should be at the end!!!
    
        //use this if one above doesn't work on windows
        //$new_dir_path = '..\\..\\..\\..\\'; 
    
        if(mkdir($new_dir_path.$new_dir_name, 0777, true)) {
            echo "dir created successfully";
        }
        else {
            echo  "dir not created";
        }
    }
    

    测试你的代码。在xammp中,即在htdocs中,在级别1之上创建一个级别的目录。删除最后一个..\\n将在级别1中创建。如果指定了CWD,是否需要结束“/”。例如,
    。/../CWD
    ?/是必需的,因为$new\u dir\u path.$new\u dir\u name。否则它将在一个级别下创建dir,dir将是level2$\u POST['Name'],这正是以前发生的事情,我不明白为什么会发生这种情况。谢谢你的澄清。测试了你的代码。在xammp中,即在htdocs中,在级别1之上创建一个级别的目录。删除最后一个..\\n将在级别1中创建。如果指定了CWD,是否需要结束“/”。例如,
    。/../CWD
    ?/是必需的,因为$new\u dir\u path.$new\u dir\u name。否则它将在一个级别下创建dir,dir将是level2$\u POST['Name'],这正是以前发生的事情,我不明白为什么会发生这种情况。感谢您的澄清。级别1的dirname未知。它是一个域名,可以是任何东西,例如sample.com、example.com等。但是,感谢提供卫生代码,但给出了
    unknown“。。。在线…
    。我需要更改或添加一些内容吗?@CodeCruncher我的代码没有假定任何关于级别1的名称,因此这应该可以工作。由于卫生代码导致的错误怎么办?是不是因为缺少一个
    ?@CodeCruncher是的,我很抱歉,它是在我脑子里编译的:)我还需要修改代码吗?现在,它给出了一些
    长名称required
    之类的错误。感谢您的及时帮助。级别1的目录名未知。它是一个域名,可以是任何东西,例如sample.com、example.com等。但是,感谢提供卫生代码,但给出了
    unknown“。。。在线…
    。我需要更改或添加一些内容吗?@CodeCruncher我的代码没有假定任何关于级别1的名称,因此这应该可以工作。由于卫生代码导致的错误怎么办?是不是因为缺少一个
    ?@CodeCruncher是的,我很抱歉,它是在我脑子里编译的:)我还需要修改代码吗?现在,它给出了一些
    长名称required
    之类的错误。谢谢你的及时帮助。