كيف يمكنني تخزين واسترجاع الصور من قاعدة بيانات MySQL باستخدام PHP?

StackOverflow https://stackoverflow.com/questions/1636877

  •  06-07-2019
  •  | 
  •  

سؤال

كيف يمكنني إدراج صورة في الخلية ومن ثم استرجاعها باستخدام PHP?

لدي خبرة محدودة في أي منطقة ، وأنا لا يمكن استخدام رمز صغير أن يحصل لي بدأت في كشف هذا الخروج.

هل كانت مفيدة؟

المحلول

أولا عليك إنشاء جدول الخلية لتخزين الصور، منها على سبيل المثال:

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 ''
);

وبعد ذلك يمكنك إرسال صورة إلى قاعدة البيانات مثل:

/***
 * All of the below MySQL_ commands can be easily
 * translated to MySQLi_ with the additions as commented
 ***/ 
$imgData = file_get_contents($filename);
$size = getimagesize($filename);
mysql_connect("localhost", "$username", "$password");
mysql_select_db ("$dbname");
// mysqli 
// $link = mysqli_connect("localhost", $username, $password,$dbname); 
$sql = sprintf("INSERT INTO testblob
    (image_type, image, image_size, image_name)
    VALUES
    ('%s', '%s', '%d', '%s')",
    /***
     * For all mysqli_ functions below, the syntax is:
     * mysqli_whartever($link, $functionContents); 
     ***/
    mysql_real_escape_string($size['mime']),
    mysql_real_escape_string($imgData),
    $size[3],
    mysql_real_escape_string($_FILES['userfile']['name'])
    );
mysql_query($sql);

ويمكنك عرض صورة من قاعدة بيانات في صفحة ويب مع:

$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);

نصائح أخرى

وبدلا من تخزين الصور في قاعدة بيانات تخزينها في مجلد في القرص وتخزين موقعها في قاعدة البيانات الخاصة بك.

حذار أن خدمة الصور من DB عادة بكثير ، كثيرا أبطأ من خدمة لهم من القرص.

عليك أن تكون بداية PHP عملية فتح DB الصدد وجود DB قراءة بيانات الصورة من نفس قرص ذاكرة الوصول العشوائي ذاكرة التخزين المؤقت الملفات كما قد نقل أنه على مدى عدة مآخذ ومخازن ثم دفع بها عبر PHP, التي بشكل افتراضي يجعل من غير cacheable ويضيف النفقات العامة HTTP المقسم الترميز.

OTOH الحديثة ملقمات ويب يمكن أن تكون الصور مع عدد قليل الأمثل نواة المكالمات (الذاكرة المعنونة الملف وأن الذاكرة المنطقة مرت إلى مكدس TCP), بحيث لا حتى نسخ الذاكرة حول ولا يوجد تقريبا النفقات العامة.

هذا هو الفرق بين أن تكون قادرة على خدمة 20 أو 2000 الصور في نفس الوقت على جهاز واحد.

حتى لا تفعل ذلك إلا إذا كنت في حاجة على الإطلاق سلامة المعاملات (و في الواقع حتى يمكن القيام به فقط مع الصورة الوصفية في ديسيبل و الملفات تنظيف الروتين) و تعرف كيفية تحسين PHP التعامل مع HTTP أن تكون مناسبة الصور.

وأنا أيضا يوصي هذا التفكير من خلال وثم اختيار لتخزين الصور في نظام الملفات الخاص بك بدلا من DB .. نرى هنا: تخزين الصور في DB - نعم أو كلا

رأيي هو, بدلا من تخزين الصور مباشرة إلى قاعدة البيانات ، فمن المستحسن تخزين موقع الصورة في قاعدة البيانات.كما قارنا كل الخيارات تخزين الصور في قاعدة بيانات آمنة لأغراض أمنية.العيب هي

  1. إذا تلف قاعدة البيانات ، أي طريقة لاسترداد.

  2. استرجاع ملفات الصور من db بطيء عند مقارنتها مع غيرها من الخيار.

من ناحية أخرى, تخزين ملف صورة في موقع db سوف يكون المزايا التالية.

  1. فمن السهل لاسترداد.

  2. إذا كان أكثر من واحد يتم تخزين الصور ، يمكننا بسهولة استرداد معلومات الصورة.

وأنا شخصيا لن أعود تخزين الصورة في قاعدة البيانات، بدلا من وضعها في مجلد لا يمكن الوصول إليها من الخارج، واستخدام قاعدة بيانات لتتبع موقعه. يبقي حجم قاعدة البيانات أسفل ويمكنك تضمين فقط عليه باستخدام PHP. لن يكون هناك أي شكل من الأشكال دون PHP للوصول إلى صورة ثم

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top