PHP - Move a file into a different folder on the server

PhpDirectoryMoveUnlink

Php Problem Overview


I need to allow users on my website to delete their images off the server after they have uploaded them if they no longer want them. I was previously using the unlink function in PHP but have since been told that this can be quite risky and a security issue. (Previous code below:)

if(unlink($path.'image1.jpg')){	
	 // deleted
}

Instead i now want to simply move the file into a different folder. This must be able to be done a long time after they have first uploaded the file so any time they log into their account. If i have the main folder which stores the users image(s):

user/

and then within that a folder called del which is the destination to put their unwanted images:

user/del/

Is there a command to move a file into a different folder? So that say:

user/image1.jpg

moves to/becomes

user/del/image1.jpg

Php Solutions


Solution 1 - Php

The rename function does this

docs rename

rename('image1.jpg', 'del/image1.jpg');

If you want to keep the existing file on the same place you should use copy

docs copy

copy('image1.jpg', 'del/image1.jpg');

If you want to move an uploaded file use the move_uploaded_file, although this is almost the same as rename this function also checks that the given file is a file that was uploaded via the POST, this prevents for example that a local file is moved

docs move_uploaded_file

$uploads_dir = '/uploads';
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
        $name = $_FILES["pictures"]["name"][$key];
        move_uploaded_file($tmp_name, "$uploads_dir/$name");
    }
}

code snipet from docs

Solution 2 - Php

Use the rename() function.

rename("user/image1.jpg", "user/del/image1.jpg");

Solution 3 - Php

If you want to move the file in new path with keep original file name. use this:

$source_file = 'foo/image.jpg';
$destination_path = 'bar/';
rename($source_file, $destination_path . pathinfo($source_file, PATHINFO_BASENAME));

Solution 4 - Php

I using shell read all data file then assign to array. Then i move file in top position.

i=0 
for file in /home/*.gz; do
    $file
    arr[i]=$file
    i=$((i+1)) 
done 
mv -f "${arr[0]}" /var/www/html/

Solution 5 - Php

Some solution is first to copy() the file (as mentioned above) and when the destination file exists - unlink() file from previous localization. Additionally you can validate the MD5 checksum before unlinking to be sure

Solution 6 - Php

Create a function to move it:

function move_file($file, $to){
	$path_parts	= pathinfo($file);
	$newplace	= "$to/{$path_parts['basename']}";
	if(rename($file, $newplace))
		return $newplace;
	return null;
}

Solution 7 - Php

use copy() and unlink() function

$moveFile="path/filename";
if (copy($csvFile,$moveFile)) 
{
  unlink($csvFile);
}

Solution 8 - Php

Use file this code

function move_file($path,$to){
   if(copy($path, $to)){
      unlink($path);
      return true;
   } else {
     return false;
   }
 }

Solution 9 - Php

function xmove($src,$dst)
{

  if(is_dir($src)===true)
  { $dir=opendir($src);
	while (($file = readdir($dir)) !== false) {
		if ($file === '.' || $file === '..') {
			continue;
		}

		if (is_dir($src."/".$file) === true) {
			if (is_dir("$dst/$file") === false) {
				mkdir("$dst/$file");
			}
			//echo basename("$file")."<br>";
				xmove($src."/".$file,$dst."/".$file);
			
		}
		else {
			copy("$src/$file", "$dst/$file");
			unlink("$src/$file");
			
		}
	}

	closedir($dir);
	rmdir($src);
	return true;

  }else
  return false;

}

Solution 10 - Php

shell_exec('mv filename dest_filename');

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionodd_duckView Question on Stackoverflow
Solution 1 - PhpMKroedersView Answer on Stackoverflow
Solution 2 - PhpBen FortuneView Answer on Stackoverflow
Solution 3 - PhpNabi K.A.Z.View Answer on Stackoverflow
Solution 4 - PhpTo Quoc DiepView Answer on Stackoverflow
Solution 5 - PhpquardasView Answer on Stackoverflow
Solution 6 - PhpMarceloView Answer on Stackoverflow
Solution 7 - PhpArunprabakaran MView Answer on Stackoverflow
Solution 8 - PhpTechnology andriod appsView Answer on Stackoverflow
Solution 9 - Phpuser3011974View Answer on Stackoverflow
Solution 10 - Phpuser10395079View Answer on Stackoverflow