Вопрос

Hi guys pretty new to PHP been trying to put together an app using copy and paste of code (dont hate me) and tailoring it to suit my need but I have hit a wall. Problem with doing things this way is its hard to get full understanding. Here is the issue. I am copying a file from one directory to another renaming it in the process. However I want to actually copy a file from source (which is fine) and then put it in a folder called users. Tried a few different options and just getting errors. Any help appreciated.

<!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>

and this is the function code.

<?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";
 }

 ?>

Dont reckon the config file contains anything that will change the destination of the copy so not including that.

Это было полезно?

Решение

I see 2 problems. The first is how you are calling your function:

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

Should be:

// 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");

The second is the @mkdir($dst); in your function. You should change your logic to only create subdirectories of the original destination.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top