2016-09-28 1 views
-1

Мне нужно это сделать. Из формы с флажком пользователь выбирает несколько изображений или одиночных изображений, а затем загружает их через PHP в виде Zip-файла. Таким образом, он позволяет пользователю выбирать изображения, которые ему нужны, или нет.Форма ящика: выберите файлы, ZIP и Загрузить через PHP

Вот мой код:

<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 изображения и что скрипт пытается ZIP-файлы, а затем предлагает загрузить его больше не работает.

Любые идеи были бы хороши для вас, ребята, поскольку я немного застрял в scfript на данный момент?

+0

Возможная Дубликат [несколько файлов загрузки, как молния в PHP] (http://stackoverflow.com/ Вопросы/1754352/download-multiple-files-as-zip-in-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) из ​​* как * он решает вопрос. Без этого ваш ответ имеет гораздо меньшую образовательную ценность - помните, что вы отвечаете на вопрос читателей в будущем, а не только на человека, который спрашивает сейчас! Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение, и укажите, какие ограничения и допущения применяются. –

Смежные вопросы