【问题标题】:Php file upload uppercase extension doesn't workphp文件上传大写扩展不起作用
【发布时间】:2013-08-08 21:32:53
【问题描述】:

我在上传来自 HTML 表单的文件时遇到问题。仅当扩展名不是大写时才有效。上传 .jpg 会起作用,但 .JPG 不会(即使在系统上重命名文件后)。我完全感到困惑,因为我的网站是供个人使用的,所以我没有对文件扩展名设置任何限制。这是html表单

<form enctype="multipart/form-data" action="uploader.php" method="post">
Browse file : <input type="file" name="img"><br>
Nom : <input type="text" name="nom"><br>
Prix : <input type="text" name="prix"><br>
Description: <input type="text" name="descr"><br>
<input type="submit" value="Upload">
</form>

这是我的上传脚本。

$target_path = "../photos/" . $_FILES['img']['name'];

if(move_uploaded_file($_FILES['img']['tmp_name'], $target_path)){
    code here
}

如有需要,我会提供更多信息,感谢您的帮助!

【问题讨论】:

  • 您的脚本非常危险。您直接使用用户提供的文件名,从而允许恶意用户在您的服务器上任意位置乱写他们的文件。 请勿使用此代码
  • 正如我所说,我的网站仅供个人使用,所以我一点也不担心。我想知道为什么大写扩展会导致问题。
  • 只需使用strtoupper()函数将所有内容转换为大写,然后使用strtolower()将所有内容转换为小写;包括文件扩展名。例如:$image = strtoupper($image); then $image = strtolower($image); 应该可以解决问题,即使您不应该使用该表单。
  • $image = $_FILES['image']; $image = strtoupper($image); $image = strtolower($image); 然后是其余代码。有影响的东西。
  • @Fred 我已经尝试使用 strtolower 将每个人都变为小写,但无济于事。

标签: php html upload


【解决方案1】:

有同样的问题 - 只是降低目标路径的大小写

$target_path =  $target_dir . strtolower(basename($_FILES["fileToUpload"]["name"]));

【讨论】:

    【解决方案2】:

    我相信这个问题与您的特定 php.ini 文件中的文件上传大小配置有关,而不是文件扩展名的情况。文件上传模块应该不区分大小写。例如,WAMP 的默认上传大小设置为最大文件大小 2M。我也遇到了未加载大写文件扩展名的问题,当我将具有大写扩展名的文件的文件大小与具有小写扩展名的文件大小进行比较时,大写超过 2M 而小写低于 - 我不知道这是否是大小写表示文件大小的 Windows 事物。在任何情况下,都会发生 $_FILES assoc 数组填充,在单个文件上传的情况下,使用单个键值对。键是您在表单输入中设置的名称值,值是一个关联数组,与文件上传的各个方面有关:名称、类型、大小、tmp_name 和错误。上传文件模块会填充文件名,但是当它遇到大于配置设置的大小时,不会填充 assoc 数组的其余部分。因此,文件没有移动到配置的 tmp 目录中,没有设置类型,没有设置大小,但是,错误设置为 1。因为文件从未上传到 tmp 目录,所以无法解压并移动它。解决方案,转到您的 php.ini 文件搜索文本“文件上传”并检查上传的最大文件大小并将其与您的测试文件进行比较,相应地编辑您的 php.ini。

    【讨论】:

      猜你喜欢
      • 2018-11-13
      • 2015-07-08
      • 1970-01-01
      • 2011-06-07
      • 2011-10-10
      • 2022-11-18
      • 2015-02-11
      • 2017-08-01
      相关资源
      最近更新 更多