【问题标题】:How to rename an uploaded file before it is saved?如何在保存之前重命名上传的文件?
【发布时间】:2011-10-23 14:22:08
【问题描述】:

我正在使用下面的这个 sn-p 来获取文件名和扩展名,这是可行的,但是我如何重命名文件以便文件名等于 bake23 + 文件的扩展名。

  $variable = 'baKe23';


  $filename = $_FILES['filename']['name'];
  $ext = $_FILES["filename"]["type"];

如果文件名已经存在则重命名:

       $filename = $_FILES['filename']['name']; 
  $extension = substr($filename, strpos($filename,'.'), 
  strlen($filename)-1);

         $sql="SELECT filename FROM documents WHERE person_id= '$pid'";  

     $result=mysql_query($sql);

    $query = mysql_query($sql) or die ("Error: ".mysql_error());

    if ($result == "")
    {
    echo "";
     }
    echo "";


   $rows = mysql_num_rows($result);

   if($rows == 0)
   {
  print("");

   }
   elseif($rows > 0)
   {
  while($row = mysql_fetch_array($query))
   {

  $existing = $row['filename'];

  print("");
   }

    }

    if ( $filename === $existing ) {
$filename = $rnd_id.strrchr($_FILES['filename']['name'], ".");

   } else {
   $filename = $_FILES['filename']['name'];;
    }

【问题讨论】:

    标签: php file rename


    【解决方案1】:
    $variable = 'baKe23';
    $filename = $_FILES['filename']['name'];
    $filename = $variable.strrchr($_FILES['filename']['name'], ".");
    

    $variable = 'baKe23';
    $filename = $_FILES['filename']['name'];
    $filename = $variable.".".pathinfo($filename, PATHINFO_EXTENSION);
    

    【讨论】:

    • @KingCrunch:已经改变了。您应该稍等一下,然后再投反对票。只是一个错误
    • 如果您提交了恶意文件名,strrchr 变种可能会被欺骗,将路径模式注入新名称。我得出的结论是现在最好将 strrchr 和 basename 结合起来。
    • 我使用它来避免重复的文件名。如果我不是重命名,而是在用户文件夹中为每个文档提供一个新文件夹,您认为会更好吗?
    • @KPO:我认为为这些文件创建 md5() 值会更好
    【解决方案2】:

    从提交的文件名中获取扩展名并将其添加到您的变量中:

    $filename = basename($filename);
    $filename = $variable . (string) strrchr($filename, '.');
    

    编辑:对于您编辑的问题,字面意思

    $filename =  $variable . '.' . $ext;
    

    但是,考虑到我要上传一张名为 banana-smiley.gif 的图片,会发生以下情况:

    $filename = 'baKe23.image/gif';
    

    这不是我假设的你想要的。您甚至根本不应该依赖$_FILES[*]["type"]。您需要做的是检查每个上传的文件(确定类型、验证类型、对上传的文件运行病毒检查程序)。

    与此相关的问题是Secure File Upload and validating itIs it important to verify that the uploaded file is an actual image file?

    【讨论】:

    • @KPO:这是 mime 类型,而不是文件类型(扩展名)。您可能正在寻找从 mime 类型到文件扩展名的映射。有关$_FILES 中所有键的列表,请参阅php.net/manual/en/features.file-upload.post-method.php
    • 我使用它来避免重复的文件名。如果我不是重命名,而是在用户文件夹中为每个文档提供一个新文件夹,您认为会更好吗?
    • @KPO:您可以只为文件添加前缀而不是文件夹,或者如果已经存在同名文件,则开始为它们编号。但我会在它们前面加上一些较短的随机序列,所以磁盘上的文件名不是那么容易预测的。
    • @hakre 再次感谢。我确实尝试过重命名脚本,但它不起作用,而是更改了所有文件上传名称。你能检查一下,我已经发布了我使用的内容。
    猜你喜欢
    • 2013-09-13
    • 1970-01-01
    • 2016-09-21
    • 2016-07-13
    • 1970-01-01
    • 2012-07-08
    相关资源
    最近更新 更多