Jhon Woodwrick
Jhon Woodwrick

Reputation: 1113

finding the extension a file on upload?

what im trying to do here, get the current file and then upload it,find the extension of the file and rename it! and echo the result!! but it seems wrong, and i dnt know which part!! :((

    $fieldname = $_REQUEST['fieldname'];
    $uploaddir = 'uploads/';
    $uploadfile = $uploaddir . basename($_FILES[$fieldname]['name']);


    if (move_uploaded_file($_FILES[$fieldname]['tmp_name'], $uploadfile)) {

    //find the extension
     $extension= pathinfo($uploadfile);

    //rename the file
      rename ($uploadfile, "newfile.".$extenion['extension']."");
 echo "uploads/newfile.'".$extension['extension']."'"; // "success"

}

Upvotes: 1

Views: 8464

Answers (3)

Alex Vidal
Alex Vidal

Reputation: 4108

You should use the new filename as the second argument to move_uploaded_file:

$fieldname = $_REQUEST['fieldname'];
$tmpfile = $_FILES[$fieldname]['tmp_name'];

$info = pathinfo($tmpfile);
$filename = 'newfile.' . $info['extension'];

$uploaddir = 'uploads/';
$uploadfile = $uploaddir . $filename;

if(move_uploaded_file($tmpfile, $uploadfile)) {
    echo $uploadfile;
}

Upvotes: 0

netcoder
netcoder

Reputation: 67695

I think you should do something like this:

$fieldname = $_POST['fieldname']; // don't use $_REQUEST
$extension = pathinfo($_FILES[$fieldname]['name'], PATHINFO_EXTENSION);

$uploaddir = 'uploads/';
$uploadfile = $uploaddir . 'newfile.'.$extension;

if (move_uploaded_file($_FILES[$fieldname]['tmp_name'], $uploadfile)) {
    // success
}

move_uploaded_file already "renames" the file, there is no need to call rename manually. Just make it in a single operation.

You probably also noticed that I've passed PATHINFO_EXTENSION to pathinfo, since you need only the extension and not the complete path information.

Lastly, I used $_POST instead of $_REQUEST. You shouldn't use $_REQUEST unless you really know what you are doing. This could lead to unexpected variables tampering from cookies or session, per example.

Upvotes: 2

PHPGuyZim
PHPGuyZim

Reputation: 143

$fieldname = $_POST['fieldname']; #its never going to be a GET! ..not sure y u need this though, the file field should hold the array key, but anyway...
#get the extension by removing everything before the last dot
$extension = preg_replace('@.+\.@', '', $_FILES[$fieldname]['name']);
$newname = "newfile.".$extension;

$uploaddir = 'uploads/';
$uploadfile = $uploaddir . $newname;

if (move_uploaded_file($_FILES[$fieldname]['tmp_name'], $uploadfile)) {

 echo "$uploadfile"; // "success"

}

Untested, but the logic is mo straight to the point.

Upvotes: 0

Related Questions