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?
 
star_trekConnect With a Mentor Commented:
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
 
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
 
missilesiloConnect With a Mentor Commented:
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
All Courses

From novice to tech pro — start learning today.