2016-09-28 58 views
-1

我需要能夠做到這一點。 從帶複選框的表單中選擇多個圖像或單個圖像,然後通過PHP將其下載爲Zip文件。 以這種方式,它允許用戶選擇他需要或不需要的圖像。複選框形式:選擇文件,通過PHP下載Zip和下載

這裏是我的代碼:

<form name="zips" action="download.php" method=POST> 
          <ul> 

           <li> 
            <input type="checkbox" class="chk" name="items[0]" id="img0" value="2015-Above-it-All"/> 
            <p>Above It All</p> 
           </li> 
           <li> 
            <input type="checkbox" class="chk" name="items[1]" id="img1" value="2015-Crocodile"/> 
            <p>Crocodile</p> 
           </li> 
           <li> 
            <input type="checkbox" class="chk" name="items[2]" id="img2" value="2015-Dandelion"/> 
            <p>Dandelion</p> 
           </li> 
           <li> 
            <input type="checkbox" class="chk" name="items[3]" id="img3" value="2015-Dearest-Sister"/> 
            <p>Dearest Sister</p> 

           </li> 

           <div style="text-align:center;" > 
           <input type="submit" id="submit" name="createzip" value="DOWNLOAD" class="subbutton-images" > 
          </div> 

         </form> 

然後PHP代碼:

 <?php 
    // common vars 
    $file_path = $_SERVER['DOCUMENT_ROOT']."/img/press/"; 

    if(count($_POST['file']) > 1){ 
    //more than one file - zip together then download 
$zipname = 'Forms-'.date(strtotime("now")).'.zip'; 
$zip = new ZipArchive(); 
if ($zip->open($zipname, ZIPARCHIVE::CREATE)!==TRUE) { 
exit("cannot open <$zipname>\n"); 
} 
foreach ($_POST['items'] as $key => $val) { 
$files = $val . '.jpg'; 
$zip->addFile($file_path.$files,$files); 
} 
$zip->close(); 
//zip headers 
if (headers_sent()) { 
echo 'HTTP header already sent'; 
} else { 
if (!is_file($zipname)) { 
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found'); 
echo 'File not found'; 
} else if (!is_readable($zipname)) { 
header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden'); 
echo 'File not readable'; 
} else { 
header($_SERVER['SERVER_PROTOCOL'].' 200 OK'); 
header("Content-Type: application/zip"); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-Length: ".filesize($zipname)); 
header("Content-Disposition: attachment; filename=\"".basename($zipname)."\""); 
header("Pragma: no-cache"); 
header("Expires: 0"); 
readfile($zipname); 
exit; 
} 
} 
} elseif(count($_POST['items']) == 1) { 
//only one file selected 
foreach ($_POST['items'] as $key => $val) { 
$singlename = $val . '.jpg'; 
} 
$pdfname = $file_path. $singlename; 
    //header("Content-type:application/pdf"); 
    header("Content-type: application/octet-stream");      
    header("Content-Disposition:inline;filename='".basename($pdfname)."'");    
    header('Content-Length: ' . filesize($pdfname)); 
    header("Cache-control: private"); //use this to open files directly      
    readfile($pdfname); 
} else { 

    echo 'no documents were selected. Please go back and select one or more documents'; 
} 
?> 

目前這個劇本讓我從表單下載一個單一的形象,但只要有2個圖像並且該腳本試圖壓縮文件,然後提供下載不再工作。

任何想法對你們來說都會很不錯,因爲我現在對scfript有點困惑嗎?

+0

的[下載多個文件,在PHP的zip]可能的複製(http://stackoverflow.com/問題/ 1754352 /下載多個文件作爲zip中的php) –

回答

1

所以下面是正確的PHP腳本爲我工作: :))

<?php 
// common vars 
$file_path = $_SERVER['DOCUMENT_ROOT']."/img/press/"; 

