I am using this for reference:
I run it on my website. its not works as expected. it doesn't make different folder as defined in souce(path).
I want to zip all files and folders(with their files and folder). I want to create zip file as like in windows (set all file and folders in .zip file).
Ex:
source_folder
    directory_a/
        a.jpg
        b.jpg
    directory_b/
        x.jpg
        y.jpg
        z.jpg
m.jpg
n.jpg
Make .zip file as defined in souce_folder.
Please help me to solve this problem. Thanks in advance.
Full code:
function Zip($source, $destination)
{    
    if (!extension_loaded('zip') || !file_exists($source)) {     
        return false;     
    }       
    $zip = new ZipArchive();    
    if (!$zip->open($destination, ZIPARCHIVE::CREATE)) {    
        return false;    
    }    
    $source = str_replace('\\', '/', realpath($source));    
    if (is_dir($source) === true)      
    {      
        $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);        
        foreach ($files as $file)     
        {      
            $file = str_replace('\\', '/', $file);     
            // Ignore "." and ".." folders        
            if( in_array(substr($file, strrpos($file, '/')+1), array('.', '..')) )        
                continue;    
            $file = realpath($file);    
            if (is_dir($file) === true)    
            {    
                $zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));    
            }    
            else if (is_file($file) === true)    
            {    
                $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file));      
            }       
        }      
    }    
    else if (is_file($source) === true)    
    {    
        $zip->addFromString(basename($source), file_get_contents($source));    
    }    
    return $zip->close();    
}        
$path = "download/foldername";
Zip($path, $path.".zip");
 
     
     
    