Pelanjutan PHP ZipArchive ialah alat yang sangat berguna apabila bekerja dengan fail dimampatkan, tetapi terdapat beberapa masalah biasa yang dihadapi semasa penggunaan. Editor PHP Strawberry akan memperkenalkan kepada anda cara untuk mengelakkan kesilapan biasa ini dan membantu anda menggunakan sambungan ZipArchive untuk melaksanakan operasi pemampatan dan penyahmampatan fail dengan lebih lancar. Dengan mempelajari artikel ini, anda akan dapat mengelakkan beberapa ralat penggunaan sambungan ZipArchive yang biasa, meningkatkan kecekapan pembangunan PHP dan memastikan operasi normal program.
Apabila memanipulasi fail termampat menggunakan objek ZipArcHive, anda mesti sentiasa memastikan untuk menutup pemegang fail selepas menyelesaikan operasi. Kegagalan untuk menutup pemegang fail boleh mengakibatkan kerosakan fail atau kebocoran sumber.
$zip = new ZipArchive(); $zip->open("file.zip"); // ... 进行操作 ... $zip->close(); // 关闭文件句柄
Perangkap 2: Memproses dokumen substandard
ZipArchive akan membuang pengecualian jika fail yang akan dibuka rosak atau tidak mematuhi spesifikasi ZIP. Dokumen hendaklah disemak kesahihannya sebelum diproses.
if ($zip->open("file.zip") !== TRUE) { // 处理异常 }
Perangkap 3: Tanda Pesanan Bait (BOM) Tidak Dikira
Jika anda sedang memproses fail teks daripada sumber yang berbeza, anda mungkin menghadapi Tanda Pesanan Byte (BOM), iaitu aksara pilihan yang menunjukkan susunan bait fail teks. Fail yang dikodkan UTF-8 biasanya mengandungi BOM, manakala pengekodan lain tidak. ZipArchive mungkin mentafsirkan BOM sebagai sebahagian daripada kandungan fail, menyebabkan ralat penyahmampatan. Untuk mengelakkan ini, gunakan kaedah ZipArchive::setExternalAttributesName() untuk menentukan cara BOM dikendalikan.
$zip->setExternalAttributesName(ZipArchive::FL_NODIR_ATTRIBUTES);
Perangkap 4: Kaedah mampatan tidak disokong
ZipArchive menyokong pelbagai kaedah pemampatan seperti Deflate, Bzip2 dan LZMA. Walau bagaimanapun, sesetengah sistem lama mungkin tidak menyokong semua kaedah ini. Anda harus menggunakan kaedah mampatan Deflate jika anda merancang untuk mengedarkan fail ZIP pada sistem yang tidak menyokong kaedah ini.
$zip->addFile("file.txt", "file.txt"); $zip->setCompressionIndex(ZIPARCHIVE::CM_DEFLATE);
Perangkap 5: Mengendalikan entri yang tidak wujud
Apabila menggunakan objek ZipArchive untuk memanipulasi entri dalam fail termampat, pastikan anda memastikan bahawa entri itu wujud. Jika tidak, ZipArchive akan membuang pengecualian. Semak kewujudan entri menggunakan kaedah ZipArchive::locateName().
if ($zip->locateName("file.txt") === -1) { // 条目不存在,处理错误 }
Perangkap 6: Ralat Tidak Terkendali
Pelbagai ralat mungkin berlaku apabila menggunakan ZipArchive. Sentiasa semak objek ZipArchive untuk kod ralat dan ambil tindakan yang sesuai jika ralat berlaku.
switch ($zip->getStatus()) { case ZIPARCHIVE::ER_OK: // 没有错误 break; case ZIPARCHIVE::ER_NOZIP: // 并非 ZIP 文件 break; case ZIPARCHIVE::ER_INVAL: // 无效的 ZIP 文件 break; // ... 其他错误处理 ... }
Perangkap 7: Menggunakan indeks dan bukannya nama
ZipArchive menyokong mengakses entri dalam fail termampat menggunakan index atau nama. Walau bagaimanapun, menggunakan indeks boleh berisiko. Indeks boleh berubah jika entri disusun semula atau dipadamkan. Adalah lebih baik untuk mengakses entri mengikut nama, kerana ia kurang terdedah kepada pengubahsuaian arkib.
$entry = $zip->getEntry("file.txt"); // 使用名称
$entry = $zip->getEntryByIndex(0); // 使用索引 (不推荐)
ZipArchive tidak menyokong pautan simbolik. Jika anda menemui pautan simbolik dalam fail termampat, ZipArchive menganggapnya sebagai fail biasa. Untuk mengendalikan pautan simbolik, anda perlu menggunakan alat
luaranatau perpustakaan.
Perangkap 9: Tidak mengambil kira had saiz failZipArchive mempunyai had saiz fail bergantung pada
sistem pengendalian yang digunakan. Sebelum menambah fail besar pada fail termampat, semak had saiz fail.
if ($filesize > 2e9) { // 2 GB
// 超过文件大小限制,处理错误
}
Dalam sesetengah kes, anda mungkin perlu menggunakan objek ZipArchive dengan fail sementara. Pastikan anda memadamkan fail sementara selepas digunakan untuk mengosongkan sumber sistem dan mengelakkan isu
keselamatan.
ZipArchive anda berjalan dengan lancar. Dengan mengikuti amalan terbaik ini, anda boleh memproses fail mampat dengan cekap dan boleh dipercayai. Atas ialah kandungan terperinci Perangkap Biasa dengan Sambungan PHP ZipArchive: Elakkan Kesilapan Biasa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!// 创建临时文件
$tmpfile = tmpfile();
// 将 ZipArchive 对象与临时文件关联
$zip->open($tmpfile);
// ... 进行操作 ...
// 删除临时文件
fclose($tmpfile);