Northeaster ile PHP Dersleri ( Php ile Dosya Yükleme Anlatımı ) #1
Ne Öğreneceğiz?
- Php ile Dosya Upload
Gereksinimlerimiz:
- Notepad+
- Php
- Linux İşletim Sistemi
Zorluk Seviyesi :
- Orta Düzey
Derse Başlangıç
Farklı bilgisayarlar üzerinden , sunucunuz üzerine gönderilecek bu dosyalar için güvenlik konusunda tedbirli olmanız gerekiyor. Neticesinde upload alınacak bu sistemde , bazı uzantıları engellemenizde fayda var. Detaylı ve dikkatli bir şekilde işlemlere başlamalısınız.
Herhangi bir koşul uygulamadan , normal bir upload sistemi yapacak olursak , dileyen herkes sitemize istediği dosyayı ve yazılımı sunucumuza yükleyebilir ve kendilerine ait kodları yükleyerek sitenizi ele geçirebilir.
Bundan dolayı dosyalarımızı en ince ayrıntısına kadar inceleyip , kontrol ettikten sonra sitemize göndereceğiz. Öncelik olarak dosya uzantısına , dosya boyutuna ve dosya türüne bakacağız. Dosya türünü istemiyorsak , sunucuya yükletmyeceğiz.
PHP upload formu hazırlayalım
Bunun için html formunu kullanmamız gerekecek.. Bu formda yüklenecek dosyayı seçmemizi sağlayacak olan file form elementini yerleştirmeliyiz. Ayrıca form etiketlerine ' enctype' değerine dosya yükleme işlemi yapacağımız için “multipart/form-data” parametresini eklemeliyiz. Aşağıdaki kod dökümanını inceleyiniz.
< form action="sunucuyagonder.php" method="post" enctype="multipart/form-data">
< input type="file" name="dosyacik" />
< input type="submit" value="Gönder" />
< /form>
Formu tarayıcı üzerinden açtığımızda aşağıdaki gibi bir görüntüyü görmüş olacaksınız. Gönder butonuna basmanız durumunda da dosyayı action parametresinde belirtmiş oldugumuz sunucuyagonder.php sayfasına yükleyecek..
PHP’ye gönderilen dosyaları ederek yüklemek
Şimdi gelelim dosyaların gönderileceği uygulamamıza, yani bizim örnekte gonder.php olarak adlandırdığımız sayfamıza.
İlk önce sayfa üzerine bir dosya gönderilmiş mi diye kontrol etmeliyiz. Eğer sayfayı direkt görüntülemeye çalışılıyorsa hiç bir şey yapmamamız gerekir.. Ardından $_FILES global değişkenini kullanarak bize gönderilen dosyanın türüne ,boyutuna, ve uzantılarını kontrol edeceğiz.
Yine isset fonksiyonunu kullanarak sayfaya bir dosya gönderilmiş mi diye kontrol edeceğiz. Eğer gönderilmişse $_FILES global dizininde gönderilen dosya elementinin adında bir dizin oluşturmuş olaca. Yani form elementininin name parametresine yazmış olduğumuz ismini kullanacağız. Biz formumuzu yaparken bu değere “ dosyacik” yazmıştık.
if(isset($_FILES['dosya'])) {
echo 'Dosya yüklenmiştir';
} else {
echo 'Lütfen bir dosya yükleyin';
}
Bu taslakta sadece sayfaya bir yükleme yapılmış mı diye kontrol etmiş olduk. Şimdi eğer dosya yüklenmişse türüne ve boyuna bakacağız.
Bunun için $_FILES global dizininin bizim dosyamız için ürettiği diğer alt dizin değerlerine bakıyoruz, bunlarıda aşağıda gösteriyorum.
name======> Yüklenen dosyanın adı
type======> Yüklenen dosyanın türü
tmp_name=> Yüklenen dosyanın geçici olarak sunucuda konumlandığı dizin.
size======> Yüklenen dosyanın bayt cinsinden boyutu
error======> Dosya yüklenirken verilen hata kodu
Yukarıdaki değerleri $_FILES global dizininde kendi dosya elementi adını girdikten sonra alt dizin şeklinde erişim sağlayacağız.
if(isset($_FILES['dosyacik'])){
$hata = $_FILES['dosyacik']['error'];
if($hata != 0) {
echo 'Yüklenirken bir hata oluştu.';
} else {
$boyut = $_FILES['dosyacik']['size'];
if($boyut > (1024 * 1024 * 5)){
echo 'Dosya 5MB den büyük olamaz.';
} else {
$tip = $_FILES['dosyacik']['type'];
$isim = $_FILES['dosyacik']['name'];
$dosyaturu = explode('.', $isim);
$dosyaturu = $dosyaturu[count($dosyaturu)-1];
if($tip != 'image/jpeg' || $dosyaturu != 'jpg') {
echo 'Yanlızca JPG dosyaları yükleyebilirsiniz.';
} else {
$dosyacik = $_FILES['dosyacik']['tmp_name'];
copy($dosya, 'northeasterDOSYA/' . $_FILES['dosyacik']['name']);
echo 'Dosyanız sunucuya yüklendi!';
}
}
}
}
Çok uzun ve kafa karıştırıcı görünen bir kod dizimi oldu ama kuralları detaylıca incelerseniz aslında gayet kolay ve anlaşılabilir olduğunu fark edeceksiniz.Ve şuan dosyalarımızın sunucuya yüklenirken güvenliği konusunda tüm incelemelerimizi yaptık ve en sonunda tüm kuralları geçtiyse copy() fonksiyonu ile dosyayı geçici olan dizinden alıp 'northeasterDOSYA' dizinine gönderdik.
Bir başka php derslerinde görüşmek üzere. Takıldığınız veya yapamadığınız bölümler için , blogumuzdan yorum bırakarak sorularınızı iletebilirsiniz. Sizlere yardımcı olmaktan mutluluk duyarım. Eğer anlatmamı istediğiniz farklı bir konu var ise , yine aynı şekilde yorum bırakırsanız , ilgili istediğiniz konununda anlatımını sağlarım.
Ders Anlatım Serilerimiz
Posted on Utopian.io - Rewarding Open Source Contributors
Your contribution cannot be approved because it is not as informative as other contributions. See the Utopian Rules. Contributions need to be informative and descriptive in order to help readers and developers understand them.
You can contact us on Discord.
[utopian-moderator]
Hey @forkonti, I just gave you a tip for your hard work on moderation. Upvote this comment to support the utopian moderators and increase your future rewards!