1
votes

I am trying to create a zip file and download it by PHP script using ZipArchive library.

$post['files'] This variable contains URL of the images which are hosted on Amazon S3 so first I am downloading them to my server, creating zip file and download them.

My current code is working fine with the chrome also i tested on Safari and Opera, its working fine but when I am trying to do the same thing with Mozilla Firefox, its now working.

Please have a look at my php script

       &lt?php 
       if(isset($_POST['createZip'])){
        $post = $_POST;   
        $file_folder = "ZipFIle"; // folder to load files
        //downloading on my server
            foreach($post['files'] as $file){
            $ch = curl_init($file);
            $fp = fopen($file_folder.basename($file), 'wb');
            curl_setopt($ch, CURLOPT_FILE, $fp);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_exec($ch);
            curl_close($ch);
            fclose($fp); 
        }
      if(extension_loaded('zip')){  // Checking ZIP extension is available
        if(isset($post['files']) and count($post['files']) > 0){  
         // Checking files are selected
          $zip = new ZipArchive();      // Load zip library 
          $zip_name = "ZipFIle.zip";      // Zip name
          if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE){  
          // Opening zip file to load files
            $error .=  "Sorry ZIP creation failed at this time";
          }
          $dir = new DirectoryIterator("ZipFIle"); 
          foreach ($dir as $fileinfo) {
            if (!$fileinfo->isDot()) {
                //var_dump($fileinfo->getFilename());
                $imgfile = $fileinfo->getFilename();
                foreach($post['files'] as $file){
                  if ( basename($file) ==  $imgfile) {
                    //get file and add it to zip
                    $zip->addFile($file_folder.$imgfile);// Adding files into zip
                  }
                }//foreach($post['files'] as $file)
              }//if
          }        
          $zip->close();
          if(file_exists($zip_name)){
            //echo $zip_name ;
            // push to download the zip
            header('Content-type: application/zip');
            header('Content-Disposition: attachment; filename="'.$zip_name.'"');
            readfile($zip_name);
            // remove zip file is exists in temp path
            unlink($zip_name);
            foreach ($dir as $fileInfo) {
                if(!$fileInfo->isDot()) {
                    //delete all files after creating zip
                    unlink($fileInfo->getPathname());
                }
            }//foreach for delete
          }else{echo "no zip";}
        }else
          $error .= "Please select file to zip";
      }else
        $error .= "You dont have ZIP extension";
    }
    ?&gt

I am getting these warnings when I am trying to execute my code

Warning: fopen(ZipFIle/) [function.fopen]: failed to open stream: Is a directory in /home/my-server/download.php on line 9

Warning: curl_setopt(): supplied argument is not a valid File-Handle resource in /home/my-server/download.php on line 10

Warning: fclose(): supplied argument is not a valid stream resource in /home/my-server/download.php on line 14

Warning: Cannot modify header information - headers already sent by (output started at /home/my-server/download.php:9) in /home/my-server/download.php on line 44

Warning: Cannot modify header information - headers already sent by (output started at /home/my-server/download.php:9) in /home/my-server/download.php on line 45

Kindly, guide!

1
These messages are all server warnings. The browser is not relevant. Actually, there's only one error here, and all the other messages follow from that. The messages are clear enough so why don't you fix that problem and come back if you're still having difficulties?user1864610
@HoboSapiens thanks i just hided the errors and it worked.Joomler
So you didn't actually fix the problem, you just hid it. Remind me not to use any of your software.user1864610
@HoboSapiens these are just warnings and i have to fix the code asap. thats why i just hided them because its already working on the other browsers ;)Joomler
@HoboSapiens i have fixed all the warnings and now you can use my software if you want :)Joomler

1 Answers

0
votes

These messages are all server warnings. The browser is not relevant.