如何为上传的签名文件名追加PHP唯一变量以确保唯一性
给签名文件名追加唯一ID的实现方案
要给文件名追加唯一ID$id确保唯一性,只需修改文件名的构造逻辑,同时注意对$id做安全过滤避免路径遍历风险,具体实现如下:
核心修改点
- 将固定文件名替换为包含
$id的动态文件名,把$id插入到文件名主体与扩展名之间 - 对
$_GET['id']做安全处理,过滤可能导致路径注入的特殊字符
修改后的完整代码
<?php // 过滤ID中的非法字符,仅保留字母、数字和下划线,防范路径遍历风险 $id = preg_replace('/[^a-zA-Z0-9_]/', '', $_GET['id']); $signature = $_POST['signature']; $signature = str_replace('data:image/png;base64,', '', $signature); $signature = str_replace(' ', '+', $signature); // 构造带唯一ID的文件名 $file = "uploads/uploaded_signature_{$id}.png"; $success = file_put_contents($file, base64_decode($signature)); print $success ? $file : 'problem saving.'; ?>
额外说明
- 若你实际生成的是JPEG文件,需同步修改两处:将扩展名从
.png改为.jpg,同时把str_replace中的data:image/png;base64,替换为data:image/jpeg;base64, - 安全过滤步骤不可省略:如果
$id来自用户输入,直接拼接可能被利用发起路径遍历攻击,过滤后可规避此类风险 - 确保
uploads目录存在且具备写入权限,否则file_put_contents会执行失败
内容的提问来源于stack exchange,提问作者Adam taylor
相关产品推荐
相关产品推荐

