You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中fclose向文件末尾写入0x31/0x30/0x33字节问题求助

问题原因分析及解决方案

看起来你遇到的这个额外字节问题,大概率是PHP脚本的输出被意外重定向到目标文件导致的,而非fclose()本身的问题。

具体来说:

  • 你的PHP代码里可能存在类似echo fwrite($fp, $binary_data);的写法——fwrite()会返回成功写入的字节数,如果这个数字刚好是103,那echo就会输出字符串"103",对应的十六进制就是0x31 0x30 0x33。
  • 如果你是通过命令行运行脚本,并且用了重定向(比如php your_script.php > output.bin),那这个echo的输出就会追加到目标文件末尾,看起来像是fclose()写入的。
  • 而Ruby代码里你没有做类似的输出操作,所以不会出现这个问题。

解决方案:

  1. 检查代码,移除所有不必要的echo或print语句,尤其是那些输出fwrite()返回值的代码。比如把:
    echo fwrite($fp, $binary_content);
    
    改成:
    fwrite($fp, $binary_content);
    
  2. 如果你需要验证写入的字节数,可以把输出定向到标准错误,而不是标准输出:
    $bytes_written = fwrite($fp, $binary_content);
    fwrite(STDERR, "Successfully written $bytes_written bytes\n");
    
  3. 另外,确保你在PHP中正确地将十六进制字符串转换为二进制字节:
    推荐直接使用hex2bin()函数,避免手动str_split处理(容易出错):
    $hex_str = '1f8b08082907ac5a0400425231335f543133343535395f52494345433135305f343432373800cd96596e83301086df2bf50e39823dbb5f5ba552a4b66996deff2a1d0cc16c7d098b1809bc8d07cfa77f00c1b76bc47b44624ea136668d260ad1fb82d54c8c163082890fd5e4d0b17a0bd50d42b...';
    $binary_data = hex2bin($hex_str);
    $fp = fopen('output.bin', 'wb');
    fwrite($fp, $binary_data);
    fclose($fp);
    

额外检查点:

  • 确认你的十六进制字符串长度是偶数,hex2bin()会在字符串长度为奇数时抛出警告,可能导致部分数据丢失。
  • 确保打开文件时使用'wb'模式(二进制写入),避免系统自动转换换行符导致的意外问题。

内容的提问来源于stack exchange,提问作者vinicius gati

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:51:25