如何获取使用php上传的文件的文件扩展名?

时间:2014-09-21 11:13:32

标签: php post file-upload

此代码在为文件名生成随机字符串之后,除了一个问题之外还可以正常工作。它不保留文件扩展名。

<?php   
define("UPLOAD_DIR", "uploads/");

// process file upload
$file = $_FILES["file"];
if ($file["error"] !== UPLOAD_ERR_OK) {
    echo "<p>An error occurred.</p>";
    exit;
}

// verify the file type

$fileType = exif_imagetype($_FILES["file"]["tmp_name"]);
$allowed = array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG);
if (!in_array($fileType, $allowed)) {
    echo "<p>File type is not permitted.</p>";
    exit;
}

// ensure a random filename
$name = generateName();
$redirect = "http://rmaltsaar.net/rfile/uploads/" . $name;

// preserve file from temporary directory
$success = move_uploaded_file($file["tmp_name"], UPLOAD_DIR . $name);
if (!$success) {
    echo "<p>Unable to save file.</p>";
    exit;
}  else {
    echo "<p>Your file (" . $name . ") has been uploaded successfully!</p>";
    echo "<p>Redirecting to file</p>";
}

// This returns a random string for the filename

function generateName($max = 6) {
    $i = 0;
    $possible_keys = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $keys_length = strlen($possible_keys);
    $str = "";
    while($i < $max) {
        $rand = mt_rand(1, $keys_length-1);
        $str .= $possible_keys[$rand];
        $i++;
    }
    return $str;
}
?>

<meta http-equiv="refresh" content="8;url=<?php echo $redirect ?>">

所以我想弄清楚的是我如何使函数generatename不仅返回文件的随机字符串而且还返回文件扩展名。 像这样:

return $str . $ext;

1 个答案:

答案 0 :(得分:3)

$filename = $_FILES['file']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);

$name = generateName().".$ext";