2010-09-16 6 views
3

У меня есть почтовый файл. Мне нужен простой способ прочитать имя файла из zip и прочитать содержимое одного из файлов.Php Zip манипуляция

Можно ли это сделать непосредственно в памяти без сохранения, открытия и чтения файлов?

ответ

3

Вам нужно открыть архив, а затем может перебрать файлы по индексу:

$zip = new ZipArchive(); 
if ($zip->open('archive.zip')) 
{ 
    for($i = 0; $i < $zip->numFiles; $i++) 
    { 
      echo 'Filename: ' . $zip->getNameIndex($i) . '<br />'; 
    } 
} 
else 
{ 
    echo 'Error reading .zip!'; 
} 

Чтобы прочитать содержимое одного файла, вы можете использовать ZipArchive::getStream($name).

$zip = new ZipArchive(); 
$zip->open("archive.zip"); 
$fstream = $zip->getStream("index.txt"); 
if(!$fp) exit("failed\n"); 

while (!feof($fp)) { 
    $contents .= fread($fp, 2); 
} 

Другой способ сделать это непосредственно использует почтовый индекс: // поток обертку:

$file = fopen('zip://' . dirname(__FILE__) . '/test.zip#test', 'r'); 
... 
+0

И как я прочитал содержимое одного из файлов? – danidacar

+1

Для доступа только для чтения вам понадобится http://www.php.net/manual/en/function.ziparchive-getstream.php, иначе вам придется извлечь его сначала – Fanis

+0

Извините, как-то неправильно понял ваш вопрос - исправлено ответ. – halfdan

Смежные вопросы