读取 php 中的二进制文件记录


Read Binary file records in php

我用C编码创建了二进制文件。这是该二进制文件的结构。

struct emp
{
   int eid,eage;
   char name[20],city[20];
}record;

使用这个"C"结构,我创建了一个名为"table1.txt"的二进制文件

现在我想使用 php 在网页中显示文件的内容。我该怎么做?

<html>
<head>
<title>binary file</title></head>
<body style="background-color:yellow">
<?
$fp = fopen("table1.txt", "rb");
$read = fread($fp, 4); 
$n = unpack("i", $read);
$data1 = fread($fp, 8);
$nn = unpack("i",$data1);
echo $number[1]; 
?>
</body>
</html>

我已经使用了上面的代码。但我只能读取文件的第一个字段。我的第一个记录字段是员工 ID,其值为"0"。页面仅显示 0。

出于某种奇怪的原因,每个数据段不是预期的 48 字节,而是 52 字节。

$f = fopen('data.txt', 'rb');
while (!feof($f)) {
  // read one segment of 52 bytes
  if ($s = fread($f, 52)) {
    // unpack the binary structure into an associative array
    print_r(unpack('ieid/ieage/a20name/a20city', $s));
  }
}
fclose($f);

这是"C"结构。 结构总 { 字符日期[11]; 夏尔·阿克[128]; 字符类型[5]; 浮点 mvalue; 浮动网生; 浮动网; 字符统计[128]; 浮冷杉; 浮动ACB; };

这是使用 GCC 编译器编译时二进制文件的内容。

12/12/1995 d US 12.23 34.12 90.12 费用 12 56.12 01/01/1998 a US 52.23 54.12 10.12 费用 92 16.12 31/12/1999 a US 52.23 54.12 10.12 费用 92 16.12 31/12/1999 D US 12.23 34.12 90.12 费用 12 56.12 01/01/2000 A US 52.23 54.12 10.12 费用 92 16.12 01/01/2000 Z US 12.23 34.12 90.12 费用 12 56.12 31/12/2010 A US 52.23 54.12 10.12 费用 92 16.12 2010/12/31 d US 12.23 34.12 90.12 费用 12 56.12

这是PHP编码来读取上述二进制文件的内容。

echo "<table>";
while (!feof($f)) {
  if ($s = fread($f, 292)) {
        $nn = unpack('a11date/a128ac/a5type/fmvalue/fnetraw/fnetfer/a128stat/ffirr/facb', $s);
        echo "<td>" . $nn[date] ."</td>";
        echo "<td>" . $nn[ac] . "</td>";
        echo "<td>" . $nn[type] . "</td>";
        echo "<td>" . $nn[mvalue] . "</td>";
        echo "<td>" . $nn[netraw] . "</td>";
        echo "<td>" . $nn[netfer] . "</td>";
        echo "<td>" . $nn[stat] . "</td>";
        echo "<td>" . $nn[firr] . "</td>";
        echo "<td>" . $nn[acb] . "</td>";
        echo "</tr>";
 }
}
        echo "</table>";
fclose($f);
?>

这是我从上面的代码中得到的答案。我得到很多垃圾值是第二和第七个字段。以及如何设置浮点字段的精度。

1995/12/12 d ̧³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø;w·Ìª¹¿ô{·{·‹ây·Ð{·SpP·ip·¤dw·ew·€5w·ôOg· X«¹¿»qP·äSg us 12.229999542236 34.119998931885 90.120002746582 费用·5rP·#Ä äSg·rP·ô›Å #Ä 5rP·0#o· ̧xw·x«¹¿·ÅÿÿýŽäSg· ̧xw·ÆD¬¹¿L¬¹¿5rP·pòy·12 56.119998931885

1998/01/01 a ̧³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø;w·Ìª¹¿ô{·{·‹ây·Ð{·SpP·ip·¤dw·ew·€5w·ôOg· X«¹¿»qP·äSg us 52.229999542236 54.119998931885 10.119999885559 费用·5rP·#Ä äSg·rP·ô›Å #Ä 5rP·0#o· ̧xw·x«¹¿·ÅÿÿýŽäSg· ̧xw·ÆD¬¹¿L¬¹¿5rP·pòy·92 16.120000839233

1999/12/31 a ̧³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø;w·Ìª¹¿ô{·{·‹ây·Ð{·SpP·ip·¤dw·ew·€5w·ôOg· X«¹¿»qP·äSg us 52.229999542236 54.119998931885 10.119999885559 费用·5rP·#Ä äSg·rP·ô›Å #Ä 5rP·0#o· ̧xw·x«¹¿·ÅÿÿýŽäSg· ̧xw·ÆD¬¹¿L¬¹¿5rP·pòy·92 16.120000839233

1999/12/31 d ̧³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø;w·Ìª¹¿ô{·{·‹ây·Ð{·SpP·ip·¤dw·ew·€5w·ôOg· X«¹¿»qP·äSg us 12.229999542236 34.119998931885 90.120002746582 费用·5rP·#Ä äSg·rP·ô›Å #Ä 5rP·0#o· ̧xw·x«¹¿·ÅÿÿýŽäSg· ̧xw·ÆD¬¹¿L¬¹¿5rP·pòy·12 56.119998931885

2000/01/01 A ̧³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø;w·Ìª¹¿ô{·{·‹ây·Ð{·SpP·ip·¤dw·ew·€5w·ôOg· X«¹¿»qP·äSg us 52.229999542236 54.119998931885 10.119999885559 费用·5rP·#Ä äSg·rP·ô›Å #Ä 5rP·0#o· ̧xw·x«¹¿·ÅÿÿýŽäSg· ̧xw·ÆD¬¹¿L¬¹¿5rP·pòy·92 16.120000839233

2000/01/01 z ̧³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø;w·Ìª¹¿ô{·{·‹ây·Ð{·SpP·ip·¤dw·ew·€5w·ôOg· X«¹¿»qP·äSg us 12.229999542236 34.119998931885 90.120002746582 费用·5rP·#Ä äSg·rP·ô›Å #Ä 5rP·0#o· ̧xw·x«¹¿·ÅÿÿýŽäSg· ̧xw·ÆD¬¹¿L¬¹¿5rP·pòy·12 56.119998931885

2010/12/31 A ̧³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø;w·Ìª¹¿ô{·{·‹ây·Ð{·SpP·ip·¤dw·ew·€5w·ôOg· X«¹¿»qP·äSg us 52.229999542236 54.119998931885 10.119999885559 费用·5rP·#Ä äSg·rP·ô›Å #Ä 5rP·0#o· ̧xw·x«¹¿·ÅÿÿýŽäSg· ̧xw·ÆD¬¹¿L¬¹¿5rP·pòy·92 16.120000839233

2010/12/31 d ̧³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø;w·Ìª¹¿ô{·{·‹ây·Ð{·SpP·ip·¤dw·ew·€5w·ôOg· X«¹¿»qP·äSg us 12.229999542236 34.119998931885 90.120002746582 费用·5rP·#Ä äSg·rP·ô›Å #Ä 5rP·0#o· ̧xw·x«¹¿·ÅÿÿýŽäSg· ̧xw·ÆD¬¹¿L¬¹¿5rP·pòy·12 56.119998931885