【问题标题】:php uploaded filename changesphp上传的文件名更改
【发布时间】:2013-03-12 06:50:41
【问题描述】:

我需要有关使用 php 上传多个文件的帮助。当我上传具有不同字符名称的文件时,它会更改文件名,例如,如果它的 "Kayıt.doc" 在上传后更改为 "Kayıt.doc"。我不想发生这种情况,我该怎么办?请帮忙.... :)

这是html页面....

<!doctype html>
<html>
    <body>  
    <form action="cvupload.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
        <table width="539" height="75" border="0">
            <tr>
                <td width="220"><div align="right">Step 2 : </div></td>
                <td width="309">Please upload your cv now </td>
            </tr>
            <tr>
                <td><span class="style14">Submit your cv (ms word / zip format)</span></td>
                <td><label for="file"></label>
                <input type="file" name="file[]" id="file" /></td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td><label for="Submit"></label>
                <input type="submit" name="Submit" value="Submit" id="Submit" /></td>
            </tr>
        </table>
    </form> 
    </body>
</html> 

这是 PHP 页面...

<?php

$toplam = count($_FILES["file"]["name"]);
for ($i = 0; $i < $toplam; $i++)
{
    foreach ($_FILES['file']['name'] as $filename)
    {


 if (((($_FILES["file"]["type"][$i] == "application/msword")||($_FILES["file"]["type"][$i] == "application/zip")))
 && ($_FILES["file"]["size"][$i] > 0))
   {
   if ($_FILES["file"]["error"][$i] > 0)
     {

     echo "Return Code: " . $_FILES["file"]["error"][$i] . "<br />";
     }
   else
     {
     echo "Upload: " . $_FILES["file"]["name"][$i] . "<br />";
     echo "Type: " . $_FILES["file"]["type"][$i] . "<br />";
     echo "Size: " . ($_FILES["file"]["size"][$i] / 1024) . " Kb<br />";
     echo "Temp file: " . $_FILES["file"]["tmp_name"][$i] . "<br />";

     if (file_exists("upload/" . $_FILES["file"]["name"][$i]))
       {
       echo $_FILES["file"]["name"][$i] . " already exists. ";
       }
     else
       {
       move_uploaded_file($_FILES["file"]["tmp_name"][$i],
       "upload/" . $_FILES["file"]["name"][$i]);
       echo "Stored in: " . "upload/" . $_FILES["file"]["name"][$i];
       }
     }   
   }
 else
   {
   echo "Invalid file";

   }
}
 ?>

当我在没有括号的情况下使用 &lt;input type="file" name="file" id="file" /&gt; 仅用于 1 个文件时,它可以,但对于多个文件它不起作用。

【问题讨论】:

  • 上传的文件名包含重音字符?如果是这样,请使用 utf8encode()utf8decode()
  • 生成目标文件路径时不要使用原文件名;考虑给它一个唯一的 id 并且只使用扩展。

标签: php html upload


【解决方案1】:

谢谢大家的回复,我改了这样的代码,它工作了。

move_uploaded_file($_FILES["file"]["tmp_name"][$i], "upload/" . iconv("UTF-8", "ISO-8859-9//TRANSLIT",$_FILES["file"]["name"][$i]));

【讨论】:

    【解决方案2】:

    我猜这不是您的代码的问题。我猜你的电脑不支持某些字符编码。

    <?php
      function utf8_urldecode($str) {
        $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($str));
        return html_entity_decode($str,null,'UTF-8');;
      }
    

    参考这个。

    【讨论】:

      【解决方案3】:

      从我正在阅读的内容来看,您在 php 中接收到的 URI 是经过编码的。尝试在有问题的字符串上使用http://php.net/manual/en/function.urldecode.php

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2013-11-07
        • 1970-01-01
        • 2017-03-12
        • 2011-06-09
        • 2013-07-10
        • 1970-01-01
        • 1970-01-01
        • 2016-05-28
        • 2012-05-13
        相关资源
        最近更新 更多