http://turkiyecafe.77forum.com Açılmıstır
Would you like to react to this message? Create an account in a few clicks or log in to continue.

http://turkiyecafe.77forum.com Açılmıstır

http://turkiyecafe.77forum.com Açılmıstır
 
AnasayfaAramaLatest imagesKayıt OlGiriş yap

 

 PHP İle Sunucuya Dosya Yükleme (File Upload)

Aşağa gitmek 
YazarMesaj
ADmİNİsTRaToR
ADMİNsTATöR FoRuM SaHiBi
ADMİNsTATöR FoRuM SaHiBi
ADmİNİsTRaToR


Mesaj Sayısı : 191
Kayıt tarihi : 18/01/08
Nerden : ANKARA

PHP İle Sunucuya Dosya Yükleme (File Upload) Empty
MesajKonu: PHP İle Sunucuya Dosya Yükleme (File Upload)   PHP İle Sunucuya Dosya Yükleme (File Upload) EmptyCuma Ocak 25, 2008 7:15 am

Web uygulamalrında bazen sunucuya istemci tarafından dosya (e-posta atarken ek dosya gönderme gibi) yüklenmesine ihtiyaç duyulur. Bu yazı istemciden sunucuya dosya yükleme uygulamarı için PHP 'nin sağladığı fonksiyonlar hakkındadır.
PHP dosya yüklemeyi destekleyen bütün tarayıcılardan dosya yükleme isteklerini işleyebilir. İki farklı yöntemle bu yapılabilmektedir. POST ve PUT yöntemleri. Bu yazıda daha çok kullanılan POST yönteminden bahsedeceğiz.
POST yöntemi HTML 'form' kullanılarak yüklenecek dosyanın belirtilmesi ve bu dosyanın POST yöntemiyle sunucudaki bir betiğe gönderilmesinden ibarettir. Yalnız dosya yüklerken kullanılan HTML 'form' un belli başlı farklılıkları vardır. Dosya yüklemek için kullanacağımız HTML 'form' aşağıdaki gibi olmalıdır.
<form enctype='multipart/form-data' action='dosyayi_alip_islem_yapacak_php_betigi' method='POST'>Gönderilecek dosya: <input name='userfile' type='file'> <input type='submit' value='Gönder'></form>
Bu formda dikkat edilmesi gereken ve diğer formlardan farklı olan iki nokta vardır. Birincisi dosya ismini verğimiz'type=file' olan form elemanıdır. İkincisi ise form özelliği olarak 'enctype='multipart/form-data'' kullanılmasıdır. Bu özellik kullanılmasza dosya sunucuya gönderilemez. Form doldurulup (dosya yolu belirtilip) gönderildiğinde formu işleyecek betikte $_FILES global değişkeni oluşur. Bu değişken kullanılarak yüklenmek istenen dosya hakkında gerekli bilgilere ulaşırız. Bu dizinin indeksleri ve değerleri şu şekildedir.

$_FILES['userfile']['name'] : Dosyanın istemci bilgisayarındaki gerçek ismi.
$_FILES['userfile']['type'] : Dosyanın türü. Örneğin image/gif, image/jpg gibi
$_FILES['userfile']['size']: Dosyanın boyutunun byte cinsinden değeri.
$_FILES['userfile']['tmp_name'] : Dosyanın sunucudaki geçici yeri. Form doldurulup gönderildiğinde dosya PHP tarafından php.ini 'de upload_tmp_dir belirteciyle (directive) belirtilen dizine bu isim ile alınır. Daha sonra PHP fonksiyonları kullanılarak başka biryere kayıt edildiğinde dosya buradan silinir.
$_FILES['userfile']['error'] : Dosya yükleme ile ilgili oluşan hatanın kodu. Form doldurulup gönderildiğinde dosya geçici dizine geçici bir isimle yüklenir ve PHP $_FİLES dizisini kullanarak dosyayı istediğimiz dizine kopyalayabiliriz. Bu kopyalama işlemleri için PHP nini sağladığı öntanımlı fonksiyonları kullanırız. Basit bir örnek olarak :
<?php $uploaddir= '/var/www/dosya/';
$uploadfile=$uploaddir.basename($_FILES['userfile']['name']);
if (move_uploaded_file($_FILES['userfile']['tmp_name'], uploadfile)) {
echo 'Dosya yüklemesi sorunsuz bir şekilde yapıldı';
}else {
echo 'Dosya yüklemesinde bir hata var. Hata Kodu:'.$_FILES['userfile']['error'];
}
echo 'Dosya ile ilgili ayrıntılı bilgi :&lt;br&gt;';
print_r($_FILES);
?>



