【发布时间】: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 将每个人都变为小写,但无济于事。