کش کردن هوشمند داده‌ها در وردپرس با Transients API

در این قسمت به نحوه اصولی کش‌کردن داده‌ها در وردپرس با Transients APIرا بررسی می‌کنیم.

پشتیبان گرفتن در وردپرس

Transients API چیست؟

Transients API یک روش ساده و استاندارد را برای ذخیره داده‌ها به صورت موقت در پایگاه داده با یک نام و بازه زمانی زندگی برای آن دادها، فراهم می‌کند. بعد از به پایان رسیدن زمان تعیین شده اطلاعات حذف می‌شوند و دیگر قابل دستیابی نیستند.
اگر درسایت خود به داده‌ای نیاز دارید که به ندرت به روزرسانی می‌شوند و در تهیه هر بار این داده‌ها زمان زیادی صرف می شود ولی نیازی نیست که هربار این اطلاعات ساخته شوند می‌توانید از Transients API برای ذخیره موقت این داده‌ها استفاده کنید تا در هر بار استفاده از این داده نیازی به تولید دوباره آن نداشته باشید. با این کار می‌توانید زمان لود صفحات را کاهش داده و درصد استفاده سایت از منابع سرور را کاهش دهید.

نحوه ذخیره و بازیابی داده‌های کش بوسیله Transients API

توابع اصلی که در هنگام ذخیره و بازیابی داده‌های مد نظر جهت کش شدن استفاده می‌کنیم توابع set_transient و get_transient هستند. تابع set_transient که از آن برای ذخیره داده کش استفاده می‌کنیم.
<?php set_transient( $transient, $value, $expiration ); ?>


این تابع سه متغیر ورودی دارد. نخست ‎$‎transient‎که نام قطعه داده‌ای است که باید کش شود. این نام در واقع شناسه یکتای آن داده است که در آینده از آن برای بازیابی داده‌های کش شده استفاده می‌کنیم. متغیر دوم ‎$value‎همان داده‌ای است که قصد کش کردن آن را داریم و از متغیر سوم یعنی ‎$expiration‎برای تعیین بازه زمانی که می‌خواهیم داده‌ها کش شوند استفاده می‌کنیم. توجه داشته باشید که مقدار این پارامتر بر حسب ثانیه است و وردپرس بعد از اتمام این زمان داده‌ها را از بانک اطلاعاتی حذف می‌کند.
زمانی که شما داده‌ای را ذخیره کردید می‌توانید به راحتی با تابع get_transient و شناسه آن داده، داده را بازیابی کنید.
<?php get_transient( $transient ); ?>


همان طور که قبل‌تر اشاره کردیم برای بازیابی داده‌ها به شناسه یکتای آن داده نیاز داریم. با ارسال این شناسه به تابع get_transient می‌توانیم به آن داده دسترسی پیدا بکنیم. این تابع دو نوع خروجی دارد. اول مقدار داده کش شده است و یا اینکه مقدار false به همین دلیل بعد از استفاده از این تابع می‌بایست بررسی کنیم که چه نوع داده‌ای در آن وجود دارد. می‌بایست در کدهای خود تمهیداتی را برای زمانی که داده‌های کش حذف شده‌اند در نظر بگیرید.
نکته ظریفی که در این قسمت وجود دارد این است که Transients API در هنگام عدم وجود داده مقدار false منطقی که با صفر مشخص می‌شود را به خروجی ارسال نمی‌کند چون این امکان وجود دارد که مقدار صفر همان داده‌ای باشد که آن را کش کرده باشید و به همین دلیل مقدار false را در یک آرایه قرار داده و آن را به خروجی ارسال می‌کند که برای تشخیص آن می‌توان از عملگر شناسایی یکتا (===) به جای عملگر برابری (==) استفاده کرد. به صورت زیر:
if ( false === ( $value = get_transient( 'value' ) ) ) {
// this code runs when there is no valid transient set
}

حذف داده‌های کش شده بوسیله Transients API

برای حذف داده‌های کش شده از تابع delete_transient استفاده می‌کنیم که شکلی یکسان با تابع get_transient که پیش‌تر بررسی کردیم دارد با این تفاوت که این تابع با دریافت شناسه داده کش شده آن را حذف می‌کند.
<?php  delete_transient( $transient ); ?>

استفاده از Transient API در عمل

در اینجا می‌خواهیم برای شفافیت موضوع نحوه استفاده عملی از Transients API را بررسی کنیم. در این مثال می‌خواهیم داده‌های یک فید را دریافت و آنها را نمایش دهیم. دانلود این فید در هر بار نمایش و ساختن یک لیست HTML از آیتم‌های آن کار مناسبی نیست چون در هر بار دانلود و ساختن لیست خروجی آن فید زمان زیادی صرف دانلود و ساختن کد خروجی می‌شود که اینکار مخصوصا در سایت‌های پر بازدید می‌تواند باعث افت سرعت لود صفحات گردد. اما می‌خواهیم با استفاده از Transients API این فید را یکبار دانلود و برای ۲ ساعت از آن اطلاعات استفاده کنیم و پس از ۲ ساعت دوباره آن را دریافت کنیم و به همین منوال…با اضافه کردن چند خط کد می‌توان از دانلود هزاران بار این اطلاعات جلوگیری کرد. در کد زیر این کار را به صورت عملی پیاده‌سازی کرده ایم.

