我有以下PHP代码:
$allowedExts = array("gif", "jpeg", "jpg", "png", "PNG", "JPG", "JPEG", "GIF");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 2000000)
&& in_array($extension, $allowedExts)) {
if ($_FILES["file"]["error"] > 0) {
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
} else {
$file_name = "images/".$_FILES["file"]["name"];
if (file_exists("../images/" . $_FILES["file"]["name"])) {
echo $_FILES["file"]["name"] . " already exists. ";
} else {
move_uploaded_file(
$_FILES["file"]["tmp_name"],
"../images/" . $_FILES["file"]["name"]
);
echo "Stored in: " . "../images/" . $_FILES["file"]["name"];
}
}
} else {
echo "Invalid file";
}
Run Code Online (Sandbox Code Playgroud)
此代码适用于其名称为英文的文件(如'Example.jpg')但对于名称不是英文的文件,保存文件的名称为:''•'''•_'' ¡_1.jpg
为什么以及如何解决它?谢谢!
在php文件中"接收"文件,尝试添加:
<?php header('Content-type: text/html; charset=utf-8');
Run Code Online (Sandbox Code Playgroud)
如果您正在处理Apache,请记住检查AddDefaultCharset的值
AddDefaultCharset Off
Run Code Online (Sandbox Code Playgroud)
这可以解决您的命名文件.但正如某人的建议,我认为更好(避免上传具有相同名称的文件)以使用hashvalue在文件系统中保存文件名.
$tmpFile = $_FILES["file"]["tmp_name"];
$fileName = $_FILES["file"]["name"];
$ext = pathinfo($fileName, PATHINFO_EXTENSION);
$newFileName = "../images/" . md5(time() . $fileName) . ;
move_uploaded_file($tmpFile, $newFileName);
echo "Stored in: " . "../images/" . newFileName;
Run Code Online (Sandbox Code Playgroud)
我总是保存在数据库原始名称和散列名称.这个,因为我想保存原始名称,即使我上传了一百个同名文件,但我不想覆盖文件系统文件.有很多技巧可以避免这种名称冲突......
| 归档时间: |
|
| 查看次数: |
1147 次 |
| 最近记录: |