Nasıl sıfırdan bir PHP / MySQL destekli resim galerisi oluşturmak mı?

3 Cevap php

Bu soru lib söz etmeden önce sordu ya da işlevsel bir galeri sağlar, Ama sıfırdan oluşturmak istediğiniz içerir olmuştur. Yani aşağıdaki üzerinde herhangi bir fikir

  1. Galeriler (Bu ben sadece bu adımları anahat orada olması gerekir, hiçbir sorunla bulabilirsiniz) Form ve Gözat'ı kullanarak tarih olması gerekir
  2. Bir dosya karşıya yüklendiğinde, bir küçük resim oluşturulur olması gerekir.
  3. Nasıl Örneğin görüntü veya dosya gibi DB saklanan, Veritabanı yapılandırılmalıdır

İhtiyaçlara

  • Sadece PHP ve MySQL

Herhangi bir fikir? D: o kadar iyi yapılabilir olamaz varsa bana bildirin lütfen

Teşekkürler

3 Cevap

Ben sizin sorularınızı cevaplamak için girişimi için gidiyorum:


Question 1

Bu kısım aslında basit. Bir dosya yükleme formu oluşturmak için, HTML böyle bakmak gerekiyor:

 <form enctype='multipart/form-data' action='CodeTool.php' method='POST'>
     File: <input name='picture' type='file'/>
     <input type='submit' value='Upload'/>
 </form>

Kişisel bir şekilde enctype='multipart/form-data' ve method olması gerekmektedir olması gerekir POST. Ardından, yükleme dosyasını okumak için, sadece aşağıdakileri kullanabilirsiniz. Ben de dosya bir görüntü olduğundan emin olmak için bazı temel doğrulama ekledik.

 if(isset($_FILES['picture'])) {
     echo "File has been uploaded under temp file " . $_FILES['picture']['tmp_name'];

     // Let's check if the file is an image:
     $fileData = file_get_contents($_FILES['picture']['tmp_name']);

     // Using imagecreatefromstring, that way you don't need to
     // guess the image format.

     if(($img = @imagecreatefromstring($fileData)) !== FALSE) {
         echo " and is a valid image";
     } else {
         echo " and is not a valid image";
     }
 }


Question 2

Bir küçük resim oluşturmak için gibi, sen GD kullanabilirsiniz (veya ImageMagick, ancak varsayılan yapılandırmasına dahil değildir) ... Hadi imagecreatefromstring if deyimi devam edelim:

if(($img = @imagecreatefromstring($fileData)) !== FALSE) {
    // Let's create a 100x100 thumbnail
    $width = imagesx($img);
    $height = imagesy($img);

    $boxSize = min($width,$height);
    $boxX = ($width / 2) - ($boxSize / 2);
    $boxY = ($height / 2) - ($boxSize / 2);

    $thumb = imagecreatetruecolor(100, 100);
    imagecopyresampled($thumb, $img, 0, 0, $boxX, $boxY, 100, 100, $boxSize, $boxSize);

    //$thumb is now a 100x100 thumbnail
}


Question 3

Burada 2 seçeneğiniz var. Ya dosya sisteminde veya veritabanındaki görüntüleri depolamak. Dosya sisteminde görüntü saklamak için, aşağıdakileri yapabilirsiniz:

if(($img = @imagecreatefromstring($fileData)) !== FALSE) {
    move_uploaded_file($_FILES['picture']['tmp_file'], 'somefile.jpg');
    // the code from the previous example
    imagejpeg($thumb, 'somefile_thumb.jpg');
}

Ben şahsen başvuru bütünlüğünü korumak için daha kolay ve yedekleme basit hale getirir (yedek veritabanı ve yapılır) gibi görüntüleri depolamak için veritabanı kullanmayı tercih. Biraz daha yavaş, ama fark gerçekten büyük değil:

if(($img = @imagecreatefromstring($fileData)) !== FALSE) {
    // the code from the previous example

    $tmp_thumb = tempnam(sys_get_temp_dir(), 'thumb');
    imagejpeg($thumb, $tmp_thumb);

    $thumbData = file_get_contents($tmp_thumb);

    mysql_query("INSERT INTO images (original, thumb) VALUES ('" . mysql_real_escape_string($fileData) . "', '" . mysql_real_escape_string($thumbData) . "');");
}

Alanlar olması gerekiyor BLOB.

Sen neredeyse kesinlikle dosya sistemindeki görüntüleri depolamak ve sonra sadece DB girdisinde dosya \ yolunu başvurmak istiyorum gidiyoruz - bu sorgu sonucu aşağı boyutları tutar, birden çok görüntü için bilgi çekmek istiyorum özellikle. Ayrıca küçük oluşturmak için kullanmak istiyorsanız o kadar kolay imagemagic'den gibi şeyler çağırmak için yapar.