【问题标题】:Transfer files to new directories将文件传输到新目录
【发布时间】:2020-05-04 08:00:12
【问题描述】:

我只需要一个简单的代码来将文件传输到具有变量名的新目录。

比如这里是我的一段代码,很简单,见附件

如您所见,这是一个注册页面,当创建用户时,会创建一个令牌,并使用用户名创建一个文件夹,在这种情况下,用户名是一个变量,最后,它创建了文件夹并最终发送通过 php mailer 发送的确认邮件。

我希望在用户注册后创建我前面提到的文件夹后,它需要自动将位于 temp/accounts/profile 中的所有文件 (.) 复制到创建的新目录中,例如:

临时/帐户/个人资料/新用户

我尝试这样做,但由于新目录依赖于用户名输入,因此它是一个变量,我不确定如何构建此查询以在用户注册后成功传输文件。

【问题讨论】:

    标签: php variables directory file-transfer user-registration


    【解决方案1】:

    从一个目录循环内容并将它们复制到新目录。

    $targetDir = 'temp/accounts/profile/newuser';
    //of course create this folder first if it doesn't exist
    mkdir($targetDir);
    
    // Scan the directory and retrieve all files
    // `array_diff` is to clean out directory thingies than can persist
    foreach(array_diff(scandir($dirname), ['.','..']) as $val){
    
       copy("$dirname/$val", "$targetDir/$val");
    
    }
    

    【讨论】:

    • 我测试了你的代码,(newuser) 是指基于 $name 变量注册的新用户名,你提供的代码是创建一个名为“newuser”的新目录,这是意外的,如前所述我可以使用以下方法成功创建目录: $dirname = "temp/accounts/profile/".$name; mkdir($目录名);但是,一旦创建了新目录,我们就无法将“temp/accounts/profile”中的所有文件转移到创建的新目录中。同样,该目录是使用“用户名”创建的,但该文件夹是空的。跨度>
    • 如果是linux类型的机器,你有权限移动文件吗? scandir($dirname) 返回什么?
    【解决方案2】:

    您需要找到所有文件并将它们一一复制。如果您需要复制目录,则必须实现递归复制,在这种情况下,您可以在循环中使用is_dir 来检查文件名是否为目录。

    <?php
    $source = 'temp/accounts/profile/newuser';
    $destination = 'temp/accounts/profile/' . $name;
    $files = glob($source . "/*.*"); //Find all files
    foreach($files as $filename){
        copy($filename, $destination . "/" . basename($filename));
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 2021-11-20
      • 1970-01-01
      • 2021-12-31
      • 2020-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 2022-01-15
      相关资源
      最近更新 更多