Binary Large Object (BLOB) به معنی شئ بزرگ دودویی، یک نوع داده MySQL است که می تواند داده های باینری مانند تصاویر ، چندرسانه ای و فایل های PDF را ذخیره کند.
هنگام ایجاد برنامه هایی که نیاز به یک بانک اطلاعاتی منسجم دارند که در آن تصاویر باید با داده های مرتبط هماهنگ شوند (به عنوان مثال ، یک پورتال کارمند ، یک پایگاه داده دانشجویی یا یک برنامه مالی) ، ذخیره کردن تصاویر مانند عکس گذرنامه دانشجویی و امضاها در یک پایگاه داده MySQL در کنار سایر اطلاعات مرتبط میتواند راحت باشد.
اینجاست که نوع داده MySQL BLOB وارد می شود. این رویکرد برنامه نویسی نیاز به ایجاد یک سیستم فایل جداگانه برای ذخیره تصاویر را از بین می برد. این طرح همچنین پایگاه داده را متمرکز کرده و آن را قابل حمل تر و ایمن تر می کند زیرا داده ها از سیستم فایل جدا شده اند. ایجاد نسخه پشتیبان نیز نیز آسان تر است زیرا می توانید یک فایل MySQL dump ایجاد کنید که شامل تمام داده های شما باشد.
بازیابی اطلاعات سریعتر است و هنگام ایجاد سوابق می توانید مطمئن باشید که قوانین اعتبار سنجی داده ها و تمامیت ارجاع به ویژه هنگام استفاده از معاملات MySQL حفظ می شوند.
در این آموزش از نوع داده MySQL BLOB برای ذخیره تصاویر با PHP در اوبونتو 18.04 استفاده می کنید.
پیش نیازها
برای پیروی از این راهنما به موارد زیر نیاز دارید:
سرور مجازی Ubuntu 18.04 که با استفاده از راهنمای ستاپ اولیه سرور با Ubuntu 18.04 تنظیم و شامل یک کاربر غیر ریشه با امتیازات sudoباشد.
⦁ Apache ، MySQL و PHP که طبق راهنمای نحوه نصب پشته Linux ، Apache ، MySQL ، PHP (LAMP) در اوبونتو 18.04 تنظیم شده باشند. برای این آموزش ، نیازی به ایجاد هاست مجازی نیست ، بنابراین می توانید مرحله 4 را نادیده بگیرید.
مرحله 1 – ایجاد یک بانک اطلاعاتی
با ایجاد یک پایگاه داده نمونه برای پروژه خود شروع می کنید. برای این کار ، به سرور مجازی خود SSH کرده و دستور زیر را اجرا کنید تا به عنوان ریشه به سرور مجازی MySQL خود وارد شوید:
⦁ $ sudo mysql -u root -p

رمز عبور ریشه پایگاه داده MySQL خود را وارد کرده و برای ادامه ، ENTER بزنید.
سپس دستور زیر را برای ایجاد بانک اطلاعاتی اجرا کنید. در این آموزش ما آن را test_company می نامیم:
⦁ Mysql> CREATE DATABASE test_company;

پس از ایجاد دیتابیس ، خروجی زیر را مشاهده خواهید کرد:
Output
Query OK, 1 row affected (0.01 sec)

در مرحله بعد ، یک حساب test_user در سرور مجازی MySQL ایجاد کنید و به یاد داشته باشید که PASSWORD را با یک رمزعبور قوی جایگزین کنید:
⦁ Mysql> CREATE USER ‘test_user’@’localhost’ IDENTIFIED BY ‘PASSWORD’;

خروجی زیر را مشاهده خواهید کرد:
Output
Query OK, 0 rows affected (0.01 sec)

برای اعطای امتیازات کامل به test_user در پایگاه داده test_company ، این دستور را اجرا کنید:
⦁ Mysql> GRANT ALL PRIVILEGES ON test_company.* TO ‘test_user’@’localhost’;

اطمینان حاصل کنید که خروجی زیر را دریافت می کنید:
Output
Query OK, 0 rows affected (0.01 sec)

سرانجام ، جدول امتیازات را flush کنید تا MySQL مجدداً مجوزها را لود کند:
⦁ Mysql> FLUSH PRIVILEGES;

