2015-12-08 14 views
0

我有一个WordPress网站,用户可以下载一个或多个PDF文件。到目前为止,我只是编码而不使用任何WordPress的功能,并在我的电脑上有文件。但在将来,我希望能够使用高级自定义字段(或类似的东西)来添加文件,这意味着我不会将文件放在文件夹中,而必须使用URL。至少我觉得呢? 而当我使用相同的代码,但与URL(见下文),它不起作用。使用ZipArhive作为网址的Zip文件

那么如何使用ZipArchive从URL创建一个zip文件?

<?php 
    if(isset($_POST['createzip'])) 
    { 
     $files = $_POST['files']; 
     $zipname = time().".zip"; // Zip name 
     $zip = new ZipArchive(); // Load zip library 
     $zip->open($zipname, ZipArchive::CREATE); 
     foreach ($files as $file) { 
      $zip->addFile($file); 
     } 
     $zip->close(); 
    // push to download the zip 
     header('Content-Type: application/zip'); 
     header('Content-disposition: attachment; filename='.$zipname); 
     header('Content-Length: ' . filesize($zipname)); 
     readfile($zipname); 
    } 
?> 

<h1> hej här kan du zippa lite filer</h1> 

<form name="zips" method="post"> 
    <input type="checkbox" name="files" value="http://www.unstraight.org/wp-content/uploads/2015/08/seger3.jpg"> 
    <p>Seger</p> 
    <input type="checkbox" name="files" value="http://www.unstraight.org/wp-content/uploads/dlm_uploads/2015/12/Ovningar-medelsvara.pdf"> 
    <p>Övningar </p> 
    <input type="checkbox" name="files" value="http://www.unstraight.org/wp-content/uploads/2015/07/User-Agreement-.pdf"> 
    <p>Medlemskort </p> 
    <input type="checkbox" name="files[]" value="men.pdf"> 
    <p>Män och Jämställdhet </p> 
    <input type="submit" name="createzip" value="Download as ZIP"> 
</form> 

回答

0

您可以从URL中检索文档,然后使用ZipArchive::addFromString

文档:http://php.net/manual/en/ziparchive.addfromstring.php

的代码可能是这个样子:

foreach ($files as $file) { 
    if(preg_match('/^https?\:/', $file)) { 

     // Looks like a URL 

     // Generate a file name for including in the zip 
     $url_components = explode('/', $file); 
     $file_name = array_pop($url_components); 

     // Make sure we only have safe characters in the filename 
     $file_name = preg_replace('/[^A-z0-9_\.-]/', '', $file_name); 

     // If all else fails, default to a random filename 
     if(empty($file_name)) $file_name = time() . rand(10000, 99999); 

     // Make sure we have a .pdf extension 
     if(!preg_match('/\.pdf$/', $file_name)) $file_name .= '.pdf'; 

     // Download file 
     $ch = curl_init($file); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
     $file_content = curl_exec($ch); 
     curl_close($ch); 

     // Add to zip 
     $zip->addFromString($file_name, $file_content); 

    } else { 

     // Looks like a local file 
     $zip->addFile($file); 

    } 
}