كيف أقوم بإنشاء معرض صور مدعوم بـ PHP/MySQL من البداية؟

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

  •  22-07-2019
  •  | 
  •  

سؤال

تم طرح هذا السؤال قبل ذكر lib أو تضمينه الذي يوفر معرضًا وظيفيًا، لكني أريد إنشاء معرض من البداية.لذلك أي أفكار بشأن ما يلي

  1. يجب تحميل المعارض باستخدام النموذج والتصفح (لا أجد أي مشكلة في هذا، فقط أحتاج إلى وجوده لتوضيح الخطوات)
  2. يجب إنشاء صورة مصغرة عند تحميل ملف.
  3. كيف ينبغي تنظيمها في قاعدة البيانات، على سبيل المثال تخزينها في قاعدة البيانات كصورة أو اسم ملف

المتطلبات

  • فقط PHP و MySql

أيه أفكار؟واسمحوا لي أن أعرف إذا كان لا يمكن القيام بذلك أيضًا: د

شكرًا

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

المحلول

سأحاول الإجابة على أسئلتك:


السؤال رقم 1

هذا الجزء هو في الواقع بسيط.لإنشاء نموذج تحميل ملف، يجب أن يبدو HTML الخاص بك كما يلي:

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

يجب أن يكون النموذج الخاص بك enctype='multipart/form-data' و ال method يجب أن يكون POST.وبعد ذلك، لقراءة ملف التحميل، يمكنك ببساطة استخدام ما يلي.لقد أضفت أيضًا بعض عمليات التحقق الأساسية للتأكد من أن الملف عبارة عن صورة.

 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";
     }
 }

السؤال 2

لإنشاء صورة مصغرة، يمكنك استخدام GD (أو ImageMagick، ولكن لم يتم تضمينه في التكوين الافتراضي) على هذا النحو...دعونا نواصل من imagecreatefromstring if إفادة:

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
}

السؤال 3

هنا لديك خياران.يمكنك إما تخزين الصور الخاصة بك في نظام الملفات أو في قاعدة البيانات.لتخزين صورتك في نظام الملفات، يمكنك القيام بما يلي:

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

أنا شخصياً أفضّل استخدام قاعدة البيانات لتخزين الصور لأنه من الأسهل الحفاظ على التكامل المرجعي وجعل النسخ الاحتياطي أسهل (قم بعمل نسخة احتياطية لقاعدة البيانات وبذلك تكون قد انتهيت).إنه أبطأ قليلاً، لكن الفرق ليس كبيرًا حقًا:

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) . "');");
} 

الحقول يجب أن تكون BLOB.

نصائح أخرى

من المؤكد تقريبًا أنك تريد تخزين الصور في نظام الملفات ثم قم فقط بالإشارة إلى اسم الملف\المسار في إدخال قاعدة البيانات - فهو يحافظ على انخفاض أحجام نتائج الاستعلام، خاصة إذا كنت تريد سحب المعلومات لصور متعددة.كما أنه يجعل من السهل جدًا استدعاء أشياء مثل imagemagick إذا كنت تريد استخدامها لإنشاء صور مصغرة.

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