使用tc-lib-barcode生成二维码仅输出数据库最后一条记录求助
问题根因
代码核心问题为文件名重复导致的文件覆盖:
time()函数返回精度为秒的时间戳,while循环执行3次的总耗时远小于1秒,三次生成的文件名完全相同- 后续生成的二维码文件直接覆盖前序同名文件,最终目录内仅保留最后一条记录对应的二维码,前端输出的3张图片实际指向同一文件,因此扫描结果均为最后一条链接。
修复方案
修改文件名生成逻辑,保证每个二维码文件名唯一即可,可任选以下两种方案:
方案1:拼接自增序号
在循环外定义自增变量,拼接到文件名中:
// 在while循环前新增自增变量定义 $file_index = 0; while($row = $result->fetch_assoc()) { // 原有其他逻辑保持不变 $timestamp = time(); // 拼接序号生成唯一文件名 $file_name = $timestamp . '_' . $file_index . '.png'; file_put_contents($dir . $file_name, $imageData); echo '<img src="'.$dir . $file_name.'" width="200px" height="200px">'; $file_index++; }
方案2:使用唯一ID生成函数
直接调用PHP内置的uniqid()生成唯一文件名,无需额外维护变量:
// 替换原有文件名相关逻辑 $file_name = uniqid() . '.png'; file_put_contents($dir . $file_name, $imageData); echo '<img src="'.$dir . $file_name.'" width="200px" height="200px">';
可选优化
以下逻辑无需在循环内重复执行,可移到while循环外部减少性能开销:
- 目录存在性判断及创建逻辑,仅需执行一次即可
内容的提问来源于stack exchange,提问作者code
相关产品推荐
相关产品推荐

