2014-12-23 83 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