Dave Lynch
Dave Lynch

Reputation: 13

php copy file for each filename in array

I am trying to move all the files in my array from one directory to another.

I have done some research and are using the php Copy() function. here is my code so far:

$filenameArray = "img1.png,img2.png,img3.png";

$sourcePath = "/source/";
$savePath = "/newDir/";

$myArray = explode(',', $filenameArray);
$finalArray = print_r($myArray);

function copyFiles($finalArray,$sourcePath,$savePath) {
for($i = 0;$i < count($finalArray);$i++){
    copy($sourcePath.$finalArray[$i],$savePath.$finalArray[$i]);}
} 

Anyone see where I'm going wrong?

Thanks in advance!

This is the unlink ive been attempting to use.

function copyFiles($finalArray,$sourcePath,$savePath) {
   foreach ($finalArray as $file){
     if (!copy($sourcePath.$file,$savePath.$file)) {
         echo "Failed to move image";
     }

     $delete[] = $sourcePath.$file;

   }

}

   // Delete all successfully-copied files
    foreach ( $delete as $file ) {
        unlink( $sourcePath.$file );
    }

My Final Working Code

the code below moves images in comma seperated array to new folder and removes them from current folder

$finalArray = explode(',', $filenameArray);

function copyFiles($finalArray,$sourcePath,$savePath) {
   foreach ($finalArray as $file){
     if (!copy($sourcePath.$file,$savePath.$file)) {
         echo "Failed to move image";
     }

   }

}

copyFiles( $finalArray, $sourcePath, $savePath);

function removeFiles($finalArray,$sourcePath) {
   foreach ($finalArray as $file){
     if (!unlink($sourcePath.$file)) {
         echo "Failed to remove image";
     }

   }

}

removeFiles( $finalArray, $sourcePath);

Upvotes: 1

Views: 740

Answers (2)

William Macdonald
William Macdonald

Reputation: 2167

In your code you are not calling the copyFile function. Try this:

$filenameArray = "img1.png,img2.png,img3.png";

$sourcePath = "/source/";
$savePath = "/newDir/";

$finalArray = explode(',', $filenameArray);

function mvFiles($finalArray,$sourcePath,$savePath) {
   foreach ($finalArray as $file){
     if (!rename($sourcePath.$file,$savePath.$file)) {
         echo "failed to copy $file...\n";
     }
   }
}

mvFiles( $finalArray, $sourcePath, $savePath);

Upvotes: 1

Subhra Jyoti Lahiri
Subhra Jyoti Lahiri

Reputation: 320

A simple solution :

$filenameArray = "img1.png,img2.png,img3.png";

$sourcePath = "/source/";
$savePath = "/newDir/";

$myArray = explode(',', $filenameArray);
$finalArray = $myArray;    //corrected this line

function copyFiles($finalArray, $sourcePath, $savePath) 
{
    for ($i = 0; $i < count($finalArray); $i++) 
    {
        copy($sourcePath.$finalArray[$i],$savePath.$finalArray[$i]);
    }
}

Hope you have right call to function copyFiles().

UPDATE for unlink() :

Let me try to throw some light on your work (written code):

foreach ($finalArray as $file)
{
    if (!copy($sourcePath.$file,$savePath.$file)) 
    {
        echo "Failed to move image";
    }
    $delete[] = $sourcePath.$file;
}

Contents of $delete :

a. /source/img1.png
b. /source/img2.png
c. /source/img3.png

Now,

foreach ( $delete as $file ) 
{
    unlink( $sourcePath.$file );
}

unlink() will be called with the following parameters:

$sourcePath.$file : /source/./source/img1.png : /source//source/img1.png => No  such path exists
$sourcePath.$file : /source/./source/img2.png : /source//source/img2.png => No  such path exists
$sourcePath.$file : /source/./source/img3.png : /source//source/img3.png => No  such path exists
$sourcePath.$file : /source/./source/img4.png : /source//source/img4.png => No  such path exists

I think for this reason, unlink is not working.

The code to be written should be like the following:

foreach ( $delete as $file ) 
{
    unlink( $file );
}

Now, unlink() will be called with the following parameters:

a. /source/img1.png => path do exists
b. /source/img2.png => path do exists
c. /source/img3.png => path do exists

Do tell me if this does not solves the issue.

Update as per Dave Lynch's code:

$filenameArray = "img1.png,img2.png,img3.png";

$sourcePath = "/source/";
$savePath = "/newDir/";

$finalArray = explode(',', $filenameArray);

foreach ($finalArray as $file)
{
    $delete[] = $sourcePath.$file;
}

foreach ( $delete as $file ) 
{
     echo $sourcePath.$file . "</br>";
}

Output:

/source//source/img1.png
/source//source/img2.png
/source//source/img3.png

Please check.

Thanks and Regards,

Upvotes: 0

Related Questions