【问题标题】:I want to let users upload pics to the server but I`m having problem figuring out how to tell $_FILES what the file name should be?我想让用户将图片上传到服务器,但我无法弄清楚如何告诉 $_FILES 文件名应该是什么?
【发布时间】:2011-08-14 17:32:35
【问题描述】:

这是我尝试使用的上传表单:

 here $photo_id = $user_name.time() .


 <form enctype="multipart/form-data" action="upload.php" method="POST">
 <input type="file"  name"<?php echo md5($photo_id)?>" />
 <input type="submit" value="upload"/>
 </form>

这是我卡住的部分 我如何命名文件?我不能用这种方式: $_FILES[$_POST[md5($photo_id)]]['name'] 正如你所看到的,我有同样的问题,$_POST 给出了这样一个奇怪的表达式。 我还将使用文件名更新 mysql 数据库。

谁能建议一种更好的文件命名方式,以免文件名冲突。如果我使用一个简单的文件名,它可能会与其他一些同名文件共同编码并覆盖? 谢谢!

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    给文件字段的名称一个改变值是没有意义的。

    给它一个常数值:

    <input type="file"  name="photo" />
    

    如果您想建议文件名,请使用单独的隐藏字段:

    <input type="hidden" name="filename" value="<?php echo md5($photo_id)?>">
    

    但请注意,这可能由用户操纵。在实际存储文件之前,您最好稍后在服务器端执行md5() - 如果您想使用它,因为

    谁能建议一种更好的文件命名方式,以免文件名冲突。如果我使用一个简单的文件名,它可能会与其他一些同名文件共同编码并覆盖?

    您可以做很多事情(SO 已经列出了所有选项及其优缺点,对此有很好的答案,但我现在找不到任何一个!)。一种相当安全的方法是将照片名称或用户 ID 的值与当前的microtime() 结合起来。以这种方式发生碰撞的危险是微观的。

    【讨论】:

    • 也可以使用file_exists()来检查是否已经存在同名文件。
    【解决方案2】:

    再次查看您的 HTML 并更正错误

    <form enctype="multipart/form-data" action="upload.php" method="POST">
    <input type="file"  name="photo" />
    <input type="submit" value="upload"/>
    </form>
    

    提交后第二次

    <?php
         $uploadedFile = $_FILES['photo']['name']; // uploaded file - for db name and md5()
         $tmpName = $_FILES['photo']['tmp_name']; // uploaded tmp file
         // I assume you are not handling users for web form and you are storing them in a session, if you need additional input on form you can add some hidden values.
         $newFile = md5($uploadedFile.time().$_SESSION['user']);
         move_uploaded_file($tmpName, $uploads_dir/$newFile);
    ?>
    

    【讨论】:

      【解决方案3】:

      您只需要为文件输入使用一个简单的名称:

      <form enctype="multipart/form-data" action="upload.php" method="POST">
      <input type="file"  name"myFile" />
      <input type="submit" value="upload"/>
      </form>
      

      然后当你的表单被提交时,上传的文件可以使用$_FILES['myFile']引用。

      文件将被上传到临时存储,然后您必须使用move_uploaded_file() 等函数将其移动到永久存储。

      类似:

      $tmp_name = $_FILES['myFile']['tmp_name'];
      $name = $_FILES['myFile']['name'];
      move_uploaded_file($tmp_name, 'uploads/' . $name); // Move file to /uploads folder
      

      http://uk.php.net/manual/en/function.move-uploaded-file.php 有更多信息

      更新

      如果您想确保不会覆盖同名文件,请使用file_exists()

      if(file_exists($_FILES['myFile']['name']))
      {
          // File already exists
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-24
        • 2016-05-10
        • 1970-01-01
        • 1970-01-01
        • 2015-04-06
        • 1970-01-01
        • 2016-11-04
        • 1970-01-01
        相关资源
        最近更新 更多