php script to download a file from the internet and zip it.

Hello

I need to write a php script that would

- accept a URL (i.e. www.mahmutabi.com/1.mp3)

- download this file to a set location on the server it's running on

- turn the original file into a zip file that would reside in the same folder

- delete the original file.

how would I do that? the script is running on linux.. so I somehow need to instruct the script to run some system commands such as

wget http://www.mahmutabi.com/1.mp3 but I don't know how to do that :(
eggster34Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

AmigoJackCommented:
hmm... the most simple way would be to lookup www.php.net - so see this
http://www.php.net/manual/en/function.system.php
0
star_trekCommented:
try this, note the zip would created in the /tmp directory, you can create it in any directory you want but i chose tmp, also this would create a file with .tgz extension, any zip program can unzip it. Also make sure you have 'tar' program on linux.

In PHP 5

$file_name = "1.mp3";
file_put_contents("/tmp/$file_name",file_get_contents("http://www.mahmutabi.com/1.mp3"));
exec("tar cvzf /tmp/$file_name\.tgz /tmp/$file_name");
unlink("/tmp/$file_name");

In PHP <5 versions

$file_name = "1.mp3";
$file = fopen("/tmp/$file_name","w");
fwrite($file,file_get_contents("http://www.mahmutabi.com/1.mp3"));
fclose($file);
exec("tar cvzf /tmp/$file_name\.tgz /tmp/$file_name");
unlink("/tmp/$file_name");
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
missilesiloCommented:
This class dynamically creates a zip file.

The forceDownload method will let you download it.

PHP's "unlink" function should allow you to delete files that you have created with this.

<?php

/**
 * Class to dynamically create a zip file (archive)
 *
 * @author Rochak Chauhan
 */

class createZip  {  

      public $compressedData = array();
      public $centralDirectory = array(); // central directory  
      public $endOfCentralDirectory = "\x50\x4b\x05\x06\x00\x00\x00\x00"; //end of Central directory record
      public $oldOffset = 0;

      /**
       * Function to create the directory where the file(s) will be unzipped
       *
       * @param $directoryName string
       *
       */
      
      public function addDirectory($directoryName) {
            $directoryName = str_replace("\\", "/", $directoryName);  

            $feedArrayRow = "\x50\x4b\x03\x04";
            $feedArrayRow .= "\x0a\x00";    
            $feedArrayRow .= "\x00\x00";    
            $feedArrayRow .= "\x00\x00";    
            $feedArrayRow .= "\x00\x00\x00\x00";

            $feedArrayRow .= pack("V",0);
            $feedArrayRow .= pack("V",0);
            $feedArrayRow .= pack("V",0);
            $feedArrayRow .= pack("v", strlen($directoryName) );
            $feedArrayRow .= pack("v", 0 );
            $feedArrayRow .= $directoryName;  

            $feedArrayRow .= pack("V",0);
            $feedArrayRow .= pack("V",0);
            $feedArrayRow .= pack("V",0);

            $this -> compressedData[] = $feedArrayRow;
            
            $newOffset = strlen(implode("", $this->compressedData));

            $addCentralRecord = "\x50\x4b\x01\x02";
            $addCentralRecord .="\x00\x00";    
            $addCentralRecord .="\x0a\x00";    
            $addCentralRecord .="\x00\x00";    
            $addCentralRecord .="\x00\x00";    
            $addCentralRecord .="\x00\x00\x00\x00";
            $addCentralRecord .= pack("V",0);
            $addCentralRecord .= pack("V",0);
            $addCentralRecord .= pack("V",0);
            $addCentralRecord .= pack("v", strlen($directoryName) );
            $addCentralRecord .= pack("v", 0 );
            $addCentralRecord .= pack("v", 0 );
            $addCentralRecord .= pack("v", 0 );
            $addCentralRecord .= pack("v", 0 );
            $ext = "\x00\x00\x10\x00";
            $ext = "\xff\xff\xff\xff";  
            $addCentralRecord .= pack("V", 16 );

            $addCentralRecord .= pack("V", $this -> oldOffset );
            $this -> oldOffset = $newOffset;

            $addCentralRecord .= $directoryName;  

            $this -> centralDirectory[] = $addCentralRecord;  
      }       
      
      /**
       * Function to add file(s) to the specified directory in the archive
       *
       * @param $directoryName string
       *
       */
      