if(count($_POST['items']) > 1){ 
//more than one file - zip together then download 
$zipname = 'Forms-'.date(strtotime("now")).'.zip'; 
$zip = new ZipArchive(); 
if ($zip->open($zipname, ZIPARCHIVE::CREATE)!==TRUE) { 
exit("cannot open <$zipname>\n"); 
} 
foreach ($_POST['items'] as $key => $val) { 
$files = $val . '.jpg'; 
$zip->addFile($file_path.$files,$files); 
} 
$zip->close(); 


//zip headers 
if (headers_sent()) { 
echo 'HTTP header already sent'; 
} else { 
if (!is_file($zipname)) { 
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found'); 
echo 'File not found'; 
} else if (!is_readable($zipname)) { 
header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden'); 
echo 'File not readable'; 
} else { 

header('Content-type: application/zip'); 
header('Content-Disposition: attachment; filename='.$zipname); 
header('Pragma: no-cache'); 
header('Expires: 0'); 
readfile($zipname); 
flush(); 
if (readfile($zipname)) 
{ 
    unlink($zipname); 
} 
//unlink($zipname); 

exit; 
} 
} 
} elseif(count($_POST['items']) == 1) { 
//only one file selected 
foreach ($_POST['items'] as $key => $val) { 
$singlename = $val . '.jpg'; 
} 
$pdfname = $file_path. $singlename; 
//header("Content-type:application/pdf"); 
header("Content-type: application/octet-stream");      
header("Content-   Disposition:inline;filename='".basename($pdfname)."'");    
header('Content-Length: ' . filesize($pdfname)); 
header("Cache-control: private"); //use this to open files directly      
readfile($pdfname); 
} else { 

    echo 'no documents were selected. Please go back and select one or more documents'; 
} 
?> 
0
 ***<?php 
// common vars 
$file_path = $_SERVER['DOCUMENT_ROOT']."/img/press/"; 
if(count($_POST['items']) > 1){ 
//more than one file - zip together then download 
$zipname = 'Forms-'.date(strtotime("now")).'.zip'; 
$zip = new ZipArchive(); 
if ($zip->open($zipname, ZIPARCHIVE::CREATE)!==TRUE) { 
exit("cannot open <$zipname>\n"); 
} 
foreach ($_POST['items'] as $key => $val) { 
$files = $val . '.jpg'; 
$zip->addFile($file_path.$files,$files); 
} 
$zip->close(); 
//zip headers 
if (headers_sent()) { 
echo 'HTTP header already sent'; 
} else { 
if (!is_file($zipname)) { 
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found'); 
echo 'File not found'; 
} else if (!is_readable($zipname)) { 
header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden'); 
echo 'File not readable'; 
} else { 
header('Content-type: application/zip'); 
header('Content-Disposition: attachment; filename='.$zipname); 
header('Pragma: no-cache'); 
header('Expires: 0'); 
readfile($zipname); 
flush(); 
if (readfile($zipname)) 
{ 
    unlink($zipname); 
} 
//unlink($zipname); 
exit; 
} 
} 
} elseif(count($_POST['items']) == 1) { 
//only one file selected 
foreach ($_POST['items'] as $key => $val) { 
$singlename = $val . '.jpg'; 
} 
$pdfname = $file_path. $singlename; 
//header("Content-type:application/pdf"); 
header("Content-type: application/octet-stream");      
header("Content-   Disposition:inline;filename='".basename($pdfname)."'");    
header('Content-Length: ' . filesize($pdfname)); 
header("Cache-control: private"); //use this to open files directly      
readfile($pdfname); 
} else { 
    echo 'No Document were selected .Please Go back and Select Document again'; 
} 
?>*** 
+1

雖然這段代碼片段是受歡迎的,並可能提供一些幫助,它會[[如果包括一個解釋大大改善](//meta.stackexchange .com/q/114762)*如何解決這個問題。沒有這些,你的答案就沒有什麼教育價值了 - 記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 –