从php中的zip文件转换为二进制数据

时间:2013-11-08 13:35:24

标签: php zip binary-data data-conversion

我正面临一个关键要求。在这里,我必须从提供的.zip文件中获取二进制格式的数据。我需要以二进制格式获取.zip文件中的数据,以将这些数据放入变量中。 我真的不确定,如果可以在php中完成这项工作吗?

1 个答案:

答案 0 :(得分:1)

你会使用zip php扩展。在某些版本的PHP中,它包含在核心中。 有关详细信息,请查看PHP手册。 zip_open函数返回资源处理程序。使用zip_read,您可以使用zip和zip_close destroy资源处理程序读取文件。

这些功能取自php手册(感谢iki dot fi的bisqwit)。如果由于任何原因没有php扩展而无法安装,你可以使用它们。

<?php
function ShellFix($s)
{
  return "'".str_replace("'", "'\''", $s)."'";
}
function zip_open($s)
{
  $fp = @fopen($s, 'rb');
  if(!$fp) return false;

  $lines = Array();
  $cmd = 'unzip -v '.shellfix($s);
  exec($cmd, $lines);

  $contents = Array();
  $ok=false;
  foreach($lines as $line)  
  {
    if($line[0]=='-') { $ok=!$ok; continue; }
    if(!$ok) continue;

    $length = (int)$line;
    $fn = trim(substr($line,58));

    $contents[] = Array('name' => $fn, 'length' => $length);
  }

  return
    Array('fp'       => $fp,  
          'name'     => $s,
          'contents' => $contents,
          'pointer'  => -1);
}                           
function zip_read(&$fp)
{
  if(!$fp) return false; 

  $next = $fp['pointer'] + 1;
  if($next >= count($fp['contents'])) return false;

  $fp['pointer'] = $next;
  return $fp['contents'][$next];
}
function zip_entry_name(&$res)
{
  if(!$res) return false;
  return $res['name'];
}                           
function zip_entry_filesize(&$res)
{
  if(!$res) return false;
  return $res['length'];
}
function zip_entry_open(&$fp, &$res)
{
  if(!$res) return false;
  $cmd = 'unzip -p '.shellfix($fp['name']).' '.shellfix($res['name']);

  $res['fp'] = popen($cmd, 'r');
  return !!$res['fp'];   
}
function zip_entry_read(&$res, $nbytes)
{
  return fread($res['fp'], $nbytes);
}
function zip_entry_close(&$res)
{
  fclose($res['fp']);
  unset($res['fp']);
}
function zip_close(&$fp)
{
  fclose($fp['fp']);
}

我得到了你的意思,是的,这是完全可能的。您可以将解压缩的文件放在文件系统上,并使用file_get_content读取并存储它。例如,如果您要使文件可供下载,请发送变量内容并设置适当的标题。但这不是必要的,因为zip_entry_read你有文件内容,格式无关紧要。

此链接可能会有所帮助...... convert-binary-data-using-php