مقدمه
صفحه گذاری مفهوم محدود کردن تعداد ردیفهای برگشت یافته در یک مجموعه ثبت شده به صفحات جداگانه و منظم است تا امکان جهت گیری آسان بین آنها فراهم شود ، بنابراین وقتی یک مجموعه داده بزرگ وجود دارد میتوانید صفحه گذاری خود را پیکربندی کنید تا فقط تعداد مشخصی از ردیفها را در هر صفحه برگردانید. به عنوان مثال ، وقتی یک فروشگاه اینترنتی هزاران محصول دارد، صفحه بندی میتواند با کاهش تعداد اقلام ذکر شده در یک صفحه ، از نمایش بیش از حد کالا به کاربران جلوگیری کند ، زیرا اغلب بعید است که کاربر نیاز به مشاهده همه محصولات داشته باشد. مثال دیگر برنامهای است که سوابق یک تلفن همراه را نشان میدهد. فعال کردن صفحه بندی در چنین مواردی ، سوابق را به چندین صفحه تقسیم میکند که میتوانند در صفحه بهتر ظاهر شوند. علاوه بر مزایای بصری برای کاربران نهایی ، صفحه بندی باعث میشود برنامهها سریعتر شوند زیرا باعث میشود تعداد سوابق برگشتی همزمان کاهش یابد. این کار دادههای لازم برای انتقال بین مشتری و سرور مجازیرا محدود میکند و به حفظ منابع سرور مجازیمانند RAM کمک میکند. در این آموزش ، شما یک اسکریپت PHP برای اتصال به پایگاه داده خود و پیاده سازی صفحه بندی با اسکریپت خود با استفاده از بند LIMIT در MySQL ایجاد خواهید کرد. پیش نیازها قبل از شروع به موارد زیر نیاز خواهید داشت: ⦁ یک سرور مجازیUbuntu 18.04 که با دنبال کردن دستور العمل راه اندازی سرور مجازیاولیه با اوبونتو 18.04 ، شامل یک کاربر غیر ریشه سودو راه اندازی شده باشد. ⦁ Apache ، MySQL و PHP که روی سیستم شما نصب شده باشند. شما میتوانید راهنمایی در مورد نحوه نصب Linux ، Apache ، MySQL ، PHP (LAMP) روی Ubuntu 18.04 را در این لینک دنبال کنید. مرحله 1 - ایجاد کاربر دیتابیس و تست دیتابیس در این آموزش یک اسکریپت PHP ایجاد خواهید کرد که به یک پایگاه داده MySQL متصل میشود ، سوابق را دریافت میکند و آنها را در یک صفحه HTML در یک جدول نمایش میدهد. اسکریپت PHP را به دو روش مختلف از مرورگر وب خود آزمایش خواهید کرد. اول ، ایجاد یک اسکریپت بدون هیچ کد صفحه بندی برای دیدن نحوه نمایش سوابق. دوم ، افزودن کد ناوبری صفحه در فایل PHP برای درک نحوه کار به صورت عملی. کد PHP برای اهداف تصدیقی نیاز به یک کاربر MySQL و اتصال به یک بانک اطلاعاتی نمونه دارد. در این مرحله یک کاربر غیر ریشه برای پایگاه داده MySQL ، یک پایگاه داده نمونه و یک جدول برای تست اسکریپت PHP ایجاد خواهید کرد. برای شروع به سرور مجازیخود وارد شوید. سپس با دستور زیر به سرور مجازیMySQL خود وارد شوید: ⦁ $ sudo mysql -u root -p ⦁ رمز عبور اصلی سرور مجازیMySQL خود را وارد کرده و برای ادامه ENTER را بزنید. سپس اعلان MySQL را مشاهده میکنید. برای ایجاد یک بانک اطلاعاتی نمونه ، که در این آموزش به آن test_db خواهیم گفت ، دستور زیر را اجرا کنید: ⦁ Mysql> sudo mysql -u root -p ⦁ خروجی زیر را مشاهده خواهید کرد: Output Query OK, 1 row affected (0.00 sec) سپس ، یک test_user ایجاد کنید و به همه امتیازات مربوط به test_db را به کاربر اعطا کنید. PASSWORD را با یک مقدار قوی جایگزین کنید: ⦁ Mysql> GRANT ALL PRIVILEGES ON test_db.* TO 'test_user'@'localhost' IDENTIFIED BY 'PASSWORD'; Output Query OK, 1 row affected (0.00 sec) ⦁ مجدد امتیازات MySQL را با دستور زیر لود کنید: ⦁ Mysql> FLUSH PRIVILEGES; ⦁ Output Query OK, 1 row affected (0.00 sec) سپس ، برای شروع مستقیم کار در پایگاه داده test_db ، به پایگاه داده test_db بروید: ⦁ Mysql> Use test_db; Output Database changed اکنون یک جدول products ایجاد کنید. جدول، محصولات نمونه شما را شامل میشود - برای این آموزش شما فقط به دو ستون برای دادهها نیاز دارید. ستون product_id به عنوان کلید اصلی برای شناسایی منحصر به فرد هر رکورد کار میکند. این ستون روی AUTO_INCREMENT تنظیم میشود تا محصول جدیدی را برای هر مورد درج شده تولید کند. شما میتوانید از قسمت product_name برای تفکیک هر مورد با نام استفاده کنید: ⦁ Mysql> Create table products (product_id BIGINT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(50) NOT NULL ) Engine = InnoDB; Output Query OK, 0 rows affected (0.02 sec) برای افزودن 10 محصول برای تست به جدول products عبارات SQL زیر را اجرا کنید: ⦁ Mysql> Insert into products(product_name) values ('WIRELESS MOUSE'); ⦁ ⦁ Mysql> Insert into products(product_name) values ('BLUETOOTH SPEAKER'); ⦁ ⦁ Mysql> Insert into products(product_name) values ('GAMING KEYBOARD'); ⦁ ⦁ Mysql> Insert into products(product_name) values ('320GB FAST SSD'); ⦁ ⦁ Mysql> Insert into products(product_name) values ('17 INCHES TFT'); ⦁ ⦁ Mysql> Insert into products(product_name) values ('SPECIAL HEADPHONES'); ⦁ ⦁ Mysql> Insert into products(product_name) values ('HD GRAPHIC CARD'); ⦁ ⦁ Mysql> Insert into products(product_name) values ('80MM THERMAL PRINTER'); ⦁ ⦁ Mysql> Insert into products(product_name) values ('HDMI TO VGA CONVERTER'); ⦁ ⦁ Mysql> Insert into products(product_name) values ('FINGERPRINT SCANNER'); ⦁ این خروجی را مشاهده خواهید کرد: Output Query OK, 1 row affected (0.02 sec) با اجرای دستور زیر تأیید کنید که محصولات وارد جدول شده اند: ⦁ Mysql> select * from products; محصولات موجود در خروجی را در دو ستون مشاهده خواهید کرد: Output +------------+-----------------------+ | product_id | product_name | +------------+-----------------------+ | 1 | WIRELESS MOUSE | | 2 | BLUETOOTH SPEAKER | | 3 | GAMING KEYBOARD | | 4 | 320GB FAST SSD | | 5 | 17 INCHES TFT | | 6 | SPECIAL HEADPHONES | | 7 | HD GRAPHIC CARD | | 8 | 80MM THERMAL PRINTER | | 9 | HDMI TO VGA CONVERTER | | 10 | FINGERPRINT SCANNER | +------------+-----------------------+ 10 rows in set (0.00 sec) از MySQLخارج شوید ⦁ Mysql> quit; • با استفاده از پایگاه داده نمونه ، جدول و دادههای آزمایشی موجود ، اکنون میتوانید اسکریپت PHP ایجاد کنید تا دادهها در یک صفحه وب نمایش داده شود. مرحله 2 - نمایش رکوردهای MySQL بدون صفحه بندی اکنون یک اسکریپت PHP ایجاد میکنید که به پایگاه داده MySQL که در مرحله قبل ایجاد کرده اید متصل میشود و محصولات را در یک مرورگر وب لیست میکنید. در این مرحله ، کد PHP شما بدون هیچگونه صفحه بندی اجرا خواهد شد تا نشان دهد که چگونه سوابق جدا نشده در یک صفحه نشان داده میشوند. اگرچه در این آموزش فقط ده رکورد برای اهداف آزمایش دارید ، اما دیدن سوابق بدون صفحه بندی نشان میدهد که چرا تقسیم بندی دادهها در نهایت باعث ایجاد یک تجربه کاربری بهتر و بار کمتر روی سرور مجازیخواهد شد. با دستور زیر فایل اسکریپت PHP را در روت document وب سایت خود ایجاد کنید: ⦁ $ sudo nano /var/www/html/pagination_test.php سپس محتوای زیر را به فایل اضافه کنید. به یاد داشته باشید که در مرحله قبل ، PASSWORD را با رمز عبور صحیحی که به test_user اختصاص داده اید ، جایگزین کنید: /var/www/html/pagination_test.php $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); $sql = "select * from products"; $stmt = $pdo->prepare($sql); $stmt -> execute(); echo " ";while (($row = $stmt -> fetch(PDO::FETCH_ASSOC)) !== false) { echo "";echo ""; echo ""; echo ""; }echo "
".$row['product_id']." | ".$row['product_name']." |
"; } catch(PDOException $e) { echo $e->getMessage(); } ?> فایل را با فشار دادن CTRL + X ، Y و ENTER ذخیره کنید. در این اسکریپت شما با استفاده از کتابخانه PDO (PHP Data Object) با اعتبارات دیتابیس که در مرحله 1 ایجاد کرده اید به پایگاه داده MySQL وصل میشوید. PDO یک رابط کاربری سبک برای اتصال به پایگاههای داده است. لایه دسترسی به اطلاعات، قابل حمل تر است و میتواند در پایگاههای دادههای مختلف و فقط با بازنویسی کد مینور کار کند. از آنجا که PDO از دستورات آماده پشتیبانی میکند (ویژگی برای اجرای سریعتر درخواستها به روشی مطمئن)، از امنیت بیشتری نیز برخوردار است . سپس ، به APO PDO دستور میدهید تا عبارت select * from products را اجرا کند و محصولات را در جدول HTML بدون صفحه بندی فهرست کند. خط $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); تضمین میکند که انواع دادهها همانطور که در پایگاه داده ظاهر میشوند، بازگردانده میشوند. این بدان معنی است که PDO ، product_id را به عنوان یک عدد صحیح و product_name را به عنوان یک رشته باز میگرداند. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); به PDO دستور میدهد در صورت بروز خطا، به صورت استثنا عمل کند. برای اشکال زدایی آسان تر ، خطا را در داخل بلوک try{}...catch{} در PHP مشاهده میکنید. برای اجرای فایل اسکریپت PHP به صورت /var/www/html/pagination_test.php که ایجاد کرده اید ، آدرس زیر را که your-server-IP با آدرس IP عمومی سرور مجازیشما جایگزین شده، مشاهده کنید: http://your-server-IP/pagination_test.php صفحهای را با جدول محصولات خود مشاهده خواهید کرد. اسکریپت PHP شما مطابق آنچه انتظار میرود کار میکند؛ تمام محصولات در یک صفحه لیست میشوند. اگر هزاران محصول داشتید ، این امر باعث میشود که یک حلقه طلانی ایجاد شود و محصولات از پایگاه داده گرفته شده و در صفحه PHP بارگیری شوند. برای غلبه بر این محدودیت ، اسکریپت PHP را تغییر داده و بند MySQL LIMIT و برخی پیوندهای navigation را در انتهای جدول قرار میدهید تا قابلیت صفحه بندی را اضافه کنید. مرحله 3 – اجرای صفحه گذاری با PHP در این مرحله هدف شما تقسیم دادههای آزمایشی در چندین صفحه قابل کنترل است. این کار نه تنها باعث افزایش خوانایی میشود بلکه از منابع سرور مجازینیز با کارایی بیشتری استفاده میکند. شما اسکریپت PHP را که در مرحله قبل ایجاد کرده اید برای تنظیم صفحه بندی اصلاح میکنید. برای این کار ، بند MySQL LIMIT را اجرا خواهید کرد. قبل از افزودن این متن به اسکریپت ، بیایید نمونهای از دستور MySQL LIMIT را ببینید: ⦁ Mysql> Select [column1, column2, column n...] from [table name] LIMIT offset, records; ⦁ بند LIMIT دو آرگومان را همانند پایان این عبارت برمیدارد. مقدار افست (offset ) تعداد رکوردهایی است که باید قبل از ردیف اول از آن پرش کنید. records حداکثر تعداد سوابق را برای نمایش در هر صفحه تعیین میکند. برای آزمایش صفحه بندی ، سه رکورد در هر صفحه نمایش میدهید. برای به دست آوردن تعداد کل صفحات ، باید کل سوابق را از جدول خود با ردیفهایی که میخواهید در هر صفحه نمایش دهید تقسیم کنید. سپس با استفاده از عملکرد PHP Ceil ، همانطور که در مثال زیر کد PHP زیر نشان داده شده است ، مقدار حاصل را به نزدیکترین عدد صحیح گرد کنید: $ $total_pages=ceil($total_records/$per_page); در زیر نسخه اصلاح شده اسکریپت PHP با کد صفحه بندی کامل آمده است. برای درج کدهای صفحه بندی و ناوبری ، فایل /var/www/html/pagination_test.php را باز کنید: ⦁ $ sudo nano /var/www/html/pagination_test.php ⦁ سپس کدهایلایت شده زیر را به فایل خود اضافه کنید: /var/www/html/pagination_test.php $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); /* Begin Paging Info */ $page = 1; if (isset($_GET['page'])) { $page = filter_var($_GET['page'], FILTER_SANITIZE_NUMBER_INT); } $per_page = 3; $sqlcount = "select count(*) as total_records from products"; $stmt = $pdo->prepare($sqlcount); $stmt->execute(); $row = $stmt->fetch(); $total_records = $row['total_records']; $total_pages = ceil($total_records / $per_page); $offset = ($page-1) * $per_page; /* End Paging Info */ $sql = "select * from products limit :offset, :per_page"; $stmt = $pdo->prepare($sql); $stmt->execute(['offset'=>$offset, 'per_page'=>$per_page]); echo " ";while ( ($row = $stmt->fetch(PDO::FETCH_ASSOC) ) !== false) { echo "";echo ""; echo ""; echo ""; }echo "
".$row['product_id']." | ".$row['product_name']." |
"; /* Begin Navigation */ echo " ";echo "";if ($page-1 >= 1) { echo ""; }if ($page+1 <= $total_pages) { echo ""; }echo "";echo "
"; /* End Navigation */ } catch(PDOException $e) { echo $e->getMessage(); } ?> در فایل خود از پارامترهای دیگری برای اجرای صفحه بندی استفاده کرده اید: ⦁ $page: این متغیر صفحه فعلی را در اسکریپت شما نگه میدارد. هنگام حرکت بین صفحات ، اسکریپت شما با استفاده از متغیر $ _GET ['page'] یک پارامتر URL به نام page را بازیابی میکند. ⦁ $per_page: این متغیر حداکثر رکوردی را که میخواهید در هر صفحه نمایش داده شود ، در اختیار دارد. در مورد خاص شما ، بهتر است در هر صفحه سه محصول لیست کنید. ⦁ $ total_records: قبل از لیست کردن محصولات ، شما یک دستور SQL را برای دریافت تعداد کل سوابق در جدول هدف خود اجرا میکنید و آن را به عنوان متغیر $ total_records تعیین میکنید. ⦁ $ offset: این متغیر نشان دهنده کل سوابقی است که باید قبل از ردیف اول از آن بگذرید. این مقدار توسط اسکریپت PHP شما با استفاده از فرمول $ offset = ($ page-1) * $ per_page محاسبه میشود. ممکن است این فرمول را با پروژههای صفحه بندی PHP تطبیق دهید. به یاد داشته باشید که میتوانید متغیر $ per_page را متناسب با نیاز خود تغییر دهید. به عنوان مثال ، اگر در حال اجرای یک وب سایت یا مقدار دیگری برای یک دستگاه تلفن همراه هستید ، ممکن است آن را به مقدار 50 تغییر دهید تا پنجاه مورد در هر صفحه نمایش داده شود. باین بار هم آدرس IP خود را در یک مرورگر ببینید و your_server_ip را با آدرس IP عمومی سرور مجازیخود جایگزین کنید: http://your_server_ip/pagination_test.php اکنون دکمههای navigation را در انتهای صفحه مشاهده خواهید کرد. در صفحه اول یک دکمه Previous دریافت نمیکنید. همین مورد در صفحه آخر نیز اتفاق میافتد و دکمه صفحه بعدی یعنی Next را نمیبینید. همچنین ، توجه داشته باشید که با مراجعه به هر صفحه ، چگونه پارامتر URL صفحه تغییر میکند. پیوندهای navigation در انتهای صفحه با استفاده از قطعه کد PHP زیر از فایل شما حاصل میشود: /var/www/html/pagination_test.php . . . if( $page-1>=1) { echo " Previous"; } if( $page+1 <=$total_pages) { echo " Next"; } . . . در اینجا ، متغیر $page تعداد صفحه فعلی را نشان میدهد. سپس برای به دست آوردن صفحه قبلی ، کد ، 1 را از متغیر کم خواهد کرد. بنابراین ، اگر در صفحه 2 هستید ، فرمول (1-2) نتیجه 1 را به شما میدهد و این صفحه قبلی است که در لینک ظاهر میشود. با این حال به خاطر داشته باشید که در صورت نتیجه بالاتر یا برابر با 1 ، صفحه قبلی را نشان میدهد. به همین ترتیب ، برای رسیدن به صفحه بعد ، به متغیر $page عدد 1 را اضافه میکنید و همچنین باید اطمینان حاصل کنید که نتیجه $page که به پارامتر URL صفحه اضافه میکنیم از کل صفاتی که در کد PHP محاسبه کرده اید بیشتر نباشد. در این مرحله ، اسکریپت PHP شما با صفحه بندی کار میکند و شما قادر به اجرای بند MySQL LIMIT برای navigation بهتر رکورد هستید. نتیجه در این آموزش ، صفحه بندی را در MySQL با PHP در سرور مجازیاوبونتو 18.04 پیاده سازی کردید. شما میتوانید با استفاده از اسکریپت PHP از این مراحل با یک مجموعه رکورد بزرگتر استفاده کنید تا صفحه بندی را انجام دهید. با استفاده از صفحه بندی در وب سایت یا برنامه خود میتوانید navigation بهتر کاربر و استفاده بهینه از منابع را در سرور مجازیخود ایجاد کنید. از این لینکها میتوانید بهینه سازی بیشتری برای بانک اطلاعاتی و سایر کارهای پایگاه داده خود انجام دهید: ⦁ نحوه بهینه سازی MySQL با Query Cache در اوبونتو ⦁ 18.04 ⦁ مقدمهای بر درخواستها در MySQL ⦁ نحوه رفع مشکلات در MySQL از این لینکها زیر میتوانید آمورشهای بیشتری برای لینوکس پیدا کنید : نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 نحوه نصب و استفاده از TimescaleDB در CentOS 7 نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سریع) نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10 نحوه نصب و استفاده ازRadamsa برای فوز کردن برنامهها (تکنیک تست خودکار نرم افزار) و خدمات شبکه روی Ubuntu 18.04 نحوه نصب Docker Compose در Debian 10 چگونه میتوان با کتابخانه (library) درخواستها در پایتون شروع به کار کرد نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04 نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7 بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose در اوبونتو 18.04 نحوه بهینه سازی درخواستهای MySQL با ذخیره سازی ProxySQL در اوبونتو 16.04 نحوه استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18.04 چگونه میتوان پلتفرم کد سرور Cloud IDE را در اوبونتو 18.04 تنظیم کرد (شروع سریع) چگونه میتوان از رولهای ansible برای انتزاع محیط زیرساختی خود استفاده کرد نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18.04 نحوه تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes در vpsgol با استفاده از Velero نحوه نصب و استفاده از PostgreSQL در CentOS 7 چگونه میتوان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو 18.4 تنظیم کرد نحوه استقرار و مدیریت DNS با استفاده از DNSControl در Debian 10 چگونه میتوان پلتفرم Cloud IDE کد سرور را روی CentOS 7 تنظیم کرد کلمات کلیدی خرید سرور خرید vps– خرید سرور مجازی– خرید سرور– سرور هلند– فروش vps– سرور مجازی آمریکا– خریدvps– سرور مجازی هلند– فروش سرور مجازی– سرور آمریکا– vps– سرور مجازی انگلیس– سرور مجازی آلمان– سرور مجازی کانادا– خرید vps آمریکا– خرید وی پی اس– سرور– خرید سرور مجازی هلند– vps خرید– سرور مجازی فرانسه– سرور مجازی هلند– خرید vps آمریکا– خرید سرور مجازی هلند– خرید وی پی اس– خرید vps هلند– خرید vps فرانسه