2012-05-20 65 views
0

我試圖通過從HTML表單發送的文件名的文件添加到一個zip。 的HTML代碼是Zip文件

<form action="act.php" method="POST"> 
<input type="checkbox" name="send1" value="filename1.extension"> 
<input type="checkbox" name="send1" value="filename2.extension"> 
</form> 

的PHP

我在兩個方面
方法一試:

$zipfilename="abcd.zip"; 
$zip= new ZipArchive(); 
$zip->open($zipfilename, ZipArchive::CREATE); 
foreach($_POST['send1'] as $filename) 
{ 
$zip->addFile($filename); 
} 
$zip->close(); 

方法2:

$zipfilename="abcd.zip"; 
$filestozip=array(); 
foreach($_POST['send1'] as $filename) 
{ 
$filestozip[]=$filename; 
} 

$zip= new ZipArchive(); 
$zip->open($zipfilename, ZipArchive::CREATE); 

foreach($filestozip as $filename2) 
{ 
$zip->addFile($filename2);} 
} 

$zip->close(); 

但zip文件沒有被創建。我嘗試使用$ filetozip的靜態代碼檢查Zip語法,因爲

$filestozip[0]="filename1.extension"; 
$filestozip[0]="filename1.extension"; 

它工作正常。但是當數據來自另一個HTML頁面時,它不起作用。我的代碼中有什麼錯誤?

+0

請正確縮進你的代碼 – meagar

+0

檢查你的idents,在方法2中這些似乎是一個錯誤}太多 –

+0

爲什麼會需要方法2? –

回答

0

發現問題。我的邏輯沒有問題。

$zip->addFile($filename); 

正如我前面所說的,$ filename變量的數據是從HTML接收的,其中任何空格被我故意替換爲%20。這種替換的原因是使用數據啓用到文件的鏈接。但是,如果空間被替換爲%20 zipArchive :: addFile()不會添加最終導致Zip創建失敗的zip文件。

0

您正在使用ZipArchive :: addFile($文件),它希望這些文件存在於服務器上的某個位置,或者如果使用支持的協議,則在另一臺服務器上的某處。

是那些文件存取/可讀你的腳本?這是你正在使用的完整路徑還是相對路徑?

,如果您使用的file_get_contents($文件名);它會輸出預期的數據嗎?

你總是應該使用addFile之前檢查file_exists()。

+0

這些文件存在於服務器中,顯然可以訪問。它也是相對的路徑。例如:addFile(directory1/directory2/filename.extension)。 –

+0

我只是使用以下語法測試它, 回聲「$ filestozip [0]」; –

+0

不輸出文件的*內容*,只是文件名。但是,如果你確定文件可以讀取並且存檔可以寫入就可以了。 –