<?
// get data
$rss_itemslist = get_transient("wp_feed");
 
// for reading rss feed
include_once(ABSPATH . WPINC . '/feed.php');
 
// when data cached
if ($rss !== FALSE){
    // print chached feed items list
    echo $rss_itemslist;
}
// when data not cached
else{
 
    // Download feed and generate items
    $rss_itemslist = fetch_feed("http://feeds.irtuts.com/irtuts/wp");
    $max_items = $rss_itemslist->get_item_quantity(10);
    $items = $rss_itemslist->get_items(0, $max_items);
 
    // Generate HTML liat of feed items
    $fresh_list ="<ol>";
    foreach ( $items as $item )
        $fresh_list .= '<li>
          <a href="' . $item->get_link(); . '">' . $item->get_title();' .</a>
        </li>';
    $fresh_list .= '</ol>';
 
    // save fresh feed items list
    set_transient("wp_feed" , $fresh_list ,60*60*2 );
 
    // print fresh feed items list
    echo $rss_itemslist;
}
?>

در مرکز کد و در قسمت if بررسی می‌کنیم که داده‌ای از قبل در کش وجود دارد و در صورت عدم وجود در قسمت else دوباره لیست آیتم‌های آن فید را تولید می‌کنیم.


























آدرس : کرج – گوهردشت – خیابان اصلی گوهردشت – بین خیابان نهم و دهم غربی– بالای بانک مهر– پلاک252 – واحد11
تلفن تماس :34483769- 026, 34496534- 026, 34496506- 026
ایمیل : Karaj@azaranweb.com



رعایت نکات امنیتی بیشتر برای جلوگیری از هک شدن سایت


برای جلوگیری از هک شدن سایت خود علاوه بر نصب کامپوننت‌های امنیتی از قبیل Defender، RS Firewall، X-Defender و یا غیره بهتر است موارد زیر را نیز رعایت نمایید:

1. نصب پلاگین jSecure Authentication

نصب این پلاگین باعث ایجاد امنیت بیشتر در مسیر ورودی به مدیریت جوملای شما می‌شود.

2. کاهش دسترسی کاربر admin

کاربر admin که مدیرکل جوملا می‌باشد همواره یکی از اهداف حمله هکرها می‌باشد. به همین منظور یک کاربر مدیر کل دیگر ایجاد نموده و سپس با آن وارد بخش مدیریت شده و دسترسی کاربر admin را به "کاربر ثبت شده" تغییر دهید.

3. محافظت از پوشه administrator

یکی از راه‌های ساده جهت محافظت از جوملا گذاشتن رمزعبور بر روی پوشه Administrator است با این کار در صورتی که هکر ، نام کاربری و رمزعبور شما را هم داشته باشد قادر به تخریب زیادی در سایت شما نخواهد بود.

4. جوملا خود را به روز نگه دارید

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

5.بلوک کردن IP‌ها

معمولا اکثر سایت‌ها نیازی به مراجعه کاربران از کشورهای هکرخیز مانند چین و روسیه ندارند به همین منظور می‌توانید با استفاده از سایت زیر ، بازه IP‌های کشور مورد نظر را یافته و مسدود نمایید:
کد:
countryipblocks.net/country-blocks/select-formats/sbin/iptables -I INPUT -s 88.147.196.0/88.147.253.255 -j DROP

6.‌ فایل‌ها و پوشه‌ها

اکنون زمان محافظت از فایل‌ها و پوشه‌ها است. مالک فایل‌ها و پوشه‌ها کاربر FTP و دسترسی پوشه‌ها 755 و دسترسی فایل‌ها 644 می‌باشد به همین منظور دستور زیر را اجرا نمایید:
کد:
Navigate to joomla root chown -R user:group ./ chmod -R 0644 ./ find . -type d -exec chmod 755 {} ;
با این کار مالک فایل‌های شما تغییر کرده و دیگر PHP قادر به نوشتن بر روی فایل‌ها نمی‌باشد.
البته فراموش نکنید که باید به صورت دستی دسترسی cache و backupsرا 777 نمایید.

7.‌تغییر پیشوند جداول دیتابیس

از دیتابیس خود بکاپ بگیرید.
وارد مدیریت جوملا شوید.
در تنظیمات کلی وارد بخش دیتابیس شوید.
پیشوند جداول را به مثلا به rthf_ تغییر داده و سپس ذخیره نمایید.
وارد phpMyAdmin شوید.
وارد export شده و از دیتابیس خود خروجی ساده بگیرید.
کل خروجی ایجاد شده را کپی نمایید.
در phpMyAdmin کلیه جدول‌ها را حذف نمایید.
در notepad عبارت jos_ را مثلا با rthf_ جایگزین نمایید.
وارد تب SQL شده و متن را از notapad کپی و سپس بر روی دکمه Go کلیک نمایید.