
در این برنامه ما به شما آموزش خواهیم داد که چگونه یک فایل ZIP را با استفاده از PHP ایجاد کنید.
فایل ZIP یک فرمت فایل رایج برای آرشیو کردن پروندهها با فشردهسازی اطلاعات است. زمانی که میخواهید اجازه دهید کاربر فولدرها و فایلهای چندگانه را دانلود کند، باید یک فایل زیپ ایجاد کنید. این کار به فشردهسازی فایلها و بایگانی برای دانلود چندین فایل در یک زمان کمک میکند.
ایجاد ZIP از دایرکتوری میتواند به راحتی با استفاده از PHP اجرا شود. کلاس ZipArchive در PHP توانایی فوری برای فشردهسازی فایلها یا فولدر را فراهم میکند. شما میتوانید کل شاخه را با استفاده از PHP به فایل ZIP تبدیل کنید.
کلاس ZipArchiver
کلاس ZipArchiver به ایجاد فایل ZIP از فولدر (فایل ها و زیر شاخه ها) در سرور کمک می کند .
zipDir() – این تابع یک ZIP از فولدر را که شامل دایرکتری پدر می باشد را ایجاد می کند
$sourcePath – آدرس نسبی (relative) دایرکتری که قرار است zip شود.
$outZipPath – مسیر ذخیره فایل zip
dirToZip() – این یک فانکشن کمکی از کلاس ZipArchiver است که فایل ها و فولدرهای داخلی در یک فولدر را به فایل zip اضافه می کند.
<?php Class ZipArchiver { /** * Zip a folder (including itself). * * Usage: * Folder path that should be zipped. * * @param $sourcePath string * Relative path of directory to be zipped. * * @param $outZipPath string * Path of output zip file. * */ public static function zipDir($sourcePath, $outZipPath){ $pathInfo = pathinfo($sourcePath); $parentPath = $pathInfo['dirname']; $dirName = $pathInfo['basename']; $z = new ZipArchive(); $z->open($outZipPath, ZipArchive::CREATE); $z->addEmptyDir($dirName); if($sourcePath == $dirName){ self::dirToZip($sourcePath, $z, 0); }else{ self::dirToZip($sourcePath, $z, strlen("$parentPath/")); } $z->close(); return true; } /** * Add files and sub-directories in a folder to zip file. * * @param $folder string * Folder path that should be zipped. * * @param $zipFile ZipArchive * Zip file where files end up. * * @param $exclusiveLength int * Number of text to be excluded from the file path. * */ private static function dirToZip($folder, &$zipFile, $exclusiveLength){ $handle = opendir($folder); while(FALSE !== $f = readdir($handle)){ // Check for local/parent path or zipping file itself and skip if($f != '.' && $f != '..' && $f != basename(__FILE__)){ $filePath = "$folder/$f"; // Remove prefix from file path before add to zip $localPath = substr($filePath, $exclusiveLength); if(is_file($filePath)){ $zipFile->addFile($filePath, $localPath); }elseif(is_dir($filePath)){ // Add sub-directory $zipFile->addEmptyDir($localPath); self::dirToZip($filePath, $zipFile, $exclusiveLength); } } } closedir($handle); } }
ساخت فایل ZIP با PHP
از کلاس ZipArchiver برای آرشیو کردن تمام فایل ها و دایرکتری های داخلی فولدر داده شده و ساخت فایل ZIP با PHP به منظور فشرده کردن استفاده کنید.
ابتدا کلاس ZipArchiverرا اینکلود و یک شی از آن بسازید.
مسیر فولدری که قصد دارید آن را zip شود, مشخص کنید.
مسیر قرار گیری فایل zip ایجاد شده روی سرور را مشخص کنید.
تابع zipDir() از کلاس ZipArchiverرا برای ساخت zip صدا بزنید.
// Include and initialize ZipArchive class require_once 'ZipArchiver.class.php'; $zipper = new ZipArchiver; // Path of the directory to be zipped $dirPath = '/path/to/sourceDir'; // Path of output zip file $zipPath = '/path/to/archive-'.time().'.zip'; // Create zip archive $zip = $zipper->zipDir($dirPath, $zipPath); if($zip){ echo 'ZIP archive created successfully.'; }else{ echo 'Failed to create ZIP.'; }
خب آموزش به پایان رسید امیدوارم مفید واقع شده باشد. در صورت بروز هرگونه مشکل در کدنویسی یا هر گونه سوال در مورد این پروژه می توانید از قسمت دیدگاه ها ما را در جریان بگذارید.
موفق باشید.