mm1975
mm1975

Reputation: 1655

PHP define the destination folder for an upload

I use the following PHP script to upload an image to my server. Actually it moves the file in the same folder where my script is (root). I would like to move it into the folder root/imageUploads. Thank you for your hints!

$source = $_FILES["file-upload"]["tmp_name"];
$destination = $_FILES["file-upload"]["name"];

...

if ($error == "") {
   if (!move_uploaded_file($source, $destination)) {
     $error = "Error moving $source to $destination";
   }
}

Upvotes: 1

Views: 916

Answers (3)

Ajith
Ajith

Reputation: 2666

Full path to the destination folder should be provided to avoid and path issue for moving uploaded files, I have added three variations for destination paths below

$uploadDirectory  = "uploads";
// Gives the full directory path of current php file
$currentPath = dirname(__FILE__); 

$source      = $_FILES["file-upload"]["tmp_name"];
// If uploads directory exist in current folder
// DIRECTORY_SEPARATOR gices the directory seperation "/" for linux and "\" for windows
$destination = $currentPath.DIRECTORY_SEPARATOR.$uploadDirectory.DIRECTORY_SEPARATOR.$_FILES["file-upload"]["name"];
if (!move_uploaded_file($source, $destination)) {
    echo $error = "Error moving $source to $destination";
}

// If to current folder where php script exist
$destination = $currentPath.DIRECTORY_SEPARATOR.$_FILES["file-upload"]["name"];
if (!move_uploaded_file($source, $destination)) {
    echo $error = "Error moving $source to $destination";
}

// If uploads directory exist outside current folder
$destination = $currentPath.DIRECTORY_SEPARATOR."..".DIRECTORY_SEPARATOR.$uploadDirectory.DIRECTORY_SEPARATOR.$_FILES["file-upload"]["name"];
if (!move_uploaded_file($source, $destination)) {
    echo $error = "Error moving $source to $destination";
}

Upvotes: 1

Rise
Rise

Reputation: 1601

You will need to check if the destination folder exists.

$destination = $_SERVER['DOCUMENT_ROOT'] . '/imageUploads/'

if (! file_exists($destination)) { // if not exists
    mkdir($destination, 0777, true); // create folder with read/write permission.
}

And then try to move the file

$filename = $_FILES["file-upload"]["name"];
move_uploaded_file($source, $destination . $filename);

Upvotes: 2

Justinas
Justinas

Reputation: 43441

So now your destination looks like this:

some-file.ext

and it's dir is same as file that executes it.

You need to append some dir path to current destination. E.g.:

$path = __DIR__ . '/../images/'; // Relative to current dir
$path = '/some/path/in/server/images'; // Absolute path. Start with / to mark as beginning from root dir

And then move_uploaded_file($source, $path . $destination)

Upvotes: 1

Related Questions