PHP eval计算快门速度报错,需导出MySQL数据至JSON供ExifTool使用
问题解决:快门速度转换的PHP语法错误及优化方案
错误原因分析
你的代码逻辑完全搞反,且使用eval既不安全又极易引发语法错误:
- 原代码中,遇到分数格式的快门速度(如
1/125)时直接赋值,反而对非分数值执行eval,这和注释里“把1/125转为0.008”的需求完全相悖 eval执行时,若$myvalue包含不符合PHP语法的内容(比如数据库里存在格式异常的值),就会触发你遇到的“意外分号”这类语法错误
修复后的代码
直接通过字符串分割计算分数值,彻底抛弃不安全的eval:
while($row = mysqli_fetch_array($result_images)){ // 将1/125转换为0.008格式(若需逗号分隔可替换小数点) $myvalue = $row[1]; if (strpos($myvalue, '/') !== false) { // 拆分分数的分子与分母 list($numerator, $denominator) = explode('/', $myvalue); // 计算小数并保留3位精度,匹配ExifTool需求 $exposure = number_format((int)$numerator / (int)$denominator, 3); // 若ExifTool要求用逗号作为小数分隔符,替换小数点 $exposure = str_replace('.', ',', $exposure); } else { // 非分数格式直接使用原值 $exposure = $myvalue; } // 后续将$exposure加入JSON数据数组 }
批量处理优化建议
- 处理50000条记录时,建议用
mysqli_fetch_all一次性获取所有数据再循环处理,比逐行读取数据库更高效 - 导出JSON时,用
json_encode批量转换数组,避免手动拼接JSON字符串导致格式错误
内容的提问来源于stack exchange,提问作者user14964979
相关产品推荐
相关产品推荐

