Yenilikleri, isteklerinizin aşamalarını görebilirsiniz.
Arkadaşlar tabi ki konularınızı; başlık, açıklama ve düzenli bir kod dökümanı halinde ilettiğiniz takdirde paylaşırız. Bunun için info@phpmutfagi.com mail adresine yazmanız yeterlidir. Sadece tek şartımız herkesin anlayacağı bir dilde anlatmanız (Konularınızı iletirken lütfen imzanızı da gönderin. İsim soyisim, varsa linkedin veya başka bir sosyal medya hesabınız).
31-12-2022
Php derslerinde, php hazır kodlarda, php hatalarda ve ya tüm konularda hızlıca arama yaparak aradığınıza hızlıca ulaşabilirsiniz.
Yayın Tarihi
Arkadaşlar tabi ki konularınızı; başlık, açıklama ve düzenli bir kod dökümanı halinde ilettiğiniz takdirde paylaşırız. Bunun için info@phpmutfagi.com mail adresine yazmanız yeterlidir. Sadece tek şartımız herkesin anlayacağı bir dilde anlatmanızdır.
Konularınızı iletirken lütfen imzanızı da gönderin. (İsim soyisim, varsa linkedin veya başka bir sosyal medya hesabınız)
Php ile resim yüklemek $_FILES
methodu ile gerçekleşir, oldukça basit ve anlaşılırdır. Tamamen düz bir yapıya sahiptir. Tek dikkat edilmesi gereken husus; kullanıcıdan sunucuya bir dosya, resim vb. yüklettiğimiz için güvenliğine dikkat etmeliyiz. if-else yapıları ile belirli bir kontrollerden geçirmemiz gerekmektedir.
Post yöntemi ile normal bir html form kullanarak resmi gönderip ve kontrol sağlayıp yükleme işlemini gerçekleştireceğiz.
Form'a bir dosya post edeceğimizi belirtmek zorundayız. Form tagına "enctype" methoduna "multipart/form-data" parametresini ekleyeceğiz. Bu sayede form bizim dosya göndereceğimizi anlayacak.
$_FILES
methodu ile gönderilen resmin türünü, boyutunu, adını vb. bilgileri öğrenebiliriz. Bunları sağlayan yan methodları aşağıdaki gibidir.
Adı | Kullanımı | Görevi |
---|---|---|
name | $_FILES["input_name"]["name"] |
Gönderilen dosyanın adı |
tmp_name | $_FILES["input_name"]["tmp_name"] |
Gönderilen dosyanın geçici olarak sunucuda barındığı yol |
size | $_FILES["input_name"]["size"] |
Gönderilen dosyanın boyutu (bayt cinsinden) |
type | $_FILES["input_name"]["type"] |
Gönderilen dosyanın tipi(jpg, png, xls, vb.) |
error | $_FILES["input_name"]["error"] |
Dosya gönderilirken gerçekleşen hata ve hata kodu |
Aşağıda basit bir html form sayfası hazırladık. form.php sayfası olarak kayıt ettik ve yukle.php adresine post ettik.
<
><html>
<head>
<title>Form Sayfası | Resim Yükleme</title>
</head>
<body>
<form action="yukle.php" method="post" enctype="multipart/form-data">
<input type="file" name="resim" />
<button type="submit">YÜKLE</button>
</form>
</body>
</html>
Şimdide size yukle.php sayfasındaki $_FILES methodunun çalışma mantığını gösterelim.
<?php
if (isset($_FILES['resim'])) {
//Eğer form tagına enctype="multipart/form-data" bunu eklemeseydik if e girmez direk elseye giderdi.
echo 'Resim gönderilmiştir. <br />';
var_dump($_FILES['resim']);
/* Resim seçilerek gönderildiğinde EKRAN ÇIKTISI:
Resim gönderilmiştir.
C:\wamp64\www\test\yukle.php:5:
array (size=5)
'name' => string 'black.png' (length=9)
'type' => string 'image/png' (length=9)
'tmp_name' => string 'C:\wamp64\tmp\php2D32.tmp' (length=25)
'error' => int 0
'size' => int 89509
************************
Resim seçilmeden gönderildiğinde EKRAN ÇIKTISI:
Resim gönderilmiştir.
C:\wamp64\www\test\yukle.php:5:
array (size=5)
'name' => string '' (length=0)
'type' => string '' (length=0)
'tmp_name' => string '' (length=0)
'error' => int 4
'size' => int 0
## Gene ekran çıktısı verir ancak boş değerler döner.
*/
} else
echo 'Resim gönderilmemiştir. Lütfen resim seçiniz.';
?>
<
><html>
<head>
<title>Form Sayfası | Resim Yükleme</title>
</head>
<body>
<form action="yukle.php" method="post" enctype="multipart/form-data">
<input type="file" name="resim" />
<button type="submit">YÜKLE</button>
</form>
</body>
</html>
<?php
if (isset($_FILES['resim'])) {
$hata = $_FILES['resim']['error']; //resim inputundan gönderilen hatayı aldık.
if ($hata != 0) { // hata kontrolü gerçekleştirdik.
echo 'Resim gönderilirken bir hata gerçekleşti.';
} else {
$resimBoyutu = $_FILES['resim']['size']; // resim boyutunu öğrendik
if ($resimBoyutu > (1024 * 1024 * 2)) {
//buradaki işlem aslında bayt, kilobayt ve mb formülüdür.
//2 rakamını mb olarak görün ve kaç yaparsanız o mb anlamına gelir.
//Örn: (1024 * 1024 * 3) => 3MB / (1024 * 1024 * 4) => 4MB
echo 'Resim 2MB den büyük olamaz.';
} else {
$tip = $_FILES['resim']['type']; //resim tipini öğrendik.
$resimAdi = $_FILES['resim']['name']; //resmin adını öğrendik.
$uzantisi = explode('.', $resimAdi); // uzantısını öğrenmek için . işaretinden parçaladık.
$uzantisi = $uzantisi[count($uzantisi) - 1]; // ve daha sonra 1 den fazla nokta olma ihtimaline karşı en son noktadan sonrasını al dedik.
$yeni_adi = "upload/" . time() . "." . $uzantisi; // resime yeni isim vereceğimiz için zamana göre yeni bir isim oluşturduk ve yüklemesi gerektiği yeride belirttik.
//yuklenecek_yer/resim_adi.uzantisi
if ($tip == 'image/jpeg' || $tip == 'image/png') { //uzantısnın kontrolünü sağladık. sadece .jpg ve .png yükleyebilmesi için.
if (move_uploaded_file($_FILES["resim"]["tmp_name"], $yeni_adi)) {
//tmp_name ile resmi bulduk ve $yeni_adi değişkeninin değerine göre yükleme işlemini gerçekleştirdik.
echo "Resim başarılı bir şekilde yüklendi.";
} else echo 'Resim yüklenirken bir hata oluştu.';
} else {
echo 'Yanlızca JPG ve PNG resim gönderebilirsiniz.';
}
}
}
}
?>