Bazı web sitelerinin siz bir ZIP dosyası gönderdiğinizde ilgili dosyayı açıp içindeki dosyaları sitenin tercihlerine göre işlediğine şahit olmuşunuzdur. NETTUTS’ta yayımlanan bu makale ile sizlere PHP kullanarak Zip dosyalarının nasıl açılabileceğini açıklamaya çalışacağım.Yapmamız Gerekenler
* Kullanıcıların zip dosyası seçmelerini sağlayacak basit bir upload formu oluştur* Kullanıcının zip dosyası seçtiğinden emin ol ve ardından onu tekil bir dosya olarak kaydet.* Zip’in içindeki dosyaları bir klasöre çıkar* Zip dosyasını sil ve içeriğini göndericiye göster.Adım 1: Upload Formunu Oluşturmak
* Yeni bir dosya oluşturun ve onu index.html olarak kaydederek sitenizin root klasörüne kaydedin.* Sırada, basit bir form oluşturmak var. Aşağıdaki kodu yapıştırın.
Kullanıcılarınızın dosya göndermesine izin vereceğinz her zaman, form etiketindeki “enctype” değerini “multipart/form-data” olarak değiştirmeniz gerekir. Ardından formun hedefini forumun bulunduğu sayfaya yönlendirecek, ve “method” değerini “post” olarak belirteceğiz.
Her şeyi mümkün olduğu kadar sade tutabilmek için sadece dosya giriş alanı ve gönder düğmemiz var. Dosya giriş alanının adını “fupload” olarak belirlediğimize dikkat edin. Birazdan bu değeri sayfanın geri gönderilip gönderilmediğini kontrol etmek için kullanacağız.Adım 2: PHP’yi Yazmak
index.php sayfanızın en üzerinde, doctype değeri henüz belirtilmeden aşağıdaki kodu girin:
Şimdi, dosya adını ve uzantısını ayıralım:
$target değrinden hemen sonra aşağıdaki kodu yapıştırın:
* Bunu yapmak için, öncelikle dizimizdeki öğelerden herhangi birinin “$_FILES[‘fupload’][‘type’] ” değerine sahip olup olmadığını kontrol etmemiz lazım. Eğer sahipse, o zaman “$okay” değişkenimizi ‘true’ olarak belirleyecek – ve ‘for’ komutu ile de kullanıcının zip dosyasını seçtiğinden emin olacağız.Ne yazık ki Safari ve Chrome tarayıcları zip dosyaları için türü kaydetmiyorlar. Bu da bizim için bir problem oluşturuyor. Biraz araştırmadan sonra, PEAR uzantısını kullanmadan basit bir çözüm bulamadım. Bunun yerine biz de en azından dosya adının .zip ile bittiğinden emin olmamız gerekecek. Bunun %100 güvenli olmadığını bilyorum. Ya kullanıcı uzantısı .zip olan başka bir dosya gönderirse? Yorumlarınızı bekliyorum.
Yeni bir sayfa oluşturun ve “functions.php” adıyla kaydedin, sonra aşağıdaki kodu yapıştırın.
* Her sınıfta olduğu gibi nesne için yeni bir örnek yaratmamız gerekecek. Şimdi “open” metodunu kullanacak ve dosyanın açılması gerektiği konumu aktaracağız. Eğer başarıyla gerçekleştiyse bu metod bize ‘true’ değerini verecektir. Eğer durum buysa o zaman zip dosyasının içeriğini klasöre açacağız. Bu klasörün konumunu $target değişkenini oluştururken belirtmiştik. (Not: Bu değişkene ulaşabilmek için değişkenin önüne “global” değerini eklemeniz gerekiyor. Bu kod PHP’ye geçerli fonksiyonun dışına çıkmasını ve $target değişkenini aramasını söylüyor).* Tüm dosyalar aktarıldığında zip dosyasını sileceğiz, zira artık onunla bir işimiz kalmadı.Unutmayın – functions.php dosyamızı oluşturduk ancak onu dahil etmemiz gerekiyor. Aşağıdaki kodu ‘index.php’ sayfanızın üst kısmına, PHP açılış etiketinin hemen ardına ekleyin.
Şimdiye kadarki her şey sorunsuz çalışıyor. Ancak size biraz geribildirim vermek için, yeni dizini taratalım ve içeriğini ekrana yazdıralım. Aşağıdaki kodu projenizden silmeniz gerek, zira bu kod sadece test etmeniz için var. Eğer kodu kullanmak istiyoesanız, o zaman bilgiyi echo kullanarak body etiketi içerisinde yazdırın.
- ‘;for ($i = 0; $i
- ‘ . $scan[$i] . ‘
- ‘ . $scan[$i] . ‘
‘;
} else {echo ‘
‘;
}}}print ‘
‘;
}
Bu son bölüm hakkında çok konuşmayacağım – çünkü gerekli değil. Çok kısaca, yukarıdaki betik yeni dizinimizi tarıyor ve içeriğini sırasız liste olarak ekrana yazdırıyor.Bitti
Çok zor değildi, değil mi? Projelerinize kolayca dahil edebileceğiniz kullanışlı bir özellik. Zip dosyaları gönderirken oluşabilecek olası güvenlik açıklarına yönelik görüşleriniz neler? Zip dosyasının içeriğinin zararsız olacağından nasıl emin olabiliriz? Bu güvenlik konularında herkesin yorumlarını duymak isterim. Eğer dikkatli bir şekilde kullanılmadığında bir bilgisayar korsanı sunucunuza ciddi zararlar verebilir. Gelin tartışalım! Tehlikeli dosyaları aramak (.htaccess dosyaları) ve silmek mümkün.index.php Sayfasının Son Hali
‘;
} else {echo ‘
‘;
}}}print ‘
‘;
}?>
Upload A Zip File