اطمینان حاصل کنید که خروجی زیر را مشاهده می کنید:
Output
Query OK, 0 rows affected (0.01 sec)

اکنون که پایگاه داده test_company و test_user آماده هستند ، می توانید به سراغ ایجاد جدول محصولات برای ذخیره سازی نمونه محصولات بروید. بعداً از این جدول برای درج و بازیابی سوابق برای نشان دادن نحوه کار MySQL BLOB استفاده خواهید کرد.
از سرور مجازی MySQL خارج شوید:
⦁ Mysql> QUIT;

سپس ، مجدداً با اعتبارات test_user که ایجاد کردید وارد سیستم شوید:
⦁ $ mysql -u test_user -p

هنگامی که از شما خواسته شد ، رمز عبور test_user را وارد کنید و برای ادامه ENTER را بزنید. سپس ، با تایپ دستور زیر به پایگاه داده test_company بروید:
⦁ Mysql> USE test_company;

پس از انتخاب پایگاه داده test_company ، MySQL نمایش داده می شود:
Output
Database changed

سپس ، با اجرای دستور زیر یک جدول محصولات ایجاد کنید:
⦁ Mysql> CREATE TABLE `products` (product_id BIGINT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(50), price DOUBLE, product_image BLOB) ENGINE = InnoDB;

این دستور یک جدول با نام محصولات ایجاد می کند. جدول دارای چهار ستون است:
⦁ product_id: این ستون از یک نوع داده BIGINT استفاده می کند تا بتواند لیست بزرگی از محصولات را تا حداکثر 2⁶³-1 آیتم در خود جای دهد. برای تعیین منحصر به فرد محصولات ، این ستون را به عنوان PRIMARY KEY علامت گذاری کرده اید. برای اینکه MySQL بتواند نسل شناساگرهای جدید ستون های درج شده را مدیریت کند ، از کلمه کلیدی AUTO_INCREMENT استفاده کرده اید.
⦁ product_name: این ستون نام محصولات را در خود جای داده است. از نوع داده VARCHAR استفاده کرده اید ، زیرا این فیلد به طور کلی تا حداکثر 50 کاراکتر را مدیریت خواهد کرد – حد 50 فقط یک مقدار فرضی است که در این آموزش استفاده می شود.
⦁ price: برای اهداف نمایشی ، جدول محصولات شما شامل ستون قیمت برای ذخیره قیمت خرده فروشی محصولات است. از آنجا که ممکن است برخی محصولات دارای مقادیر شناور باشند (برای مثال ، 23.69 ، 45.36 ، 102.99) ، از نوع داده DOUBLE استفاده کرده اید.
⦁ product_image: این ستون از یک نوع داده BLOB برای ذخیره داده های باینری واقعی تصاویر محصولات استفاده می کند.
برای پشتیبانی از طیف گسترده ای از ویژگی ها از جمله معاملات MySQL از ENGINE ذخیره سازی InnoDB استفاده کرده اید. پس از اجرای این برای ایجاد جدول محصولات ، خروجی زیر را مشاهده خواهید کرد:
Output
Query OK, 0 rows affected (0.03 sec)
از سرور مجازی MySQL خود خارج شوید:
⦁ mysql> QUIT;

خروجی زیر را دریافت خواهید کرد
Output
Bye
در حال حاضر جدول محصولات برای ذخیره برخی سوابق از جمله تصاویر محصولات آماده است و در مرحله بعدی آن را با برخی محصولات پر می کنید.
مرحله 2 – ایجاد اسکریپت های PHP برای اتصال و پر کردن بانک اطلاعاتی
در این مرحله ، یک اسکریپت PHP ایجاد خواهید کرد که به پایگاه داده MySQL که در مرحله اول 1 ایجاد کرده اید متصل خواهد شد. اسکریپت سه محصول نمونه را آماده کرده و آنها را در جدول محصولات قرار می دهد.
برای ایجاد کد PHP ، یک فایل جدید را با ویرایشگر متن خود باز کنید:
⦁ $ sudo nano /var/www/html/config.php

سپس اطلاعات زیر را در فایل وارد کرده و PASSWORD را با گذرواژه test_user که در مرحله 1 ایجاد کرده اید جایگزین کنید:
/var/www/html/config.php
<?php

