PHP文件上传时如何将文件名重命名为表单字段拼接指定固定后缀
PHP文件上传自定义重命名实现方案
实现说明
你的需求只需要调整原有PHP代码的目标文件名生成规则,同时补充表单字段的合法性校验即可,修改后的完整可运行代码如下:
<?php // 先获取并校验first_name字段 $first_name = trim($_POST['first_name'] ?? ''); $uploadOk = 1; if (empty($first_name)) { echo "对不起,请填写first_name字段后再提交"; $uploadOk = 0; } // 过滤first_name中的非法文件名字符,避免生成无效文件名 $first_name = preg_replace('/[\/\\\:\*\?\"\<\>\|]/', '', $first_name); $target_dir = "uploads/"; // 获取原文件扩展名 $origin_filename = basename($_FILES["fileToUpload"]["name"]); $imageFileType = strtolower(pathinfo($origin_filename, PATHINFO_EXTENSION)); // 按规则生成新文件名 $new_filename = $first_name . '_invoice.' . $imageFileType; $target_file = $target_dir . $new_filename; // 检查文件是否已存在 if (file_exists($target_file)) { echo "对不起,文件已存在"; $uploadOk = 0; } // 检查文件大小 if ($_FILES["fileToUpload"]["size"] > 500000) { echo "对不起,您的文件大小超出限制"; $uploadOk = 0; } // 校验允许的文件格式 if($imageFileType != "jpg" && $imageFileType != "pdf" && $imageFileType != "txt" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) { echo "对不起,仅允许上传PDF、TXT、JPG、JPEG、PNG、GIF格式的文件"; $uploadOk = 0; } // 校验不通过时返回错误 if ($uploadOk == 0) { echo "抱歉,您的文件上传失败"; // 所有校验通过后执行上传 } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { echo "文件 ". htmlspecialchars($origin_filename). " 已上传,新文件名为:" . htmlspecialchars($new_filename); } else { echo "对不起,文件上传过程中出现错误"; } } ?>
关键改动说明
- 新增了first_name字段非空校验,避免用户未填写该字段直接提交生成无效文件名
- 新增了first_name特殊字符过滤逻辑,移除文件名不允许的特殊字符,避免文件写入失败
- 替换了原有目标文件名生成规则,按照需求拼接
[first_name取值]_invoice.原扩展名作为新文件名 - 同步优化了上传成功后的提示,会显示新生成的文件名,方便核对
注意:请提前在upload.php同级目录创建
uploads文件夹,并给该文件夹配置读写权限,否则会出现上传失败的问题。
内容的提问来源于stack exchange,提问作者Ashman
相关产品推荐
相关产品推荐

