Aramayan Bulamaz
×

Merhaba, önceki konumda resim upload ve boyutlandırma classını anlatmıştım. Bu konuda aynı classı kullanarak birden fazla resmi nasıl upload edeceğimizi anlatacağım.

İlk önce boş bir html açalım ve içine şunları yazalım:

<form action="upload.php">
  <input type="file" name="resim[]" multiple> <input type="submit" value="Yükle">
</form>
Inputun name kısmında [] böyle bir ifade kullandık, bu resim nameinin array tipli olacağını gösterir. Yani bu değer upload.php dosyasına içinde birden fazla veri bulunan bir dizi değişkeni olarak gönderilecek.
upload.php dosyasına da içine de şunları yazalım:
include 'resim.class.php';
$upload  =  new ResimIslem();
foreach($_FILES["resim"]["name"] as $n => $name) {
  if(!empty($name)) {
    echo $upload->resim_upload($_FILES["resim"]["name"][$n],$_FILES["resim"]["tmp_name"][$n],$_FILES["resim"]["error"][$n],'resim-dizini','dosya ismi - '.$n,1920,1200)."
"; } }

resim.class.php bizim ResimIslem sınıfının bulunduğu dosya. Html formdan resim[] nameinin değeri array tipli geldiği için foreach ile bunu döngüye alıp dizinin indis numarasını $n değişkenine, gelen dosya ismini de $name değişkenine atadık. Döngü içinde dosya adını kontrol ettirdik, dosya ismi boş değilse resim_upload() fonksiyonunu çağırdık ve upload işlemi gelen her dosya için döngü boyunca tek tek yapıldı.

$_FILES["resim"]["name"][$n] şeklinde kullanmamızın sebebi de $n ilk sıfırdan başıyor ve döngü boyunca her defasında 1 artıyor. $_FILES["resim"]["name"][0] gelen ilk dosyanın bilgisini $_FILES["resim"]["name"][1] ikinci dosyanın bilgisini $_FILES["resim"]["name"][3] üçündü dosyanın bilgisini verecek şekilde devam ediyor. Döngü kullanmamızın sebebi bu sayıyı döngü boyunca artırıp çoklu upload işlemini sağlamak.

Bunları da okumak isteyebilirsiniz

4 Yorum

image

şenol

04 Ocak 2017 05:11

güzel bir çalışma fakat dik resimlerde çalışmıyor dikresimlerde yüklendiğinde yatay geliyor

image

Cryptograph

05 Ocak 2017 05:32

Merhaba, önceki konumda anlatmış olduğum resim.class.php dosyasının güncel hali aşağıdaki gibi, aynı konuda da ilgili kodların güncellemesini gerçekleştirdim. Bunlarla dik bir resimde denediğimde orantısını bozmadan yeniden boyutlandırarak upload işlemini gerçekleştirdim.

<?php
class ResimIslem{

    public function watermark($filigran, $source_file_path, $output_file_path )
    {
        list( $source_width, $source_height, $source_type ) = getimagesize( $source_file_path );

        if ( $source_type === NULL )
        {
            return false;
        }

        switch ( $source_type )
        {
            case IMAGETYPE_GIF:
                $source_gd_image = imagecreatefromgif( $source_file_path );
                break;
            case IMAGETYPE_JPEG:
                $source_gd_image = imagecreatefromjpeg( $source_file_path );
                break;
            case IMAGETYPE_PNG:
                $source_gd_image = imagecreatefrompng( $source_file_path );
                break;
            default:
                return false;
        }

        $overlay_gd_image = imagecreatefrompng($filigran);
        $overlay_width = imagesx( $overlay_gd_image );
        $overlay_height = imagesy( $overlay_gd_image );

        imagecopymerge(
            $source_gd_image,
            $overlay_gd_image,
            $source_width - $overlay_width,
            $source_height - $overlay_height,
            0,
            0,
            $overlay_width,
            $overlay_height,
            60
        );

        imagejpeg( $source_gd_image, $output_file_path, 100 );

        imagedestroy( $source_gd_image );
        imagedestroy( $overlay_gd_image );
    }


    public function resim_boyutlandir($resim,$k_resim,$max_en=1920,$max_boy=1200){
        // içeriği başlat..
        $resimdosyasi= pathinfo($resim);
        $uzanti=$resimdosyasi["extension"];
        ob_start();
        // ilk boyutlar..
        $boyut = getimagesize($resim);
        $en    = $boyut[0];
        $boy   = $boyut[1];
        // yeni boyutlar..
        $x_oran = $max_en  / $en;
        $y_oran = $max_boy / $boy;

        // boyutları orantıla..
        if (($en <= $max_en) and ($boy <= $max_boy)){
            $son_en  = $en;
            $son_boy = $boy;
        }
        elseif (($x_oran * $boy) < $max_boy){
            $son_en  = $max_en;
            $son_boy = ceil($x_oran * $boy);
        }
        else{
            $son_en  = ceil($y_oran * $en);
            $son_boy = $max_boy;
        }

        // uzantıya göre yeni resmi yarat..
        switch($uzanti){
            // jpg ve jpeg uzantılar için..
            case 'jpg':
            case 'jpeg':
                // eski ve yeni resimler..
                $eski = imagecreatefromjpeg($resim);
                $yeni = imagecreatetruecolor($son_en,$son_boy);
                // eski resmi yeniden oluştur..
                imagecopyresampled($yeni,$eski,0,0,0,0,$son_en,$son_boy,$en,$boy);
                // yeni resmi bas ve içeriği çek..
                imagejpeg($yeni,null,85);
                break;
            // png uzantılar için..
            case 'png':
                $eski = imagecreatefrompng($resim);
                $yeni = imagecreatetruecolor($son_en,$son_boy);
                imagealphablending($yeni, false);
                imagesavealpha($yeni, true);
                $transparent = imagecolorallocatealpha($yeni, $son_en, $son_boy, $en, $boy);
                imagefilledrectangle($yeni, 0, 0, $son_en, $son_boy, $transparent);
                imagecopyresampled($yeni,$eski,0,0,0,0,$son_en,$son_boy,$en,$boy);
                imagepng($yeni,null,-1);
                break;
            // gif uzantılar için..
            case 'gif':
                $eski = imagecreatefromgif($resim);
                $yeni = imagecreatetruecolor($son_en,$son_boy);
                imagealphablending($yeni, false);
                imagesavealpha($yeni, true);
                $transparent = imagecolorallocatealpha($yeni, $son_en, $son_boy, $en, $boy);
                imagefilledrectangle($yeni, 0, 0, $son_en, $son_boy, $transparent);
                imagecopyresampled($yeni,$eski,0,0,0,0,$son_en,$son_boy,$en,$boy);
                imagegif($yeni,null);
                break;
            default:
                $eski=null;
                $yeni=null;
                break;
        }

        $icerik = ob_get_contents();
        // resimleri yoket ve içeriği çıkart..
        ob_end_clean();
        imagedestroy($eski);
        imagedestroy($yeni);

        $dosya  = fopen($k_resim,"w+");

        fwrite($dosya,$icerik);

        fclose($dosya);

        return $icerik;
    }


    private function adlandir($baslik){
        $bul = array('Ç', 'Ş', 'Ğ', 'Ü', 'İ', 'Ö', 'ç', 'ş', 'ğ', 'ü', 'ö', 'ı', '-');
        $yap = array('c', 's', 'g', 'u', 'i', 'o', 'c', 's', 'g', 'u', 'o', 'i', ' ');
        $perma = strtolower(str_replace($bul, $yap, $baslik));
        $perma = preg_replace("@[^A-Za-z0-9\-_]@i", ' ', $perma);
        $perma = trim(preg_replace('/s+/',' ', $perma));
        $perma = str_replace(' ', '-', $perma);
        return $perma;
    }

    public function resim_upload($file_name,$file_tmp,$file_error,$file_path,$name,$en=1920,$boy=1200,$filigran=null){

        $resimdosyasi= pathinfo($file_name);
        $uzanti=$resimdosyasi["extension"];

        $yeni_ad = $this->adlandir($name);

        $yeni = $yeni_ad.'.'.$uzanti;

        $max_en = $en;
        $max_boy = $boy;

        $b_resim = $file_path.'/orijinal-'.$yeni;
        $k_resim = $file_path.'/'.$yeni;

        if($uzanti=='jpg' or $uzanti=='jpeg' or $uzanti=='png' or $uzanti=='gif'){

            if($file_error==0){
                move_uploaded_file($file_tmp,$b_resim);

                $this->resim_boyutlandir($b_resim,$k_resim,$max_en,$max_boy);

                @unlink($b_resim);
                ///chmod($file_path, 755);

                if($filigran!=null){
                    $this->watermark($filigran,$k_resim,$k_resim);
                }

                return $yeni;
            }
            else return $file_error;
        }

        else{
            @unlink($k_resim);
            return false;
        }
    }
}

image

zafer

16 Haziran 2018 23:00

upload.php de

foreach($_FILES["resim"]["name"] as $n => $name) {

de hata mesajı veriyor..

yardımcı olursan sevinirim..

image

Cryptograph

17 Temmuz 2018 00:02

Yükleme yapılacak dizinin yazılabilirlik izinlerini kontrol ettiniz mi veya hata loglarına baktınız mı?

Bu gibi problemler genelde yükleme yapılacak dizinin yazılabilir olmamasından kaynaklanabilmektedir. Hata loglarını kontrol edebilirseniz sorunun çözümüne daha çabuk ulaşabilirsiniz.

Sen de bir yorum bırak