Yukarıdaki kod ile form tarafından gönderilen dosya $uploadfile değişkeninde belirtilen yere kaydedilir. Bunun için kullanılan move_uploaded_file()fonksiyonu iki parametre alır. Birincisi yüklenecek dosya ismidir ve geçici dizine kaydedilen dosya adı ile verilmelidir. (Örneğimizdeki $_FILES['userfile']['tmp_name'] ). İkinci parametre ise dosyanın kaydedileceği dizindir. move_uploaded_file() dosya yüklemede yada dizine kopyalamada problem olursa False döner. Kopyalama işlemi başarıyla yapıldığında ise True döner. move_uploaded_file() kopyalanmak istenen dosya klasörde var ise bir uyarı vermeden üzerine yazar. Bu fonksiyonu kullanarak sadece PHP aracılığıyla yüklenmiş dosyaları kopyalayabiliriz.
Ek olarak is_uploaded_file() fonksiyonu kullanarak dosyanın POST yöntemiyle yüklenip yüklenmediğini kontrol edebiliriz. Fonksiyon dosya POST yöntemiyle yüklenmişse ve dosya ile ilgili bir güvenlik problemi yoksa True döner. Dosya yüklerken güvenlik kontrolu için bu dosya da kullanılmalıdır. Dosyanın sunucudaki geçici ismini $_FILES['userfile']['tmp_name'] arguman olarak alır.

<?php
$uploaddir= '/var/www/dosya/';
$uploadfile = $uploaddir.basename($_FILES['userfile']['name']);
if(is_uploaded_file($_FILES['userfile']['tmp_name'])) {
if(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo 'Dosya yüklemesi sorunsunz bir şekilde yapıldı';
}
else {
echo 'Dosya yüklemesinde bir hata var. Hata Kodu :'.$_FILES['userfile']['error'];
}/B>
}
else {
echo 'Dosya yükleme de bir sorun var. Bir saldırı olabilir!';
}
echo 'Dosya ile ilgili ayrıntılı bilgi :&lt;br&gt;';
print_r($_FILES);
?>

Aynı Anda Birden Fazla Dosya Yükleme

PHP ile aynı anda birden fazla dosya yüklenebilir. bunun için dosya yükleme formunun uygun şekilde yapılması gereklidir. Örneğin


<form action='' method='enctype=multipart/form-data'>
Resimler:
<input type='file' name='pictures[]'>
<input type='file' name='pictures[]'>
<input type='file' name='pictures[]'>
<form>

Form doldurulup gönderildiğinde dosyalara $_FILESdeğişkeni kullanarak ulaşabiliriz. Tek dosya yüklemesinden farklı olarak $_FILES['pictures']['name'],
$_FILES['pictures']['tmp_name'],
$_FILES['pictures']['size']
ve $_FILES['pictures']['type'] birer dizi (array) olarak oluşturulur.


$_FILES['pictures']['name'][0] İlk dosyanın adı
$_FILES['pictures']['name'][1] İkinci dosyanın adı
$_FILES['pictures']['name'][2] Üçüncü dosyanın adı

$_FILES['pictures']['size'][0] İlk dosyanın boyutu
$_FILES['pictures']['size'][1] İkinci dosyanın boytu
$_FILES['pictures']['size'][0] Üçüncü dosyanın boyutu


Birden çok dosyayı aşağıdakine benzer bir kodla sunucuya yükleyebiliriz.


<?php
foreach($_FILES['pictures']['error'] as $key => $error) {
if($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES['pictures']['tmp_name'][$key];
$name = $_FILES['pictures']['name'][$key];
move_uploaded_file($tmp_name,$name);
}
}
?>

İpuçları Öneriler

1) Php.ini deki upload_max_filesizebelirterciyle belirtilen boyuttan fazla boyuttaki dosyaları yüklenmeye çalışıldığında hata verir. Bu belirteci ihtiyaca göre ayarlanmalıdır.

2) Php.ini deki post_max_sizebelirtecinin değeri de dosya yüklemeleri etkiler. upload_max_filesizedeğeri post_max_size değerinden büyükse boyutu post_max_size değerinden büyük dosyalar yüklenirken hata verir.

3) Yüklenen dosya türlerini kontrol etmek güvenlik için önemlidir. Bu kontrolu $_FILES['userfile']['type'] değerini kullanarak yapabilirsiniz. Bu değer tarayıcı tarafından gönderildiği ve PHP bu değeri ayrıntılı kontrol etmediği için olması gereken değerinden farklı gönderilebilir. Kullanıcı çalıştırılabilir bir dosya (Örneğin php dosyası) image/gif gibi yükleyip daha sonra bu dosyayı çalıştırıp sunucunuzda işlem yapabilir. Daha güvenli kontrol için mime_content_type() ,getimagesize() gibi fonksiyonları kullanılarak dosya türü hakkında daha doğru bilgi alınabilir.

4) Max_input_time belirteci bir betiğin girdi (input) alırken geçirebileceği azami süreyi belirtir. Bu süre yavaş bağlantılarda boyutu büyük dosyaları yükleme sırasında geçilebilir ve bu durum dosya yüklenmesine engel olur.

5) Farklı dosya sistemleri ve listeleme türleri olduğu için dosya isimlerinde boşluk, Türkçe karakter kullanılan dosyaların işlemlerinde hata olabilir.
__________________
Sayfa başına dön Aşağa gitmek
http://watan06ankara.go-forum.net
 
PHP İle Sunucuya Dosya Yükleme (File Upload)
Sayfa başına dön 
1 sayfadaki 1 sayfası

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
http://turkiyecafe.77forum.com Açılmıstır :: Bilgisayar ve Teknoloji Dünyası :: Bilgisayar ve Teknoloji Dünyası :: Web Programlama :: Php-
Buraya geçin: