Nasıl depolamak ve PHP kullanarak bir MySQL veritabanı görüntüleri alabilirsiniz?

5 Cevap php

Nasıl MySQL bir görüntü ekleyebilirsiniz ve sonra PHP kullanarak almak?

Ben iki alanda sınırlı deneyimi var ve ben bana bu sergiyi başlamak için küçük bir kod kullanabilirsiniz.

5 Cevap

Makale Storing Images in MySQL Revisited bir yol gösterir. Önce örneğin gibi, görüntüleri depolamak için bir MySQL tablo oluşturun:

create table testblob (
    image_id        tinyint(3)  not null default '0',
    image_type      varchar(25) not null default '',
    image           blob        not null,
    image_size      varchar(25) not null default '',
    image_ctgy      varchar(25) not null default '',
    image_name      varchar(50) not null default ''
);

Sonra veritabanı gibi bir görüntü yazabilirsiniz:

$imgData = file_get_contents($filename);
$size = getimagesize($filename);
mysql_connect("localhost", "$username", "$password");
mysql_select_db ("$dbname");
$sql = sprintf("INSERT INTO testblob
    (image_type, image, image_size, image_name)
    VALUES
    ('%s', '%s', '%d', '%s')",
    mysql_real_escape_string($size['mime']),
    mysql_real_escape_string($imgData),
    $size[3],
    mysql_real_escape_string($_FILES['userfile']['name'])
    );
mysql_query($sql);

Sen bir web sayfasında veritabanından bir resim görüntüleyebilirsiniz:

$link = mysql_connect("localhost", "username", "password");
mysql_select_db("testblob");
$sql = "SELECT image FROM testblob WHERE image_id=0";
$result = mysql_query("$sql");
header("Content-type: image/jpeg");
echo mysql_result($result, 0);
mysql_close($link);

Bunun yerine veritabanında görüntüleri depolamak sizin diskinizdeki bir klasöre saklayın ve veri tabanı kendi konumunu saklamak.

Diskten onlara hizmet daha much yavaş, DB görüntüleri hizmet genellikle çok olduğunu unutmayın.

DB dosya sistemi olarak önbellek için aynı disk ve RAM kullanımı olan, db bağlantıları yaratma, PHP işlemine başlamadan olacak, birkaç priz ve tamponların üzerine aktarılması ve daha sonra varsayılan olarak önbelleklenebilir olmayan yapar ve PHP yoluyla dışarı iterek ekler olur yığın halinde HTTP kodlama yükü.

Onlar bile geçici bellek kopya yok ve hemen hemen hiç tepegöz var o kadar OTOH modern web sunucuları, sadece birkaç optimize çekirdek çağrıları (hafıza-eşlenmiş dosya ve TCP yığını geçti bellek alanı) ile görüntüleri hizmet edebilir.

Yani ortalama makinede paralel 20 veya 2000 görüntüleri hizmet arasında fark var.

So don't do it kesinlikle (ve aslında bile DB sadece görüntü meta ile yapılır ve dosya sistemi temizleme rutinleri olabilir) ve görüntüler için uygun olması HTTP PHP'nin hakimiyetini artırmak için nasıl işlem bütünlüğünü gerekmedikçe.

Şahsen ben, veritabanında görüntü saklamak olmaz Bunun yerine dışarıdan erişilebilir değil bir klasöre koyun ve konumu izleyebilmek için veritabanını kullanır. Aşağı veritabanı boyutunu tutar ve sadece PHP kullanarak ekleyebilirsiniz. O görüntüyü erişmek için PHP olmadan hiçbir yolu yok olacaktı

Benim görüşüm yerine doğrudan veritabanına görüntüleri depolama, Bu veritabanında görüntü konumunu saklamak için tavsiye edilir, olduğunu. Biz de seçenekleri karşılaştırmak gibi, veritabanında görüntüleri saklanması güvenlik amacıyla güvenli. Dezavantajı vardır

  1. Veritabanı bozuksa, hiçbir yol almak.

  2. Diğer seçenek karşılaştırmak db görüntü dosyaları alınıyor yavaş.

Öte yandan, db resim dosya konumunu depolama aşağıdaki avantajlara sahip olacaktır.

  1. Bu almak kolaydır.

  2. Birden fazla görüntüleri saklanır, biz kolayca görüntü bilgileri alabilirsiniz.