
Dosyaları internet üzerinden aktarırken sıkıştırmanın birçok avantajı vardır. Çoğu durumda, sıkıştırılmış formattaki tüm dosyaların toplam boyutu güzel bir marjla azalır. Bu, bant genişliğinizin bir kısmından tasarruf edeceğiniz ve kullanıcıların daha hızlı indirme hızları elde edeceği anlamına gelir. Kullanıcılar bir dosyayı indirdikten sonra, istedikleri zaman sıkıştırmayı açabilirler. Kısacası, sıkıştırma, dosyaların internet üzerinden sunulmasını hem sizin hem de ziyaretçileriniz için çok daha kolay hale getirebilir.
Sizi dosyaları sıkıştırmaktan vazgeçirebilecek veya işlemi çok yorucu hale getirebilecek bir faktör, bunu manuel olarak yapıyor olmanızdır. Neyse ki PHP, özellikle dosya sıkıştırma ve çıkarma ile ilgilenen birçok uzantıyla birlikte gelir. PHP’de dosyaları otomatik olarak sıkıştırmak için bu uzantılarda bulunan işlevleri kullanabilirsiniz.
Bu eğitim size PHP’deki bir zip arşivinden dosyaları nasıl sıkıştıracağınızı ve açacağınızı (sıkıştırıp çıkaracağınızı) öğretecektir. Ayrıca bir arşivdeki dosyaları çıkarmadan nasıl sileceğinizi veya yeniden adlandıracağınızı da öğreneceksiniz.
PHP’de Dosyaları Sıkıştırmak
PHP ZipArchive
class, tüm dosyalarınızı sıkıştırmanıza ve açmanıza yardımcı olabilecek birçok özellik ve yönteme sahiptir.
Bireysel Dosyaları Sıkıştır
Dosyaları zip arşivinize birer birer ekleyebilir veya tüm dizini bir kerede ekleyebilirsiniz. Her iki durumda da, ilk adım yeni bir ZipArchive
örnek ve ardından arama open($filename, [$flags])
yöntem. Bu yöntem, okuma, yazma veya diğer değişiklikler için yeni bir zip arşivi açacaktır. İsteğe bağlı için dört geçerli değer vardır $flag
farklı durumların nasıl ele alınacağını belirleyen parametre.
-
ZipArchive::OVERWRITE
—Bu bayrak, zaten mevcutsa, belirtilen arşivdeki içeriğin üzerine yazacaktır. -
ZipArchive::CREATE
—Bu bayrak, halihazırda mevcut değilse yeni bir arşiv oluşturacaktır. -
ZipArchive::EXCL
—Arşiv zaten mevcutsa, bu bayrak bir hataya neden olur. -
ZipArchive::CHECKCONS
—Bu işaret, PHP’ye arşiv üzerinde ek tutarlılık kontrolleri yapmasını ve başarısız olursa bir hata vermesini söyler.
kontrol edebilirsiniz Bu yöntemin dokümantasyonu Dosyanın açılamaması durumunda döndürülen farklı hata kodlarını öğrenmek için. Zip dosyası başarıyla açıldıysa veya oluşturulduysa, yöntem geri dönecektir. true
.
Arşivi başarıyla açtıktan sonra, addFile($filename, $localname, $start, $length)
Belirli bir yoldan herhangi bir dosyayı arşivinize ekleme yöntemi. bu $filename
parametre, arşive eklemek istediğiniz dosyanın yoludur. bu $localname
parametre, dosyaya arşiv içinde saklamak üzere bir isim atamak için kullanılır. Arayabilirsin addFile()
arşivinize her yeni dosya eklemek istediğinizde.
Gerekli tüm dosyaları arşive ekledikten sonra, aramanız yeterlidir. close()
kapatma ve değişiklikleri kaydetme yöntemi.
Diyelim ki, kullanıcıların farklı yazı tipleri için yazı tipi dosyalarını ve bunları kullanmak için lisans bilgilerini indirmelerine izin veren bir web siteniz olduğunu varsayalım. Bunun gibi dosyalar, PHP kullanılarak otomatik arşivlemenin mükemmel örnekleri olacaktır. Aşağıdaki kod, tam olarak bunu nasıl yapacağınızı gösterir.
<?php $zip = new ZipArchive(); $zip->open('compressed/font_files.zip', ZipArchive::CREATE); $zip->addFile('fonts/Monoton/Monoton-Regular.ttf', 'Monoton-Regular.ttf'); $zip->addFile('fonts/Monoton/OFL.txt', 'license.txt'); $zip->close(); ?>
oluşturarak başlıyoruz. ZipArchive
örneğini kullanın ve ardından open()
arşivimizi oluşturma yöntemi. bu addFile()
yöntem bizim gerçek ekler .ttf yazı tipi dosyası ve .Txt lisans dosyasını arşive atın.
Orijinal dosyaların içinde olduğuna dikkat etmelisiniz. yazı tipleri/Monoton dizin. Ancak, PHP kodu onu doğrudan arşivimizin kök dizinine yerleştirir. Arşive giren dosyaların adlarının yanı sıra dizin yapısını da değiştirebilirsiniz.
Bir Dizinden Birden Çok Dosyayı Sıkıştırmak
Arşivinize tek tek dosyalar eklemek bir süre sonra yorucu olabilir. Örneğin, hepsinin bir arşivini oluşturmak isteyebilirsiniz. .pdf veya .png bir dizindeki dosyalar. bu addGlob($pattern, $flags, $options)
yöntem bu durumda çok yardımcı olacaktır. Bu yöntemin tek dezavantajı, arşivdeki tek tek dosyaların konumu üzerindeki kontrolünüzü kaybetmenizdir. Bununla birlikte, arşivin içindeki dizin yapısını yine de aşağıdakileri kullanarak etkileyebilirsiniz: $options
parametre. Seçenekler, bir ilişkisel dizi biçiminde iletilir.
-
add_path
—Atadığınız değeradd_path
arşiv içindeki dosyanın yerel yolunun önüne eklenir. -
remove_path
—Atadığınız değerremove_path
arşive eklenen farklı dosyaların yolundan eşleşen bir öneki kaldırmak için kullanılır. -
remove_all_path
—Değerinin ayarlanmasıremove_all_path
iletrue
adının yanı sıra dosyanın yolundan her şeyi kaldıracaktır. Bu durumda dosyalar arşivin kök dizinine eklenir.
Bir yolun kaldırılmasının, içinde belirtilen değerin önüne eklenmeden önce yapıldığını hatırlamak önemlidir. add_path
.
Aşağıdaki kod parçacığını kullanacak addGlob()
ve tüm bu seçenekler daha net.
$zip = new ZipArchive(); $zip->open('compressed/user_archive.zip', ZipArchive::CREATE); $options = array('add_path' => 'light_wallpapers/', 'remove_all_path' => TRUE); $zip->addGlob('lights/*.jpg', 0, $options); $options = array('add_path' => 'font_files/', 'remove_all_path' => TRUE); $zip->addGlob('documents/*.ttf', 0, $options); $options = array('add_path' => 'pdf_books/', 'remove_all_path' => TRUE); $zip->addGlob('documents/*.pdf', 0, $options); $options = array('add_path' => 'images/', 'remove_all_path' => TRUE); $zip->addGlob('documents/*.{jpg, png}', GLOB_BRACE, $options); $zip->close();
Her zamanki gibi, bir ZipArchive
örneğini kullanın ve ardından open()
arşivimizi oluşturma yöntemi. için farklı değerler de belirtiyoruz. add_path
anahtar $options
aramadan önce her seferinde dizi addGlob()
yöntem. Bu şekilde, bir seferde belirli bir dosya grubuyla ilgilenebilir ve buna göre arşivleme seçenekleri sağlayabiliriz.
İlk durumda, hepsini yineliyoruz .jpg içindeki dosyalar ışıklar dizine yerleştirin ve light_wallpapers arşivdeki dizin. Benzer şekilde, tüm üzerinde yineleniriz .ttf içindeki dosyalar belgeler dizini ve ardından bunları adlı bir klasörün içine koyun. font_files arşivimizde. Son olarak, tüm öğeleri yineliyoruz .jpg ve .png dosyalarımızdaki dosyaları bir kerede bir araya getirin ve hepsini bir araya getirin. Görüntüler dizin.
Görüldüğü gibi değerler $options
parametresi arşiv içindeki içeriği düzenlemede yararlıdır.
Bir Arşivden İçerik Çıkarma
bu ZipArchive
sınıfın adı verilen bir yöntemi var extractTo($destination, $entries)
Bir arşivin içeriğini çıkarmak için. Arşivdeki her şeyi veya yalnızca belirli dosyaları çıkarmak için kullanabilirsiniz. bu $entries
parametresi, ayıklanacak tek bir dosya adını belirtmek için kullanılabilir veya bir dizi dosyayı iletmek için kullanabilirsiniz.
Unutulmaması gereken önemli bir nokta, dosyayı çıkarmak için arşivin içindeki dosyanın doğru yolunu belirtmeniz gerektiğidir. Örneğin, adlı bir yazı tipi dosyasını arşivledik. AlegreyaSans-Light.ttf önceki bölümde. Dosya, arşivde adı verilen bir dizinde saklandı. font_files. Bu, içinde belirtmeniz gereken yolun $entries
parametre font_files/AlegreyaSans-Light.ttf ve basitçe değil AlegreyaSans-Light.ttf.
Dizin ve dosya yapısı çıkarma işlemi sırasında korunacak ve dosyalar kendi dizinlerine ayıklanacaktır.
<?php $zip = new ZipArchive(); $zip->open('compressed/user_archive.zip', ZipArchive::CREATE); $zip->extractTo('uncompressed/', 'font_files/AlegreyaSans-Light.ttf'); $zip->close(); ?>
İkinci parametreyi atlarsanız, yöntem arşivdeki tüm dosyaları çıkaracaktır.
Arşivler Üzerinde Daha Fazla Kontrol Edin
bu ZipArchive
class ayrıca, tüm içeriğini çıkarmadan önce arşiv hakkında daha fazla bilgi edinmenize yardımcı olacak birçok başka yöntem ve özelliğe sahiptir.
kullanarak bir arşivdeki dosya sayısını sayabilirsiniz. count()
yöntem. Diğer bir seçenek ise, numFiles
Emlak. Arşivdeki tüm dosyalar üzerinde yineleme yapmak ve yalnızca ihtiyacınız olanları çıkarmak için kullanılabilirler veya onlarla arşivden kaldırmak gibi başka bir şey yapabilirsiniz.
Aşağıdaki örnekte, arşivdeki kelimeyi içeren tüm dosyaları siliyoruz. İtalik. Belirli bir kelime içermeyen tüm dosyaları silmek için benzer kod kullanılabilir. Ayrıca bu dosyalar üzerinde yineleme yapabilir ve belirli bir kelimeyi başka bir kelimeyle değiştirebilirsiniz.
<?php $zip = new ZipArchive(); $zip->open('compressed/user_archive.zip', ZipArchive::CREATE); $file_count = $zip->count(); for($i = 0; $i < $file_count; $i++) { $file_name = $zip->getNameIndex($i); if(stripos($file_name, 'Italic') !== false) { $zip->deleteName($file_name); } } $zip->close(); ?>
Yukarıdaki kodda kullandığımız deleteName()
Tek bir dosyayı silmek için Ancak, tüm bir dizini silmek için de kullanabilirsiniz.
Benzer bir işlev renameName($oldname, $newname)
arşivdeki herhangi bir dosyanın adını değiştirmek için kullanılabilir. başlıklı bir dosya varsa bir hata alırsınız. $newname
zaten var.
Son düşünceler
Bir çok yararlı yöntemi ele aldık. ZipArchive
PHP’de dosyaların otomatik olarak sıkıştırılmasını ve çıkarılmasını çok kolaylaştıracak bir sınıf. Artık kendi kriterlerinize göre tek tek dosyaları veya bir grup dosyayı aynı anda sıkıştırabilmeniz gerekir. Benzer şekilde, diğer içeriği etkilemeden herhangi bir dosyayı arşivden çıkarabilmelisiniz.
Yardımıyla count()
ve numFiles
, tek tek dosyalar üzerinde daha fazla kontrol sahibi olacaksınız ve onları yeniden adlandırmak veya silmek çok kolay olacaktır. içinden geçmelisin belgeler en az bir kez daha bu tür işlevler hakkında okumak için.