2014-12-23 39 views
1

我读过的每本书和文章都建议我们为了安全目的重命名上传文件。让说我有一个这样的代码:重命名上传文件并将其显示出来

if (!isset($error)) { 

$file = $_FILES['images']; 
$real_pic_name = $_FILES['images']['name'];; 
// Create a tmp_name for the file: 
$tmp_name = sha1($file['name']) . uniqid('',true); 

// Move the file to its proper folder but add _tmp, just in case: 
$dest = PDFS_DIR . $tmp_name . '_tmp'; 

if (move_uploaded_file($file['tmp_name'], $dest)) { 

//insert into database with a prepared statement 
$stmt = $pdo->prepare('INSERT INTO users (real_pic_name, tmp_name, dateAdded) VALUES (:real_pic_name, :tmp_pic_name, now())'); 
$stmt->execute(array(
':real_pic_name' => $real_pic_name, 
':tmp_pic_name' => $tmp_name 
)); 

// Rename the temporary file: 
$original = PDFS_DIR . $tmp_name . '_tmp'; 
$dest = PDFS_DIR . $tmp_name; 
rename($original, $dest); 

// Print a message: 
echo '<div class="alert alert-success"><h3>The file has been uploaded!</h3></div>'; 

} else { 
trigger_error('The file could not be moved.'); 
unlink ($file['tmp_name']); 
} 

} 

问题的是我搞不清什么是显示图像文件,因为我不认为重命名文件不是好主意,更好的办法。我想在我的mysql中添加一些额外的列来保存扩展名,然后可能会在会话中调用图像文件,我不知道。任何人都可以给我一些解决方案或示例代码,可以帮助我,因为我读过的大部分教程只解释上传和重命名文件名,而不是文件扩展名不显示上传文件。谢谢。

+0

投入会议的文件名insted的,从数据库获取它不会改变任何东西。你可以存储文件的真实名称,并将文件的内容保存到数据库,也许这可以帮助 –

+0

是的,我已经保存它,现在我只是混淆如何显示已更名的文件,并且改变了分机。 – Kyo

+0

如果您只接受来自用户的图像,则可以检查img分辨率。 PHP有一个功能。 –

回答

0

尝试使用此代码

$temp = explode(".",$_FILES["file"]["name"]); 
$newfilename = rand(1,99999) . '.' .end($temp); 
move_uploaded_file($_FILES["file"]["tmp_name"], "../img/imageDirectory/" . $newfilename; 
+0

这个问题不在于重命名文件,而是在重命名文件后如何显示它(在我的情况下,该文件变为完全63个字符长的文件名并以_tmp作为扩展名)。我想知道是否可以显示它,而不必重命名它再次 – Kyo