私は重大な要件に直面しています。ここでは、提供された .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 に答える