我正在使用W3Schools使用PHP上传文件的例子,我知道它们在编码方面不是最好的,因为它可能已经过时而且不好等等,但我不需要任何太花哨的东西。但我想知道如何在上传时更改文件名。
W3Schools代码(略有编辑):
<?php
$username = $_POST['username'];
$target_dir = '../forum/uploads/'.strtolower($username).'/';
$target_file = $target_dir.'profile'.basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
$uploadOk = 1;
} else {
$uploadOk = 0;
}
}
// Check if file already exists
if (file_exists($target_file)) {
unlink($target_file);
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 1) {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "Profile picture updated";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
我想将名称更改为仅配置文件,现在当我使用此代码上传时,它会将文件作为配置文件上传,后跟文件名称,如下所示,profilexxxx.jpeg。
答案 0 :(得分:1)
喜欢这个
$target_file = $target_dir.'profile'.basename($_FILES["fileToUpload"]["name"]);
删除
$target_file = $target_dir.'profile'.strrchr($_FILES["fileToUpload"]["name"],'.');
但你应该亲自尝试一下。
此位strrchr($_FILES["fileToUpload"]["name"],'.');
从文件名返回扩展名。因此,如果它是file.jpg
,则返回.jpg
,从而返回profile.jpg
。我应该提到它只返回最后一个扩展名。因此,如果您有file.php.jpg
,则只返回.jpg
我没有看到你已经解析了扩展名,所以考虑到这一点,你可以稍微移动一下。
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
$target_file = $target_dir.'profile'.'.'.$imageFileType;
无需两次。
Pathinfo - 可能是“正确的”方式。只是大多数沙箱都关闭了,所以我有点懒得去谷歌看它是否保留了.
与jpg
对.jpg
(我总是忘记)。 / p>
PS这就是沙箱所说的......
警告:出于安全原因,在 [...] 7 < < < BR />
答案 1 :(得分:-1)
我使用它来上传文件,它工作正常。
<?php
if(isset($_POST['submit'])){
// Retrieve file from post method
$file = $_FILES['file'];
// Get file properties
$fileName = $file['name'];
$fileTmpName = $file['tmp_name'];
$fileSize = $file['size'];
$fileError = $file['error'];
$fileType = $file['type'];
//Separate name and file extension
$fileExt = explode('.', $fileName);
//Set to always lowercase
$fileActualExt = strtolower(end($fileExt));
//Set any extension allowed
$allowed = array('jpg','jpeg','png');
//Check whether file extension is allowed
if(in_array($fileActualExt, $allowed)){
if($fileError === 0){
//Check file size criteria
if($fileSize <= 150000){
$NewName = "MyNewName"; //define new file name
//Define your custom file name
$fileNameNew = $NewName.".".$fileActualExt;
//Define file destination
$fileDestination = '../images/'.$fileNameNew;
//php uploading files
move_uploaded_file($fileTmpName, $fileDestination);
} else{
echo "file is too big";
}
} else{
echo "upload error";
}
} else{
echo "your extension is not allowed";
}
}
?>