      public function addFile($data, $directoryName)   {
 
            $directoryName = str_replace("\\", "/", $directoryName);  
      
            $feedArrayRow = "\x50\x4b\x03\x04";
            $feedArrayRow .= "\x14\x00";    
            $feedArrayRow .= "\x00\x00";    
            $feedArrayRow .= "\x08\x00";    
            $feedArrayRow .= "\x00\x00\x00\x00";

            $uncompressedLength = strlen($data);  
            $compression = crc32($data);  
            $gzCompressedData = gzcompress($data);  
            $gzCompressedData = substr( substr($gzCompressedData, 0, strlen($gzCompressedData) - 4), 2);
            $compressedLength = strlen($gzCompressedData);  
            $feedArrayRow .= pack("V",$compression);
            $feedArrayRow .= pack("V",$compressedLength);
            $feedArrayRow .= pack("V",$uncompressedLength);
            $feedArrayRow .= pack("v", strlen($directoryName) );
            $feedArrayRow .= pack("v", 0 );
            $feedArrayRow .= $directoryName;  

            $feedArrayRow .= $gzCompressedData;  

            $feedArrayRow .= pack("V",$compression);
            $feedArrayRow .= pack("V",$compressedLength);
            $feedArrayRow .= pack("V",$uncompressedLength);

            $this -> compressedData[] = $feedArrayRow;

            $newOffset = strlen(implode("", $this->compressedData));

            $addCentralRecord = "\x50\x4b\x01\x02";
            $addCentralRecord .="\x00\x00";    
            $addCentralRecord .="\x14\x00";    
            $addCentralRecord .="\x00\x00";    
            $addCentralRecord .="\x08\x00";    
            $addCentralRecord .="\x00\x00\x00\x00";
            $addCentralRecord .= pack("V",$compression);
            $addCentralRecord .= pack("V",$compressedLength);
            $addCentralRecord .= pack("V",$uncompressedLength);
            $addCentralRecord .= pack("v", strlen($directoryName) );
            $addCentralRecord .= pack("v", 0 );
            $addCentralRecord .= pack("v", 0 );
            $addCentralRecord .= pack("v", 0 );
            $addCentralRecord .= pack("v", 0 );
            $addCentralRecord .= pack("V", 32 );

            $addCentralRecord .= pack("V", $this -> oldOffset );
            $this -> oldOffset = $newOffset;

            $addCentralRecord .= $directoryName;  

            $this -> centralDirectory[] = $addCentralRecord;  
      }

      /**
       * Fucntion to return the zip file
       *
       * @return zipfile (archive)
       */

      public function getZippedfile() {

            $data = implode("", $this -> compressedData);  
            $controlDirectory = implode("", $this -> centralDirectory);  

            return  
                  $data.  
                  $controlDirectory.  
                  $this -> endOfCentralDirectory.  
                  pack("v", sizeof($this -> centralDirectory)).    
                  pack("v", sizeof($this -> centralDirectory)).    
                  pack("V", strlen($controlDirectory)).            
                  pack("V", strlen($data)).                
                  "\x00\x00";                            
      }

      /**
       *
       * Function to force the download of the archive as soon as it is created
       *
       * @param archiveName string - name of the created archive file
       */

      public function forceDownload($archiveName) {
            $headerInfo = '';
             
            if(ini_get('zlib.output_compression')) {
                  ini_set('zlib.output_compression', 'Off');
            }

            // Security checks
            if( $archiveName == "" ) {
                  echo "<html><title>Public Photo Directory - Download </title><body><BR><B>ERROR:</B> The download file was NOT SPECIFIED.</body></html>";
                  exit;
            }
            elseif ( ! file_exists( $archiveName ) ) {
                  echo "<html><title>Public Photo Directory - Download </title><body><BR><B>ERROR:</B> File not found.</body></html>";
                  exit;
            }

            header("Pragma: public");
            header("Expires: 0");
            header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
            header("Cache-Control: private",false);
            header("Content-Type: application/zip");
            header("Content-Disposition: attachment; filename=".basename($archiveName).";" );
            header("Content-Transfer-Encoding: binary");
            header("Content-Length: ".filesize($archiveName));
            readfile("$archiveName");
            
       }

}
?>
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
PHP

From novice to tech pro — start learning today.