2015-10-30 90 views
0

我對PHP很陌生,我只是製作了我的第一個腳本,該腳本工作正常,但缺少最終的觸摸。 腳本將包含php的文件夾中的所有文件壓縮並創建可下載的壓縮文件。 下面的代碼將文件壓縮到一個文件夾中並給出存檔文件夾的名稱

<?php 

$zipname = 'test.zip'; 
$zip = new ZipArchive; 
$zip->open('D://mypath//zip//$zipname', ZipArchive::CREATE); 
if ($dir_handle = opendir('./')) { 
    while (false !== ($entry = readdir($dir_handle))) { 
    if ($entry != "." && $entry != ".." && !strstr($entry,'.php') && !strstr($entry,'.zip')) { 
     $zip->addFile($entry); 
    } 
    } 
    closedir($dir_handle); 
} 
else { 
    die('file not found'); 
} 

$zip->close(); 

header('Content-Type: application/zip'); 
header("Content-Disposition: attachment; filename=$zipname"); 
header('Content-Length: ' . filesize($zipname)); 
header("Location: $zipname"); 

?> 

我想達成什麼是有$ zipname =「的folder.zip的名字」 所以,如果PHP是內部「/ mypath中/ blablabla /」我希望我的zip $ zipname成爲「blablabla.zip」

任何幫助將不勝感激!

編輯: 這裏的工作代碼:

<?php 
$zipname = getcwd(); 
$zipname = substr($zipname,strrpos($zipname,'\\')+1); 
$zipname = $zipname.'.zip'; 
$zip = new ZipArchive; 
$zip->open('D:/inetpub/webs/mydomaincom/zip/'.basename($zipname).'', ZipArchive::CREATE); 
if ($dir_handle = opendir('./')) { 
    while (false !== ($entry = readdir($dir_handle))) { 
if ($entry != "." && $entry != ".." && !strstr($entry,'.php')) { 
    $zip->addFile($entry); 
} 
} 
closedir($dir_handle); 
} 
else { 
die('file not found'); 
} 

$zip->close(); 

header('Content-Type: application/zip'); 
header('Content-Disposition: attachment; filename="'.basename($zipname).'"'); 
header('Content-Length: ' . filesize($zipname)); 
header('Location: /zip/'.$zipname); 
?> 
+0

你找不到一個函數來獲取路徑? –

回答

0

你可以使用GETCWD():

http://php.net/manual/fr/function.getcwd.php

$zipname = getcwd(); 

這將返回當前文件夾的路徑,然後您只需散列結果即可獲得文件夾的名稱:

// We remove all the uneeded part of the path 
$zipname = substr($zipname,strrpos($zipname,'\\')+1); 

//Then we add .zip to the result : 
$zipname = $zipname.'.zip'; 

這應該可以做到。

如果你也想使用父文件夾的名稱:

$zipname = getcwd(); 

// We remove the uneeded part of the path 
$parentFolderPath = substr($zipname, 0,strrpos($zipname,'\\')); 
$parentFolder = substr($parentFolderPath, strrpos($parentFolderPath,'\\')+1); 

//Keep current folder name 
$currentFolder = substr($zipname,strrpos($zipname,'\\')+1); 

//Join both 
$zipname = $parentFolder.'_'.$currentFolder; 

//Then we add .zip to the result : 
$zipname = $zipname.'.zip'; 
+0

它實際上做了詭計! – brunogermain

+0

沒有問題,不要忘記把你的問題解決:) – Nirnae

+0

其實它還沒有解決。我無法正確下載文件(下載的檔案爲空,但我可以看到檔案正在服務器上正確創建)。我認爲這是因爲檔案被保存到一個不同的目錄,我不是很好的頭文件... – brunogermain

0

而是與header()重定向的,你可以使用readfile()

header('Content-Disposition: attachment; filename="'.basename($zipname).'"'); 
readfile($zipname); 

隨着basename()只有最後一部分是向用戶顯示,並且與readfile()一樣,您正在發放實際文件,無論它在哪裏。

+0

readfile($ zipname)指向我使用正確的名稱下載一個空存檔。請注意,zip壓縮文件不是在我壓縮的同一文件夾中創建的,它實際上位於/ zip /文件夾中。我如何指出這一點? – brunogermain

相關問題