2011-06-09 158 views
1

餵我usign下面的代碼來壓縮在上傳包:PHP壓縮功能問題

$nameFile = $_FILES['file']['name']; 
$tmpName = $_FILES['file']['tmp_name']; 
$download_folder = './CopyrightFiles/'; 

$zip = new ZipArchive(); 
$fileconpress = $download_folder.$nameFile.".zip"; 

$conpress = $zip->open($fileconpress, ZIPARCHIVE::CREATE); 
if ($conpress === true) 
{ 

    $zip->addFile($tmpName); 
    $zip->close(); 
    echo $fileconpress."<br/>"; 
    echo "yess !! Success!!!! "; 
} 
else echo " Oh No! Error"; 

看來工作正常。

但是有兩個問題。

第一個問題是保存文件也與原來的擴展,是這樣的:image.JPG.zip

而且當我再zip包移動到我的本地計算機(Mac),然後我打開ZIP裏面我只能找到一個tmp文件夾裏面的二進制文件,而不是應該在那裏的圖像或文件!

這到底是怎麼回事?

請告知

謝謝

回答

1

那是因爲你的「二進制」文件僅僅是PHP用於臨時存儲上載的文件作爲臨時的名稱。這就是爲什麼它是$ _FILES數組中的「tmp_name」。

試試這個:

$zip->addFile($tmpName, $nameFile); 

第二個參數,可以指定該文件的名稱應該是拉鍊內的東西。

爲了防止 'file.jpg.zip',請嘗試:

$fileconpress = $download_folder . pathinfo($_FILES['file']['name'], PATHINFO_FILENAME) . ".zip"; 
+0

謝謝!有沒有辦法給ZIP包一個自定義名稱?我真的需要這個選項! – 2011-06-09 22:08:37

+0

自定義名稱?它保存的文件名是,你的意思是?這是您在' - > open()'調用中指定的$ conpress。 – 2011-06-10 01:27:29

1

問題#1:
您需要手動刪除擴展:

$filename = explode('.', $_FILES['file']['name']); 
$filename = $filename[0]; 


問題#2:
$ tmpName不包含文件的文件名。您需要在addFile()中傳遞$ localname參數。請參閱http://php.net/manual/en/function.ziparchive-addfile.php

+0

謝謝!有沒有辦法給ZIP包一個自定義名稱?我真的需要這個選項! – 2011-06-09 22:08:43