مقدمة في العمل مع أرشيفات ZIP في PHP
إنشاء ومعالجة أرشيفات ZIP هي إحدى المهام الشائعة في تطوير الويب. في PHP، يتم حل هذه المهمة باستخدام الإضافة المدمجة Zip، والتي توفر كلاسًا قويًا وسهل الاستخدام ZipArchive. باستخدامه، يمكنك إنشاء أرشيفات جديدة، فك ضغط الموجودة، إضافة أو حذف الملفات، وكذلك العمل مع البيانات الوصفية.
في هذه المقالة، سنشرح بالتفصيل جميع العمليات الأساسية مع أرشيفات ZIP في PHP: من الإنشاء البسيط إلى معالجة الأخطاء والعمل مع كلمات المرور. جميع الأمثلة جاهزة للاستخدام في مشاريعك.
التحضير للعمل: التحقق من وجود إضافة Zip
قبل البدء، تأكد من تثبيت وتفعيل الإضافة zip على خادمك. يمكن التحقق من ذلك باستخدام الدالة phpinfo() أو ببرنامج بسيط:
<?phpif (extension_loaded('zip')) { echo "إضافة Zip متاحة";} else { echo "إضافة Zip غير موجودة";}?>إذا كانت الإضافة مفقودة، قم بتثبيتها عبر مدير الحزم لنظام التشغيل الخاص بك (مثل apt install php-zip لأوبونتو) أو قم بتفعيلها في ملف php.ini.
إنشاء أرشيف ZIP جديد
أبسط طريقة لإنشاء أرشيف هي فتح ملف جديد في وضع الكتابة وإضافة الملفات إليه. لنلق نظرة على مثال أساسي:
<?php$zip = new ZipArchive();$filename = 'example.zip';
// إنشاء أرشيف جديد (ZIPARCHIVE::CREATE)if ($zip->open($filename, ZipArchive::CREATE) === TRUE) { // إضافة ملف من نظام الملفات المحلي $zip->addFile('/path/to/file1.txt', 'file1.txt'); // إضافة نص كملف جديد في الأرشيف $zip->addFromString('hello.txt', 'مرحبًا، أيها العالم!'); // إضافة مجلد كامل (بشكل متكرر) $zip->addGlob('/path/to/dir/*.*'); $zip->close(); echo "تم إنشاء الأرشيف $filename بنجاح";} else { echo "خطأ في إنشاء الأرشيف";}?>لاحظ: المعامل الثاني في addFile() هو اسم الملف داخل الأرشيف. إذا لم يتم تحديده، سيتم حفظ الملف باسمه الأصلي.
فك ضغط أرشيف ZIP
يتم استخراج الملفات من الأرشيف باستخدام الدالة extractTo(). حدد المجلد الهدف حيث سيتم فك ضغط الملفات:
<?php$zip = new ZipArchive();if ($zip->open('example.zip') === TRUE) { // فك ضغط كل شيء في مجلد 'unpacked' $zip->extractTo('/path/to/unpacked/'); $zip->close(); echo "تم فك ضغط الأرشيف";} else { echo "خطأ في فتح الأرشيف";}?>إذا كنت بحاجة إلى استخراج ملفات معينة فقط، قم بتمرير قائمتها كمعامل ثالث:
$zip->extractTo('/path/to/unpacked/', ['file1.txt', 'hello.txt']);عرض محتويات الأرشيف
أحيانًا تحتاج إلى الحصول على قائمة الملفات داخل الأرشيف دون فك ضغطه. استخدم الخصائص والدوال الخاصة بـ ZipArchive:
<?php$zip = new ZipArchive();if ($zip->open('example.zip') === TRUE) { echo "عدد الملفات: " . $zip->numFiles . "<br>"; for ($i = 0; $i < $zip->numFiles; $i++) { $stat = $zip->statIndex($i); echo "الملف: " . $stat['name'] . " (الحجم: " . $stat['size'] . " بايت)<br>"; } $zip->close();}?>إضافة الملفات مع الحفاظ على هيكل المجلدات
للحفاظ على التسلسل الهرمي للمجلدات عند الإضافة، استخدم المسارات النسبية في اسم الملف داخل الأرشيف:
<?php$zip = new ZipArchive();$zip->open('backup.zip', ZipArchive::CREATE);
// إضافة ملف مع الحفاظ على المجلد الفرعي$zip->addFile('/var/www/images/photo.jpg', 'images/photo.jpg');// أو إضافة مجلد كامل بشكل متكرر$zip->addPattern('/\\.(jpg|png)$/', '/var/www/images/', ['add_path' => 'images/']);
$zip->close();?>حذف الملفات من الأرشيف
لحذف ملف معين