上传到随机名称时重命名文件

时间:2013-04-22 15:31:34

标签: php

我想知道将文件重命名为随机(字母和数字)的速度更快更强的方式

另一个问题是:我正在尝试放置许多不允许的文件类型,但实际上我的代码只适用于一种类型!!所以,如果你可以告诉我如何设置多种类型:)

这是我的代码:

   if ( $_REQUEST['do'] == "doUpload" )
{
  $TEMP = $_FILES['userfile']['name'];
  $FileName = stripslashes($TEMP);  
  $FileType = strrchr($FileName ,'.'); 

  $box = $uploadDIR.'/'.$TEMP;

$notype= ".php";

if ($FileType == $notype){

echo "NOT ALLOWED TO ATTACH THIS KIND OF TYPES";

exit;
}
  if (file_exists($box))
  {
    echo "<center><b><font color=red>THE FILE ALREADY EXIST</font><br><br><a href='http://$httpname/$box' target='_blank'>THE LINK</a></b><center>";
  }
  else
  {
    move_uploaded_file($_FILES['userfile']['tmp_name'],$box);

  echo " SUCCESS ";

3 个答案:

答案 0 :(得分:1)

要回答不允许使用的文件类型,我会执行类似

的操作
$disallowedFileTypes = array('.php.', '.exe.', '.dmg');
if (in_array($FileType, $disallowedFiled)) {
    echo 'error';
    exit;
} else {
    // run upload
} 

哦,你检查扩展程序的方式是有缺陷的,因为如果文件上传了一个文件会破坏。在名称中my.file.php

最好使用phpinfo()方法http://php.net/manual/en/function.pathinfo.php

<?php
$path_parts = pathinfo($FileName);
$FileType = $path_parts['extension'];
?>

对于随机文件名,请仔细查看PHP函数

答案 1 :(得分:0)

你可以使用uniqid():

$FileName = uniqid();  

答案 2 :(得分:0)

我在允许列表而不是排除列表上工作(你不想要的比你想要的更多)

$allowedExtensions = array("txt","rtf","doc","pdf","docx","xlsx","xls","ppt","pptx","zip","rar","DOC","DOCX","mdb","MDB");

// check like this
if(!in_array($extension, $allowedExtensions)) {
    $adderr = "Invalid File Type. Please upload an allowed file type.";
}

对于文件命名,我总是使用日期与时间戳+文件名的组合,就好像你只使用上面建议的文件名的md5(),而它很少见到它仍然可以获得大的重复足够的数据集。通过实施时间协议,您永远不会重复。

$newname = md5(date("Y-m-d H:i:s").$_FILES['pricelist']['tmp_name'].$filename);