0

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

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

这是我的代码:

   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 ";
4

3 回答 3

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 函数

于 2013-04-22T15:34:04.733 回答
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);

于 2013-04-22T15:46:13.083 回答
0

您可以使用 uniqid():

$FileName = uniqid();  
于 2013-04-22T15:36:33.287 回答