我正面临一个关键要求。在这里,我必须从提供的 .zip 文件中获取二进制格式的数据。我需要以二进制格式获取 .zip 文件中的数据,以将它们放入变量中。我真的不确定,这是否可以在 php 中完成?
问问题
1342 次
1 回答
1
您将使用 zip php 扩展名。在某些版本的 php 中,它包含在核心中。查看 PHP 手册以获取更多详细信息。zip_open 函数返回资源处理程序。使用 zip_read 您可以读取 zip 上的文件并使用 zip_close 销毁资源处理程序。
这些函数取自 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
于 2013-11-08T13:48:15.740 回答