چگونگی ایجاد و دانلود یک فایل فشرده با استفاده از PHP: اگر قصد دانلود یا آپلود چندین فایل بطور همزمان را دارید، بهترین کار ایجاد یک فایل فشرده، اضافه کردن فایل های دانلود در فایل فشرده  و دانلود فایل فشرده خواهد بود. با استفاده از پی اچ پی، این کار بسیار آسان است. کلاس پی  اچ پی   PHPArchive تمام امکانات را برای ایجاد یک فایل فشرده با چندین فایل فراهم می کند. البته نیاز به PHP 5.2.0 و بالاتر برای آن کلاس دارید.

ایجاد فایل فشرده(zip)

اولین کاری که باید بکنید تعیین مسیر و نام فایل فشرده هست. که فایل zip در آن مکان با نام دلخواه شما ایجاد می شود، بنابراین یک مکان مناسب در پوشه پروژه خود را انتخاب کنید.

$zip_file = '(path_of_the_zip)/filename.zip';

اگر  در پلاگین سفارشی وردپرس کار می کنید، پس باید مسیر را در پوشه افزونه سفارشی خود انتخاب کنید.


$dir = plugin_dir_path( __FILE__ );
$zip_file = $dir . '/filename.zip';

حالا می توانید فایل آرشیوی را ایجاد کرده و فایل فشرده را باز کنید. اگر متد open از $zip  به درستی جواب نمی دهد، مشکلی وجود دارد، و باید پیام های خروجی را برای تشخیص و رفع مشکل بررسی کنید.

$zip = new ZipArchive();
if ( $zip->open($zip_file, ZipArchive::CREATE) !== TRUE) {
exit("message");
}

فایل ها را در فایل فشرده اضافه کنید. برای اضافه کردن هر فایل، می توانید فایل را با استفاده از مسیر فایل اضافه کنید یا فایل را با استفاده از محتویات آن اضافه کنید.

$zip->addFile('full_path_of_the_file', 'custom_file_name');

پارامتر اول : مسیر کامل فایل با نام فایل و پسوند فایل است.

پارامتر دوم : برای نام فایل در داخل فایل زیپ است، اگرتعیین نشود، نام اصلی فایل درنظر گرفته خواهد شد.

اکنون فایل را با استفاده از محتویات آن اضافه کنید.

$download_file = file_get_contents( $file_url );
$zip->addFromString(basename($file_url),$download_file);

در انتها فراموش نکنید که فایل zip را ببندید.

$zip->close();

فایل Zip ایجاد شده را دانلود کنید

اکنون فایل برای دانلود آماده است. می توانید مکان و نام فایل zip ایجاد شده را بدست آورید، همچنین می توانید یک برچسب برای دانلود فایل zip اضافه کنید یا می توانید با استفاده از پی اچ پی آنرا بصورت خودکار دانلود کنید.

برای دانلود سریع، باید هدر را به صورت درستی تنظیم کنید. تا به مرورگر پیشنهاد دهد که فایل را به جای نمایش آن به طور مستقیم دانلود کند.


header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="'.basename($zip_file).'"');
header("Content-length: " . filesize($zip_file));
header("Pragma: no-cache");
header("Expires: 0");

حالا هدر تنظیم شده است، پس قبل از دانلود فایل فشرده، باید بافر خروجی را پاک کنید. گاهی اوقات، فایل زیپ دانلود به درستی باز نمی شود و در Safari، کشیدن خودکار نیز به دلایلی انجام نشد. برای جلوگیری از مشکل، شما باید بافر خروجی را پاک کنید.

ob_clean();
flush();

حالا می توانید فایل فشرده را در کامپیوتر محلی خود دانلود کنید.

readfile($zip_file);

محل فایل و نام فایل فشرده همیشه یکسان است، بنابراین چندین بار این عملکرد هر بار که فایل جدید در یک فایل زیپ اضافه می شود، اجرا می شود، و نگه داشتن فایل زیپ ایجاد شده پس از دانلود کامل، فضای ذیسک را هدر می دهد . پس فایل زیپ را پس از دانلود حذف کنید.

unlink($zip_file);

اگر  همیشه بایستی فایل زیپ ایجاد شده را نگه دارید، از  unlink () استفاده نکنید، فقط نام فایل Zip را هر بار تغییر دهید، به طوری که زمان را با نام فایل اضافه کنید.

فراموش نکنید که بعد از readfile () خارج شوید.

exit;

نمایش قابل چاپ