Php 根据用户名在目录中创建子文件夹,然后在创建的子文件夹中插入CSV文件

Php 根据用户名在目录中创建子文件夹,然后在创建的子文件夹中插入CSV文件,php,csv,subdirectory,fputcsv,Php,Csv,Subdirectory,Fputcsv,我让php在用户注册用户名和密码时工作,它将用户名和密码插入users.txt文件。我还使用它在general users文件夹中创建了一个子文件夹,其中包含该用户名。我想让它做的是创建一个books.csv文件,并将其放入刚刚在用户名后创建的子文件夹中 这是我迄今为止尝试过的,但它不起作用: <?php // Identify the directory and file to use: $dir = 'C:/xampp/htdocs/users/'; $file = $dir .

我让php在用户注册用户名和密码时工作,它将用户名和密码插入users.txt文件。我还使用它在general users文件夹中创建了一个子文件夹,其中包含该用户名。我想让它做的是创建一个books.csv文件,并将其放入刚刚在用户名后创建的子文件夹中

这是我迄今为止尝试过的,但它不起作用:

<?php 

// Identify the directory and file to use:
$dir = 'C:/xampp/htdocs/users/';
$file = $dir . 'users.txt';



if ($_SERVER['REQUEST_METHOD'] == 'POST') { // Handle the form.

    $problem = FALSE; // No problems so far.

    // Check for each value...
    if (empty($_POST['username'])) {
        $problem = TRUE;
        print '<p class="error">Please enter a username!</p>';
    }   

    if (empty($_POST['password1'])) {
        $problem = TRUE;
        print '<p class="error">Please enter a password!</p>';
    }

    if ($_POST['password1'] != $_POST['password2']) {
        $problem = TRUE;
        print '<p class="error">Your password did not match your confirmed password!</p>';
    } 

    if (!$problem) { // If there weren't any problems...

        if (is_writable($file)) { // Open the file.

            // Create the data to be written:
            $subdir = $_POST['username']; // folder to be created after the user name 
            $data = $_POST['username'] . "\t" . sha1(trim($_POST['password1'])) . "\t" . $subdir . PHP_EOL; // data is users name encrypted password

            // Write the data:
            file_put_contents($file, $data, FILE_APPEND | LOCK_EX);

            // Create the directory:

            mkdir ($dir . $subdir); // making a directory within a directory of folder name of user name 

            //EVERYTHING WORKS TILL HERE IS WHERE I GET STUCK

            $filename = 'books.csv';

            file_put_contents($dir . $subdir. $filename);


            // Print a message:
            print '<p>You are now registered!</p>';

        } else { // Couldn't write to the file.
            print '<p class="error">You could not be registered due to a system error.</p>';
        }

    } else { // Forgot a field.
        print '<p class="error">Please go back and try again!</p>'; 
    }

} else { // Display the form.




// Leave PHP and display the form:

    ?>

我尝试过其他方法,它会将一个.csv文件作为username books-.csv插入常规用户文件夹,但由于某些原因,我无法在新创建的username子文件夹中创建books.csv


有什么建议吗

您缺少将
/
附加到路径的功能

$dir$子目录
将被删除

C:/xampp/htdocs/users/myusername

再加上像你那样的
books.csv
会导致

C:/xampp/htdocs/users/myusernamebooks.csv

解决方案:

$filename = 'books.csv';
file_put_contents($dir . $subdir . PATH_SEPARATOR . $filename); // Append the directory separator aswell

请注意,您的帖子遗漏了
file\u put\u contents
的第二个参数,因此我在回答中也省略了它,因为我不知道您在那里放了什么。但这不是可选的。

您缺少在路径中附加
/

$dir$子目录
将被删除

C:/xampp/htdocs/users/myusername

再加上像你那样的
books.csv
会导致

C:/xampp/htdocs/users/myusernamebooks.csv

解决方案:

$filename = 'books.csv';
file_put_contents($dir . $subdir . PATH_SEPARATOR . $filename); // Append the directory separator aswell

请注意,您的帖子遗漏了
file\u put\u contents
的第二个参数,因此我在回答中也省略了它,因为我不知道您在那里放了什么。但它不是可选的。

好吧,这是它以前做的,因为我试过这个。有C:/xampp/htdocs/users/这段代码创建了一个新文件夹,例如,我注册了我的名字,然后创建了:C:/xampp/htdocs/users/Proximus。这正是我想要的,但我想在我创建的Proximus命名文件夹中插入一个名为Books的.csv文件,以便获得C:/xampp/htdocs/users/Proximus/Books.csv。它现在所做的就是你的代码所做的是C:/xampp/htdocs/users/Proximusbooks.csv。在users文件夹中创建一个名为Proximusbooks.csv的csv文件。您没有在我的答案中添加
路径分隔符
部分(这实际上是我添加到您的代码中的唯一部分)。我输入的正是:$filename='books.csv';文件内容($dir.$subdir.PATH_SEPARATOR.$filename);它在用户文件夹中创建了一个名为Proximusbooks.csv的文件,而不是将books.csv插入到Proximus文件夹中(好的,看,这是它以前做的,因为我尝试过这个。有一个C:/xampp/htdocs/users/这个代码创建了一个新文件夹,例如,我注册了我的名字,然后创建了:C:/xampp/htdocs/users/Proximus。这就是我想要的,但是我想要一个名为Books的.csv文件插入到我创建的Proximus命名文件夹中,这样我就得到了C:/xampp/htdocs/users/Proximus/books.csv。它现在所做的就是你的代码所做的是C:/xampp/htdocs/users/Proximusbooks.csv。在users文件夹中创建一个名为Proximusbooks.csv的csv文件。你没有在我的答案中添加
路径分隔符
部分(这实际上是我添加到你代码中的唯一部分).我准确地输入了:$filename='books.csv';file_put_contents($dir.$subdir.PATH_SEPARATOR.$filename);它在用户文件夹中创建了一个名为Proximusbooks.csv的文件,而不是将books.csv插入到Proximus文件夹中:(