2013-04-30 59 views
1

我需要處理壓縮文件的內容,但我無法更改託管我的程序的服務器上的權限。解壓縮到變量

這意味着我無法將zip文件下載到服務器,因此我需要將文件的內容讀取到變量中,而無需將其寫入文件系統。

我可以獲取這些變量的字符串內容並將解壓後的內容轉換爲新變量嗎?

到目前爲止,我已經研究過使用zip php擴展和pclzip庫,但都需要使用實際的文件。

這就是我想要的僞代碼來完成:

$contentsOfMyZipFile = ZipFileToString(); 
$myUnzippedContents = libUnzip($contentsOfMyZipFile); 

任何想法?

+0

有趣的函數名稱:) – hek2mgl 2013-04-30 19:35:30

+0

你可以寫輸出嗎?像'fopen('php:// output','w');'? – brbcoding 2013-04-30 19:42:03

回答

1

看看this的例子。

<?php 
$open = zip_open($file); 

if (is_numeric($open)) { 
    echo "Zip Open Error #: $open"; 
} else { 
while($zip = zip_read($open)) { 
    zip_entry_open($zip); 
    $text = zip_entry_read($zip , zip_entry_filesize($zip)); 
    zip_entry_close($zip); 
} 
print_r($text); 
?> 
+0

謝謝,但我需要$文件...我的問題是我無法在文件系統中寫入。原始的zippend文件位於不同的SFTP服務器上。我能夠將它的內容變成一個變量,但是,我無法寫入文件系統...... – 2013-04-30 20:05:29

+0

是的,你需要'string $ filename'。我不確定這是否可能。看看[這裏](http://stackoverflow.com/questions/7391969/in-memory-download-and-extract-zip-archive)。你可能想問你的服務器管理員的權限,或使用除了PHP以外的語言。 – George 2013-04-30 20:13:11

0

我在項目中使用這樣的:

function unzip_file($data) { 
    //save in tmp zip data 
    $zipname = "/tmp/file_xxx.zip"; 

    $handle = fopen($zipname, "w"); 
    fwrite($handle, $data); 
    fclose($handle); 

    //then open and read it. 
    $open = zip_open($zipname); 

    if (is_numeric($open)) { 
     echo "Zip Open Error #: $open"; 
    } else { 
     while ($zip = zip_read($open)) { 
      zip_entry_open($zip); 
      $text = zip_entry_read($zip, zip_entry_filesize($zip)); 
      zip_entry_close($zip); 
     } 
    } 
    /*delete tmp file and return variable with data(in this case plaintext)*/ 
    unlink($zipname); 
    return $text; 
} 

我希望它可以幫助你。

+0

這並沒有真正的幫助,因爲OP注意到他不能將數據寫入文件系統 – 2018-01-18 14:40:14