Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 2 of 2
  1. #1
    Regular Coder
    Join Date
    Dec 2008
    Posts
    129
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 23...

    hi everyone
    i am using the CreateZipFile.inc to zip file and then download it using another php file
    .
    every thing is working well in small size of files but when i tried to zip large size of files (200 M)


    i got the following error

    Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 23513447 bytes) in /home/survey/public_html/uploads/CreateZipFile.inc.php on line 88

    i need help quickly

    noted that my php.ini is
    Code:
    memory_limit = 7024M
    upload_max_filesize = 150M
    
    post_max_size = 5000M
    
    max_execution_time = 3000
    
    max_input_time = 3000
    
    
    
    zend_extension="/usr/local/IonCube/ioncube_loader_lin_5.2.so"
    zend_extension_ts="/usr/local/IonCube/ioncube_loader_lin_5.2_ts.so"
    
    zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so
    zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so
    
    
    session.gc_maxlifetime = 2880

    and CreateZipFile.inc is

    PHP Code:
    <?php


    class CreateZipFile {

        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 string $directoryName
         * @access public
         * @return void
         */    
        
    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");
            
    $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");
            
    $addCentralRecord .= pack("v");
            
    $addCentralRecord .= pack("v");
            
    $addCentralRecord .= pack("v");
            
    $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 string $directoryName
         * @param string $data
         * @return void
         * @access public
         */    
        
    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 substrsubstr($gzCompressedData0strlen($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");
            
    $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");
            
    $addCentralRecord .= pack("v");
            
    $addCentralRecord .= pack("v");
            
    $addCentralRecord .= pack("v");
            
    $addCentralRecord .= pack("V"32 );
            
    $addCentralRecord .= pack("V"$this->oldOffset );
            
    $this->oldOffset $newOffset;
            
    $addCentralRecord .= $directoryName;
            
    $this->centralDirectory[] = $addCentralRecord;
        }

        
    /**
         * Function to return the zip file
         *
         * @return zipfile (archive)
         * @access public
         * @return void
         */
        
    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
         * @access public
         * @return ZipFile via Header
         */
        
    public function forceDownload($archiveName) {
            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");
            
            exit;
        }

        
    /**
          * Function to parse a directory to return all its files and sub directories as array
          *
          * @param string $dir
          * @access private
          * @return array
          */
        
    private function parseDirectory($rootPath$seperator="/"){
            
    $fileArray=array();
            
    $handle opendir($rootPath);
            while( (
    $file = @readdir($handle))!==false) {
                if(
    $file !='.' && $file !='..'){
                    if (
    is_dir($rootPath.$seperator.$file)){
                        
    $array=$this->parseDirectory($rootPath.$seperator.$file);
                        
    $fileArray=array_merge($array,$fileArray);
                    }
                    else {
                        
    $fileArray[]=$rootPath.$seperator.$file;
                    }
                }
            }        
            return 
    $fileArray;
        }

        
    /**
         * Function to Zip entire directory with all its files and subdirectories 
         *
         * @param string $dirName
         * @access public
         * @return void
         */
        
    public function zipDirectory($dirName$outputDir) {
            if (!
    is_dir($dirName)){
                
    trigger_error("CreateZipFile FATAL ERROR: Could not locate the specified directory $dirName"E_USER_ERROR);
            }
            
    $tmp=$this->parseDirectory($dirName);
            
    $count=count($tmp);
            
    $this->addDirectory($outputDir);
            for (
    $i=0;$i<$count;$i++){
                
    $fileToZip=trim($tmp[$i]);
                
    $newOutputDir=substr($fileToZip,0,(strrpos($fileToZip,'/')+1));
                
    $outputDir=$outputDir.$newOutputDir;
                
    $fileContents=file_get_contents($fileToZip);
                
    $this->addFile($fileContents,$fileToZip);
            }
            
        }
        

        
    /** Lorenz patch */
        
    public function zipMyDirectory($dirName) {
            if (!
    is_dir($dirName)) {
                
    trigger_error("CreateZipFile FATAL ERROR: Could not locate the specified directory $dirName"E_USER_ERROR);
            }
            
            if (
    $handle opendir($dirName)) {
                while (
    false !== ($file readdir($handle))) {
                    if (
    $file != "." && $file != "..") {
                        
    $fileContents=file_get_contents("$dirName/$file");
                        
    $this->addFile($fileContents ,$file);
                    }
                }
                
                
    closedir($handle);
            }
        }
        public function 
    deleteFile($zipName){
        
    unlink($zipName);
    }
    }


    ?>

  • #2
    God Emperor Fou-Lu's Avatar
    Join Date
    Sep 2002
    Location
    Saskatoon, Saskatchewan
    Posts
    16,987
    Thanks
    4
    Thanked 2,660 Times in 2,629 Posts
    These numbers are staggering. Do you really need 6GB of memory available to use?
    According to this it has run out of memory at 64MB. This is half of the default configuration. If you've modified these numbers, have you restarted apache since the change?


  •  

    Posting Permissions

    • You may not post new threads
    • You may not post replies
    • You may not post attachments
    • You may not edit your posts
    •