使用tmp名称保存上传的文件

时间:2016-02-01 12:35:12

标签: php

保持上传文件的 tmp_name 是一个好习惯吗?请检查以下示例:

$short_tmp_name = substr($_FILES['tmp_name'], -6)
move_uploaded_file($_FILES['file'], "$uploads_dir/$short_tmp_name");

在处理文件上传时,如上例所示:

  1. 名称冲突会发生吗?
  2. 这种做法是否会泄露任何安全问题?
  3. 修改

    我已经澄清了这个问题(修改了代码示例)。

1 个答案:

答案 0 :(得分:1)

没有这样的问题,但为了更安全并处理错误,请执行如下所示的操作。注意:只是示例代码,根据您的需要添加更多错误/其他检查和处理

$error = '';

if ($_FILES["file"]["size"] == 0) {
    $error = 'Uploading failed';
} 
else if ($_FILES["file"]["size"] > MAX_UPLOAD_FILE_SIZE) {
    $error = 'File size exceeds ' . MAX_UPLOAD_FILE_SIZE_MB;
} 
else if ($_FILES["file"]["error"] > 0) {
    $error = 'Error while uploading';
}

if(!$error) {
    $file_name = $_FILES["file"]["name"];

    if (file_exists(DESTINATION . $file_name))  {
        $path_parts = pathinfo($dstFile . $file_name);
        $file_name = $path_parts['filename'] . '-' . time() . '.' . $path_parts['extension'];
    }

    $dstFile = DESTINATION . $file_name;

    if (move_uploaded_file($_FILES["file"]["tmp_name"],$dstFile)) {
        //its done
    }
    else {
        $error = 'Unexpected system error';
    }
}