define(‘DB_NAME’, ‘test_company’);
define(‘DB_USER’, ‘test_user’);
define(‘DB_PASSWORD’, ‘PASSWORD’);
define(‘DB_HOST’, ‘localhost’);

$pdo = new PDO(“mysql:host=” . DB_HOST . “; dbname=” . DB_NAME, DB_USER, DB_PASSWORD);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

فایل را ذخیره کنید و ببندید.
در این فایل از چهار PHP ثابت برای اتصال به پایگاه داده MySQL که در مرحله 1 ایجاد کردید، استفاده نموده اید:
⦁ DB_NAME: این ثابت دارای نام بانک اطلاعاتی test_company است.
⦁ DB_USER: این متغیر دارای نام کاربری test_user است.
⦁ DB_PASSWORD: این ثابت پسورد MySQL حساب test_user را ذخیره می کند.
⦁ DB_HOST: نشان دهنده سرور مجازی ی است که دیتابیس در آن قرار دارد. در این حالت ، شما از سرور مجازی localhost استفاده می کنید.
خط زیر در فایل شما یک PHP Data Object (PDO) را آغاز کرده و به پایگاه داده MySQL متصل می شود:

$pdo = new PDO(“mysql:host=” . DB_HOST . “; dbname=” . DB_NAME, DB_USER, DB_PASSWORD);

در پایان فایل ، چند ویژگی PDO تنظیم کرده اید:
⦁ ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION : این ویژگی به PDO دستور می دهد استثنائی را که می تواند برای اهداف اشکال زدایی وارد شود ، ارائه کند.
⦁ ATTR_EMULATE_PREPARES, false : این گزینه با اطلاع به موتور پایگاه داده MySQL برای آماده سازی به جای PDO ، امنیت را بیشتر می کند.
فایل /var/www/html/config.php را در دو اسکریپت PHP که به ترتیب برای درج و بازیابی سوابق ایجاد خواهید کرد ، در نظر خواهید گرفت.
ابتدا اسکریپت PHP /var/www/html/insert_products.php را برای درج سوابق در جدول محصولات ایجاد کنید:
⦁ $ sudo nano /var/www/html/insert_products.php

سپس اطلاعات زیر را در فایل /var/www/html/insert_products.php اضافه کنید:
/var/www/html/insert_products.php
<?php

require_once ‘config.php’;

$products = [];

