1

嗨,PHP 新手一直在尝试使用复制和粘贴代码(不要恨我)来组合一个应用程序并对其进行定制以满足我的需要,但我已经碰壁了。以这种方式做事的问题是很难得到充分的理解。这是问题所在。我正在将文件从一个目录复制到另一个目录,并在此过程中对其进行重命名。但是我想实际从源复制一个文件(这很好),然后将它放在一个名为 users 的文件夹中。尝试了几个不同的选项,只是得到了错误。任何帮助表示赞赏。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en-US" xml:lang="en-US" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>User registration</title>
</head>
<body>
<?php
require_once('config.php'); // include config file
require_once('function.php'); // include copy file that have copy function.
?>
<div class="center">
<h1>Please Enter the details shown below..</h1>
<form action="index.php?action=submit" method="post">
<table class="table" align="center">
<tr>
<td>User Name:</td>
<td><input type="text" name="uname" /></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="pwd" /></td>
</tr>
<tr>
<td>Click on Submit..</td>
<td><input type="submit" value="Submit" name="action"/></td>
</tr>
</table>
</form>
</div>
<?php
if($_POST["action"]=='') // check for parameter if action=submit or not if it is blank    then show this message
{
echo "Please fill 'User Name' and 'Password' above!";
}
else{
if($_POST["uname"]==''){ // if username left then check for password field
if($_POST["pwd"]==''){ // if it also blank then show this message
echo "You leave both the fields blank. Please fill them and then click on submit to    continue.";
} 
else {echo "User Name field can not be left blank."; // else show user name left blank
 }
 }
elseif ($_POST["pwd"]==''){ // if username is there then check for a null password
echo "Password field can not be left blank.";
}
else{
// We will add User into database here..
$query="INSERT INTO $DBTable (username, password)
VALUES('$_POST[uname]','$_POST[pwd]')";
// We are doing it for an example. Please encrypt your password before using it on your   website
if (!mysql_query($query,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added ";

// Now Create a directory as User Name.
 $username=$_POST["uname"];
 mkdir(dirname(__FILE__)."/users/"."$username"); // Create Directory
 recurse_copy($SourceDir,$username); // Copy files from source directory to target  directory
 // Finally print the message shown below.?> 
  Welcome <?php echo $_POST["uname"]; ?>!
  You are account folder with name <?php echo $_POST["uname"]; ?> has been created    successfully.
  <?}}?>
  </body>
  </html>

这是功能代码。

<?php
// This source code is copied from http://php.net/manual/en/function.copy.php 
// Real author of this code is gimmicklessgpt at gmail dot com
function recurse_copy($src,$dst) { // recursive function that copy files from one    directory to another
$dir = opendir($src);
@mkdir($dst);
while(false !== ( $file = readdir($dir)) ) {
    if (( $file != '.' ) && ( $file != '..' )) {
        if ( is_dir($src . '/' . $file) ) {
            recurse_copy($src . '/' . $file,$dst . '/' . $file);
        }
        else {
            copy($src . '/' . $file,$dst . '/' . $file);
        }
    }
    }
    closedir($dir);
   //echo "$src";
 }

 ?>

不要认为配置文件包含任何会更改副本目标的内容,因此不包括在内。

4

1 回答 1

0

我看到2个问题。首先是你如何调用你的函数:

mkdir(dirname(__FILE__)."/users/"."$username"); // Create Directory
recurse_copy($SourceDir,$username); // Copy files from source directory to target  directory

应该:

// Create Directory
mkdir(dirname(__FILE__)."/users/"."$username"); 
// Copy files from source directory to target  directory; the one you just created
recurse_copy($SourceDir,dirname(__FILE__)."/users/"."$username");

第二个是@mkdir($dst);在你的函数中。您应该更改逻辑以仅创建原始目标的子目录。

于 2013-02-20T15:40:48.400 回答