$products[] = [
‘product_name’ => ‘VIRTUAL SERVERS’,
‘price’ => 5,
‘product_image’ => file_get_contents(“https://i.imgur.com/VEIKbp0.png”)
];

$products[] = [
‘product_name’ => ‘MANAGED KUBERNETES’,
‘price’ => 30,
‘product_image’ => file_get_contents(“https://i.imgur.com/cCc9Gw9.png”)
];

$products[] = [
‘product_name’ => ‘MySQL DATABASES’,
‘price’ => 15,
‘product_image’ => file_get_contents(“https://i.imgur.com/UYcHkKD.png” )
];

$sql = “INSERT INTO products(product_name, price, product_image) VALUES (:product_name, :price, :product_image)”;

foreach ($products as $product) {
$stmt = $pdo->prepare($sql);
$stmt->execute($product);
}

echo “Records inserted successfully”;

فایل را ذخیره کنید و ببندید.
در فایل بالا، فایل config.php را در بالا وارد کرده اید. این اولین فایلی است که شما برای تعیین متغیرهای دیتابیس و اتصال به پایگاه داده ایجاد کرده اید. این فایل همچنین یک شی PDO را آغاز می کند و آن را در یک متغیر pdo $ ذخیره می کند.
در مرحله بعد ، مجموعه ای از داده های محصولات را ایجاد کرده اید تا در بانک اطلاعاتی درج شوند. به غیر از product_name و price ، که به ترتیب به عنوان رشته ها و مقادیر عددی تهیه شده اند ، اسکریپت از تابع file_get_contents داخلی PHP برای خواندن تصاویر از یک منبع خارجی استفاده می کند و آنها را به صورت رشته به ستون product_image منتقل می کند.
در مرحله بعد ، یک عبارت SQL آماده کرده اید و از عبارت PHP foreach {…} برای وارد کردن هر محصول در پایگاه داده استفاده کرده اید.
برای اجرای فایل /var/www/html/insert_products.php ، آن را با استفاده از آدرس زیر در پنجره مرورگر خود اجرا کنید. به یاد داشته باشید که your-server-IP را با آدرس IP عمومی سرور مجازی خود جایگزین کنید:
http://your-server-IP/insert_products.php

پس از اجرای فایل ، یک پیام موفقیت در مرورگر خود مشاهده خواهید کرد که تأیید میکند سوابق در پایگاه داده درج شده است.

شما با موفقیت سه رکورد حاوی تصاویر محصول را در جدول محصولات وارد کرده اید. در مرحله بعد ، یک اسکریپت PHP برای بازیابی این سوابق و نمایش آنها در مرورگر خود ایجاد خواهید کرد.
مرحله 3 – نمایش اطلاعات محصولات از پایگاه داده MySQL
با اطلاعات و تصاویر محصولات موجود در بانک اطلاعاتی ، اکنون می خواهید اسکریپت PHP دیگری را رمزگذاری کنید که اطلاعات محصولات را در یک جدول HTML در مرورگر شما پستجو کرده و نمایش می دهد.
برای ایجاد فایل ، دستور زیر را تایپ کنید:
⦁ $ sudo nano /var/www/html/display_products.php

سپس اطلاعات زیر را در فایل وارد کنید:
/var/www/html/display_products.php
<html>
<title>Using BLOB and MySQL</title>
<body>

<?php

require_once ‘config.php’;

$sql = “SELECT * FROM products”;
$stmt = $pdo->prepare($sql);
$stmt->execute();
?>

<table border = ‘1’ align = ‘center’> <caption>Products Database</caption>
<tr>
<th>Product Id</th>
<th>Product Name</th>
<th>Price</th>
<th>Product Image</th>
</tr>

<?php
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo ‘<tr>’;
echo ‘<td>’ . $row[‘product_id’] . ‘</td>’;
echo ‘<td>’ . $row[‘product_name’] . ‘</td>’;
echo ‘<td>’ . $row[‘price’] . ‘</td>’;
echo ‘<td>’ .
‘<img src = “data:image/png;base64,’ . base64_encode($row[‘product_image’]) . ‘” width = “50px” height = “50px”/>’
. ‘</td>’;
echo ‘</tr>’;
}
?>

</table>
</body>
</html>

تغییرات را در فایل ذخیره کنید و آن را ببندید.
در اینجا شما مجدداً فایل config.php را برای اتصال به پایگاه داده وارد کرده اید. سپس ، با استفاده از PDO ، یک عبارت SQL را با استفاده از دستور SELECT * FROM products برای بازیابی همه موارد از جدول محصولات تهیه و اجرا کرده اید.
در مرحله بعد ، یک جدول HTML ایجاد کرده و آن را با داده های محصولات با استفاده از while() {…} PHP پر کرده اید. خط $ row = $ stmt-> fetch (PDO :: FETCH_ASSOC) از پایگاه داده پرس و جو می کند و نتیجه را در متغیر $row به عنوان یک آرایه چند بعدی ذخیره می کند ، که می توانید با استفاده از $row[‘column_name’] در یک ستون جدول HTML نمایش دهید.
تصاویر از ستون product_image درون برچسب های <img src = “”> محصور شده اند. برای تغییر اندازه تصاویر در اندازه کوچکتر که می تواند در ستون جدول HTML قرار بگیرد از صفات عرض و ارتفاع استفاده کرده اید.
به منظور تبدیل داده های نگهداشته شده توسط نوع داده BLOB به تصاویر ، از عملکرد داخلی PHP base64_encode و عبارت زیر برای طرح داده URI استفاده کرده اید:
data:media_type;base64, base_64_encoded_data

در این حالت ، image/png ، Media_type است و رشته رمزگذاری شده Base64 از ستون product_image، base_64_encoded_data میباشد.
در مرحله بعد ، با وارد کردن آدرس زیر ، فایل Display_products.php را در یک مرورگر وب اجرا کنید:
http://your-server-IP/display_products.php

پس از اجرای فایل display_products.php در مرورگر خود ، یک جدول HTML با لیستی از محصولات و تصاویر همراه مشاهده خواهید کرد.

این تأیید می کند که متن PHP برای بازیابی تصاویر از MySQL همانطور که انتظار می رود کار می کند.
نتیجه
در این راهنما از نوع داده MySQL BLOB برای ذخیره و نمایش تصاویر با PHP در اوبونتو 18.04 استفاده کرده اید. همچنین مزایای پایه ذخیره کردن تصاویر در یک پایگاه داده را در مقایسه با ذخیره آنها در یک سیستم فایل مشاهده کردید. این موارد شامل قابلیت حمل ، امنیت و سهولت تهیه نسخه پشتیبان است. اگر در حال ساخت برنامه ای مانند پورتال دانشجویی یا بانک اطلاعاتی کارمندان هستید که نیاز به ذخیره سازی اطلاعات و تصاویر مرتبط دارد ، این فناوری می تواند برای شما بسیار مفید باشد.
برای اطلاعات بیشتر در مورد انواع داده پشتیبانی شده در MySQL ، راهنمای انواع داده MySQL را دنبال کنید. اگر علاقه مند به مطالب بیشتر مربوط به MySQL و PHP هستید، آموزش های زیر را بررسی کنید:
• نحوه پیاده سازی صفحه بندی در MySQL با PHP در اوبونتو 18.04
• نحوه استفاده از افزونه PDO PHP برای انجام تراکنش های MySQL در PHP در اوبونتو 18.04

 

از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید :

نصب و پیکربندی Ansible در اوبونتو 18.04 – نصب MySQL در اوبونتو 18.04

نظارت بر سلامت سرور با Checkmk در اوبونتو – اجرای چند نسخه PHP بر روی یک سرور

نصب Nginx، MySQL، PHP در CentOS 7 –  نصب و پیکربندی Elasticsearch در اوبونتو 18.04

راه اندازی سرور اولیه با اوبونتو 20.04 – تنظیم کلیدهای SSH در Ubuntu 20.04

نصب و استفاده از PostgreSQL در اوبونتو 20.0 – نحوه نصب MySQL در اوبونتو 20.04

نصب Python 3 روی سرور Ubuntu 18.04 –  نحوه نصب Python 3 روی سرور Ubuntu 20.04

نصب Linux،Apache،MySQL،PHP LAMP در اوبونتو 20.04 –  نصب وب سرور Apache در CentOS 8

نحوه نصب Drupal با Docker Compose –  نحوه نصب Nginx در اوبونتو 20.04

7 مورد از اقدامات امنیتی برای محافظت از سرورهای شما –  نحوه نصب و ایمن سازی Redis در اوبونتو 20.04

نحوه نصب و ایمن سازی Redis در اوبونتو 18.04اضافه کردن فضای Swap در اوبونتو 20.04

چگونه می توان فایروال را با UFW در اوبونتو 20.04 تنظیم کردنظارت بر اطلاعیه و مسیر BGP با BGPalerter اوبونتو 18.04

نصب و ایمن سازی phpMyAdmin در اوبونتو 20.04  –  نصب و استفاده از Composer در اوبونتو 20.04

ریست کردن رمز ورود ریشه MySQL یا MariaDB –  استفاده از نوع داده MySQL BLOB برای ذخیره تصاویر

نصب Nginx در اوبونتو 18.04نصب توزیع Anaconda پایتون در اوبونتو 20.04

نحوه نصب جاوا با Apt در اوبونتو 18.04 –  نحوه نصب Django و تنظیم محیط توسعه در اوبونتو 16.04

نصب جنگو و تنظیم محیط توسعه در اوبونتو 20.04 – نحوه ایجاد سرور Minecraft در اوبونتو 18.04

نحوه راه اندازی یک پروژه Node با Typescript –  نحوه نصب و پیکربندی VNC در اوبونتو 18.04

ایجاد یک برنامه Django و اتصال آن به یک بانک اطلاعاتینصب و پیکربندی VNC در اوبونتو 20.04

نصب MariaDB در اوبونتو 20.04  –  فعال سازی و اتصال رابط کاربری Django

تنظیم پلتفرم Cloud IDE کد سرور را در اوبونتو 18.04پیکربندی Apache HTTP با رویداد MPM و PHP-FPM

 

 

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکاخرید سرور مجازی ارزان هلندvpsخرید vps هلندخرید سرور مجازی آمریکاخرید vps فرانسهتست vpsسرور مجازی تستسرور مجازی ویندوزارزانترین vpsخرید وی پی اسvps ارزان – 

 

 

 

برچسب‌ها:, ,