آموزش استفاده از Composer در PHP

مقدمه

چرخ را دوباره اختراع نکنید! همه ما توسعه دهنده های نرم افزار در پروژه هایی که توسعه می دهیم به ابزاری نیاز داریم که توسط دیگر توسعه دهنده ها از پیش ساخته و منتشر شده و ما می توانیم به جای بازطراحی آنها فقط تصمیم بگیریم که از آنها استفاده کنیم. اما استفاده از این ابزار ها یا به اصطلاح پکیج ها خودش به پیچیدگی هایی ختم می شود که ما مجبور می شویم به دنبال راهکار هایی برای آن بگردیم که البته راه حل مناسب استفاده از یک ابزار مدیریت وابستگی است و مجددا باید گفت چرخ را دوباره اختراع نکنید!

مدیریت وابستگی

همانطور که پیشتر اشاره کردیم وقتی برای توسعه یک پروژه از پکیج های آماده که توسط دیگران ساخته شده استفاده می کنیم پیچیدگی هایی پیش می آید که نیازمند مدیریت هستند. در ادامه دو مورد از این پیچیدگی ها را بررسی می کنیم.

بروزرسانی پکیج ها

پکیج ها همانند نرم افزار ها در طول زمان توسعه داده می شوند و یا باگ های موجود در آنها رفع می شود و نسخه های جدیدی از آنها منتشر می شود. به عنوان مصرف کننده باید آنها را به روز نگه داشته تا کیفیت و امنیت محصول خود را تضمین کنیم. علاوه بر به بروزرسانی مداوم پکیج های مورد استفاده باید به هنگام بروزرسانی به نسخه جدید سازگاری آن نسخه با پروژه را بررسی کنیم تا مبادا محصول ما دچار مشکل شود.

وابستگی های تو در تو

پکیج های مورد نیاز پروژه ما (وابستگی های سطح یک) برای ارائه کاربرد مورد نظر ممکن است از دیگر پکیج ها استفاده کنند و اصطلاحا خود وابستگی هایی که آنرا وابستگی های سطح دو می نامیم داشته باشند، این داستان ممکن است حتی ادامه دار باشد و وابستگی های سطح سوم، چهارم و … هم به وجود بیایند. برای مدیریت این مسئله دو راهکار را می توان درنظر گرفت: ۱) برای هر پکیج وابستگی های آن را در دایرکتوری همان پکیج قرار بدهیم و سلسله مراتبی از وابستگی ها به وجود بیاوریم. ۲) همه پکیج ها از همه سطوح وابستگی بدون اینکه تفاوتی برای سطح آنها قائل شویم را در کنار هم قرار دهیم.

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

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

ابزار مدیریت وابستگی

با توجه توضیحاتی که پیشتر شرح دادیم لزوم وجود یک ابزار نیرومند برای مدیریت وابستگی ها در پروژه های نرم افزاری کاملا احساس می شود. مهمترین وظیفه این ابزار این است که با توجه به وابستگی های پروژه در سطوح مختلف، نسخه مناسب از پکیج های مورد نیاز را از مخزن های تعریف شده دانلود کرده و در اختیار توسعه دهنده و پروژه قرار می دهند.

برای زبان های مختلف ابزار های مختلفی طراحی شده است، برای مثال Maven و Gradle برای جاوا، pip برای Python، SBT برای اسکالا و Dep برای Go را می توان نام برد. برای زبان PHP در گذشته از ابزار Pear استفاده می شد اما سالهاست که Composer نه به عنوان ابزار رسمی اما به عنوان محبوب ترین ابزار مدیریت وابستگی در پروژه های PHP استفاده می شود.

قرارداد نامگذاری نسخه

یکی از مباحث مهمی که در استفاده و توسعه پکیج ها باید به آن توجه کنیم قرارداد نامگذاری نسخه است. قرارداد های مختلفی در این زمینه وجود دارد. محبوب ترین این قرارداد ها که توسط سایت semver.org تعریف شده به این صورت است:

MAJOR.MINOR.PATCH

در این قرارداد نام نسخه پکیج (یا نرم افزار) از سه بخش تشکیل می شود که ادامه هر کدام را توضیح می دهیم.

بخش MAJOR در نسخه

بخش اول در نام نسخه Major نام دارد که نسخه اصلی پکیج به حساب می آید و تغییر آن به معنی تغییرات بنیادی یا مهم در پکیج است و لزوما با نسخه قبلی سازگار نمی باشد. در صورتی که ما توسعه دهنده پکیج هستیم و در نسخه جدید تغییراتی در API پکیج ایجاد کرده ایم که کاربران نسخه قبلی بدون تغییر نمی توانند از این نسخه استفاده کنند ما این بخش از نسخه را یک واحد افزایش می دهیم. برای مثال اگر نسخه قبلی پکیج ما v2.6.1 بوده نسخه جدید را باید v3.0.0 نامگذاری کنیم. در صورتی که ما کاربر یک پکیج هستیم باید به هنگام بروزرسانی پکیج توجه کنیم که با بروزرسانی به نسخه Major جدید ممکن است به تغییراتی در پروژه برای سازگاری با نسخه جدید نیازمند باشیم و حتی ممکن است از بروزرسانی منصرف شویم.

بخش MINOR در نسخه

بخش دوم در نام نسخه Minor نام دارد که نسخه فرعی پکیج به حساب می آید و تغییر آن به معنی معرفی شدن فیچر جدید یا بهبود قابل توجه با حفظ کامل سازگاری با نسخه قبلی است. برای مثال اگر نسخه پکیج v2.6.1 است چنین تغییری می تواند به نسخه v2.7.0 منجر شود. با توجه توضیحات ذکر شده می توان با خاطری نسبتا آسوده پکیج ها را به نسخه های فرعی جدید بروزرسانی کنیم.

بخش PATCH در نسخه

بخش سوم نام نسخه Patch نام دارد که تغییر آن معمولا بخاطر تغییرات کوچک بخصوص رفع باگ است و معمولا هیچ قابلیت جدیدی برای معرفی وجود ندارد. Patch های جدید با نسخه قبلی باید کاملا سازگار باشند.

ابزار Composer

همانطور که اشاره کردیم Composer محبوب ترین ابزار مدیریت وابستگی برای پروژه های به زبان PHP می باشد که فریم ورک های معروف PHP از جمله Laravel، Symfony و Zend Framework همگی از این ابزار استفاده می کنند. این ابزار یکی از قویترین ابزار های مدیریت وابستگی می باشد که امکانات بسیاری را در اختیار توسعه دهنده ها قرار می دهد و ما سعی کردیم در این مقاله تعدادی از آنها را معرفی کنیم.

کمپوزر بطور پیشفرض از مخزن packagist.org برای دانلود پکیج ها استفاده می کند و می توانید پکیج های قابل استفاده را در این سایت ببینید.

نصب Composer

کومپوزر را به عنوان یک ابزار Command Line می توانید از سایت getcomposer.org دانلود و نصب کنید. پس از نصب می توانید صحت نصب را با اجرای دستور زیر در خط فرمان (ترمینال) بررسی کنید.

composer --version

و برای افزودن پکیج های مورد نیاز به پروژه می توانید دستوری مشابه دستور زیر را در دایکتوری پروژه اجرا کنید.

composer require miladrahimi/phpconfig

در صورتی که مشکلی رخ ندهد، پس اجرای دستور بالا Composer پکیج مورد نظر را دانلود در دایرکتوری your-project/vendor قرار می دهد و همچنین فایل composer.json و composer.lock را هم در دایرکتوری پروژه ایجاد می کند. کاربرد این فایل را در ادامه توضیح می دهیم.

فایل composer.json

فایل composer.json پس از اجرای دستور init یا تعریف اولین وابستگی برای پروژه در دایرکتوری ریشه (root) پروژه ایجاد می شود. این فایل را که می توان به طور دستی و با یک Text Editor هم ساخت شامل لیست وابستگی ها (پکیج ها مورد نیاز پروژه)، مخزن ها، Auto-loader ها و همه اطلاعاتی است که Composer نیاز دارد تا درباره پروژه شما بداند می باشد.

در این فایل نسخه پکیج ها را می توان بصورت انعطاف پذیر همانند v3.* یا v3.6.* نوشت تا بروزرسانی پکیج ها و همچنین جلوگیری از نصب نسخه غیر قابل سازگار ممکن باشد.

فایل composer.lock

فایل composer.lock که در کنار فایل composer.json قرار می گیرد شامل اطلاعات دقیق تر (نسخه دقیق پکیج ها) می باشد. این فایل به هنگام اجرای دستور install مورد استفاده قرار می گیرد تا از بروزرسانی ناخواسته وابستگی ها در محیط های حساس جلوگیری شود. پیشنهاد می شود این فایل به همراه پروژه به سرور منتقل شود تا با نصب وابستگی ها در سرور مطمئن باشیم همان نسخه استفاده شده در محیط تست و یا توسعه بر بروی سرور نصب می شود.

دایرکتوری vendor

این دایرکتوری شامل تمام پکیج های دانلود شده توسط Composer می باشد که مورد نیاز پروژه است. علاوه بر پکیج های نصب شده، اطلاعات مربوط به نحوه بارگذاری آنها و همچنین فایل autoload.php در این دایرکتوری نگهداری می شود.

با توجه به اینکه با استفاده از اطلاعات موجود در فایل های composer.json و composer.lock و نرم افزار Composer هر زمان و هر کجا می توان مجددا تمام پکیج های مورد نیاز پروژه را نصب کرد به هنگام به اشتراک گذاری، آپلود به سرور یا مخزن Git و Deploy این دایرکتوری را ignore کرد.

تعریف وابستگی ها

در صورتی که در پروژه خود به یک پکیج نیاز دارید ابتدا باید آنرا در مخزن packagist.org پیدا کنید. در صفحه مربوط به پکیج در سایت Packagist می توانید روند افزودن آن به پروژه مشاهده کنید. برای مثال برای افزودن پکیج PhpRouter به پروژه می توانید دستور زیر را در دایرکتوری پروژه اجرا کنید.

composer require miladrahimi/phprouter

با افزودن اولین وابستگی به پروژه، Composer دو فایل composer.lock و composer.json و همچنین دایرکتوری vendor را به پروژه شما اضافه می کند و در صورت وجود این فایل ها و دایرکتوری بروزرسانی می شود.

پس از افزودن وابستگی به پروژه، Composer آنرا دانلود کرده و در دایرکتوری vendor قرار می دهد و همچنین وابستگی مورد نظر را به بخش require در فایل composer.json اضافه می کند و نهایتا composer.lock را هم بروزرسانی می کند.

در صورتی که پکیج مورد نظر تنها کاربرد تستی دارد و در سرور اصلی نیازی به نصب آن نیست می توانید با دستوری مشابه دستور زیر آنرا به پروژه اضافه کنید.

composer require phpunit/phpunit --dev

دستور بالا پکیج PhpUnit را به بخش require-dev در composer.json اضافه خواهد کرد.

چنانچه نسخه خاصی از پکیج مد نظرتان هست می توانید همانند دستور زیر آنرا به پروژه به اضافه کنید:

composer require miladrahimi/phprouter:"3.0"

با اجرای دستور بالا نسخه v3.0.* از پکیج را نصب می شود. به مثال دیگری که در ادامه آورده ایم هم توجه کنید.

composer require miladrahimi/phprouter:"3.*"

با اجرای این دستور نسخه v3.* از پکیج نصب خواهد شد. Composer جدیدترین نسخه از پکیج که بخش Major آن ۳ می باشد را نصب خواهد کرد.

برای مشاهده دیگر فرمت های نوشتن نسخه که توسط Composer معرفی شده است می تواند به مقاله رسمی سایت Composer با نام Versions and constraints مراجعه کنید.

بارگذاری پکیج ها

همانطور که قبلا گفتیم Composer پکیج های مورد نیاز پروژه (و دیگر پکیج ها) را پس از دانلود در دایرکتوری vendor قرار می دهد. Composer همچنین فایلی به نام autoload.php در این دایرکتوری ایجاد میکند. این فایل حاوی Auto-loader برای تمام پکیج های نصب شده توسط Composer است و با include کردن آن در پروژه می توان از پکیج های نصب شده استفاده کرد. مثال زیر نحوه استفاده از پکیج PhpRouter را نشان می دهد:

include "vendor/autoload.php";
use MiladRahimiPhpRouterRouter;
$router = new Router();
$router->get('/', function () {
    return 'This is home page!';
});
$router->dispatch();

بروزرسانی وابستگی ها

پس از نصب وابستگی ها ممکن است نیاز باشد که آنها را بروزرسانی کنیم که در آن صورت می توانید از دستوری مشابه دستور زیر استفاده کنید.

composer update miladrahimi/phprouter

پس از اجرای دستور بالا جدیدترین نسخه سازگار از پکیج مورد نظر توسط Composer دانلود و جایگزین نسخه قبلی آن در دایرکتوری vendor می شود. همچنین فایل composer.lock هم بروزرسانی می شود اما هیچ تغییر در فایل composer.json نخواهیم داشت.

در صورتی که می خواهید همه وابستگی ها را بروزرسانی کنید می توانید از دستور زیر استفاده کنید.

composer update

این دستور تمام وابستگی ها، دایرکتوری vendor و فایل composer.lock را بروزرسانی می کند. این دستور را با دستور زیر که خود نرم افزار Composer را بروزرسانی می کند اشتباه نگیرید.

composer self-update

نصب وابستگی ها

همانطور که قبلا توضیح دادیم بهتر است دایرکتوری vendor را به هنگام آپلود پروژه در سرور یا در مخزن هایی مانند گیتهاب ignore کرد. همچنین در صورتی که بطور کلاسیک برای Deploy پروژه روی سرور آنرا آپلود می کنید در این صورت به هنگام دریافت پروژه از مخزن دایرکتوری vendor را نداریم اما می توان با دستور زیر مجددا وابستگی ها را نصب کنیم.

composer install

دستور بالا در صورتی که فایل composer.lock در دسترس باشد، پکیج ها را مطابق با نسخه تعریف شده در آن نصب می کند و در غیر این صورت با استفاده از اطلاعات موجود در فایل composer.json آخرین نسخه سازگار با پروژه را نصب خواهد کرد.

در محیط هایی همانند سرور اصلی با استفاده از پارامتر —no-dev می توانید از نصب پکیج های مورد نیاز محیط های تستی جلو گیری کنید.

composer install --no-dev

افزودن autoload

یکی از قابلیت های مفیدی که Composer ارائه می دهد که البته ممکن است فراتر از وظایف یک ابزار مدیریت وابستگی باشد، امکان تعریف autoload برای پروژه است. در بخش های قبل متوجه شدیم که برای بارگذاری پکیج های دانلود شده توسط Composer باید فایل vendor/autoload.php در پروژه خود include کنید. از طرفی پروژه شما هم به یک Auto-loader برای بارگذاری کلاس های پروژه نیاز دارد. با قابلیت مورد نظر نیاز نیست که شما به طور جداگانه یک. Auto-loder طراحی کنید تنها کافیت تا اطلاعات بارگذاری پروژه را به composer.json اضافه کنید تا همان autoload موجود در دایرکتوری vendor کلاس های پروژه شما را هم بارگذاری کند.

"autoload": {
    "psr-4": {"App": "app/"}
}

مخزن ها

سرور Packagist مخزن رسمی و عمومی Composer است و Composer برای نصب پکیج ها به این مخزن رجوع می کند. با وجود مخزن Packagist برای پکیج های خصوصی و یا پکیج هایی که در این مخزن رجیستر نشده اند ما به مخزن های ثانویه نیازمندیم که خوشبختانه Composer به راحتی به ما اجازه می دهد تا این مخزن ها را برای پروژه تعریف کنیم.

در صورتی که مخزن مورد یک مخزن خصوصی در یک سرور Git همانند GitHub یا GitLab است می توانید با آنرا همانند کد زیر به فایل composer.json اضافه کنید.

"repositories": [
    {
        "type": "git",
        "url": "https://github.com/private-company/foo"
    }
],
"require": {
    "private-company/foo": "1.*"
}

در صورتی که پکیج مورد نظر شما فقط در قالب تعدادی فایل در دسترس است می توانید به شکل زیر آنرا در composer.json اضافه کنید.

"repositories": [
    {
        "type": "path",
        "url": "../../packages/my-package"
    }
],
"require": {
    "my/package": "*"
}

برای اطلاعات بیشتر در زمینه مخزن ها می توانید بخش Repositories از مستندات رسمی Composer را مطالعه کنید.

گفتار پایانی

در این مقاله با مفاهیم مقدماتی از Composer آشنا شدید اما برای مطالعه بیشتر و آشنایی بیشتر با قابلیت های این ابزار مفید می توانید به مستندات رسمی مراجعه کنید.

نسخه PDF مقاله آموزش استفاده از Composer در PHP

نوشته آموزش استفاده از Composer در PHP اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

Full Stack چیست و به چه کسی برنامه نویس فول استک میگویند؟

در مقالات قبلی درباره برنامه نویسی، طراحی وب، برنامه نویسی وب و مفاهیم مختلف صحبت کردیم و به سوالات بسیاری پاسخ دادیم. در این مقاله و فایل ویدئویی میخواهیم درباره‌ی فول استک یا Full Stack صحبت کنیم و یاد بگیریم که Full Stack چیست . در این مقاله با من همراه باشید.

Full Stack چیست

اگر به دنبال یک پاسخ خیلی ساده ولی کاربردی برای سوال Full Stack چیست هستید، فیلم زیر را مشاهده کنید

https://www.aparat.com/v/yqi3X

مقدمه

اگر بخواهید درباره‌ی Full Stack یا برنامه نویس Full Stack بدانید و به پاسخ سوال Full Stack چیست برسید، خیلی خوب است که قبل از آن، با فرانت اند و بک اند آشنایی داشته باشید. پیشنهاد میکنیم اگر با این مباحث آشنایی ندارید، حتما مقالات زیر را مطالعه کنید.

Front End چیست و به چه کسی برنامه نویس فرانت اند میگویند؟

Back End چیست و به چه کسی برنامه نویس بک اند میگویند؟

بعد از مطالعه و مشاهده‌ی مطالب بالا، حالا میتوانید ادامه‌ی این مطلب را مطالعه بفرمایید.

همه چیز درباره برنامه نویس فول استک یا Full Stack Developer

همانطور که گفتیم، در دنیای طراحی سایت،‌ گروهی از افراد هستند که چیزهایی که کاربر میبیند را طراحی و کدنویسی میکنند و گروهی دیگر هستند که روی پشت صحنه (Back End) متمرکز میشوند و کدهای سمت سرور را مینویسند.

اما یک گروه دیگر نیز از برنامه نویسان سمت وب وجود دارد که مارا به پاسخ سوال Full Stack چیست می‌رساند:

در دنیای طراحی و برنامه نویسی وب، اشخاصی هستند که هم طراحی وب را انجام میدهند و هم به برنامه نویسی وب مسلط هستند. در واقع این افراد اشخاصی هستند که به تنهایی میتوانند یک پروژه‌ی تقریبا بزرگ را به پایان برسانند. به این افراد برنامه نویس Full Stack میگویند.

عبارت بالا شاید بتواند یک تعریف خیلی ساده برای برنامه نویس Full Stack باشد. برنامه نویس فول استک، همانطور که از واژه‌ی Full پیداست، همه مهارت‌های لازم برای انجام یک پروژه را دارد. به این معنا که:

یک برنامه نویس فول استک، هم میتواند ظاهرهای بسیار خوبی را برای سرویس های آنلاین طراحی کند و هم میتواند برنامه نویس سمت سرور خوبی باشد.

یک مثال برای جواب دادن به سوال Full Stack چیست

همانطور که در مقالات دیگر مثال‌های متعددی زدیم، وقتی میخوایم یک سرویس آنلاین را طراحی و برنامه نویسی کنیم، حداقل به ۲ فرد نیاز داریم:

  • یک شخص که بتواند ظاهر سایت را با تکنولوژی هایی مثل HTML, CSS, Javascript و… طراحی کند.
  • و شخص دومی که بتواند کدهای بک اند و سمت سرور را با زبانی مثل PHP بنویسد و به پایگاه داده (دیتابیس) متصل شود و اطلاعات را از دیتابیس بخواند و اطلاعات جدید را وارد آن کند.

همانطور که گفتیم، هرکدام از این افراد، یک تخصص دارند و برای ساخت یک سایت، به ۲ فرد نیاز داریم.

اما در دنیای طراحی و برنامه نویسی وب اشخاصی هستند که به دلیل تجربه بالا در هرکدام از قسمت‌های Front End و Back End، میتوانند هر دو بخش ظاهر و سرور یک وبسایت را طراحی و برنامه نویسی کنند. برنامه نویسان Full Stack کسانی هستند که به تنهایی برای ساخت یک سرویس آنلاین خوب، کافی هستند و میتوانند یک نفره یک پروژه‌ی تقریبا بزرگ را مدیریت کنند.

آیا واقعا میتوان یک برنامه نویس فول استک واقعی بود؟

اما در پاسخ به سوال Full Stack چیست باید حواسمان به این نکته باشد که اگر مثلا ما میتوانیم هم با HTML-CSS کد بزنیم و هم PHP میدانیم، به این معنا نیست که از الان میتوانیم به خودمان یک Full Stack بگوییم.

یک برنامه نویس Full Stack شخصی است که مدت زیادی درگیر طراحی وب بوده است و بعد از آن نیز مدت زیادی خود را درگیر برنامه نویسی وب با یک زبان برنامه نویسی سمت سرور کرده است و به تمام پیچ و خم ها و نکات هر ۲ دنیای طراحی سایت واقف است.

معمولی کسی میتواند یک برنامه نویس Full Stack باشد که چندین سال سابقه‌ی کار در هر ۲ زمینه‌ی طراحی وب و برنامه نویسی وب را داشته باشد و به این راحتی‌ها نمیتوان در همان چند ماه ابتدای برنامه نویس بودمان، به خودمان یک Full Stack Developer بگوییم.

علاوه بر این، در پاسخ به سوال Full Stack چیست ، باید حواسمان به این نکته هم باشد:

یک برنامه نویس Full Stack علاوه از تسلط بر طراحی و برنامه نویسی وب، باید بتواند یک پیدا کننده‌ی مشکل حرفه‌ای (Debuger) باشد. همچنین باید توانایی بسیار خوبی در مدیریت سرور داشته باشد و همچنین از مدیریت پروژه نیز اندکی بداند. صرفا دانستن HTML,CSS,PHP, MySQL نمیتواند شما را یک برنامه نویس Full Stack کند!

در انتهای این مقاله‌ درباره مهارت های یک Full Stack Developer بیشتر صحبت خواهیم کرد.

آیا Full Stack Developer ها همه کارِ و هیچ کارِ هستند؟

تا الان به یک پاسخ خوبی درباره‌ی سوال Full Stack چیست رسیدیم. اما الان ممکن است این سوال برایتان پیش بیاید:

آیا میتوان هم طراحی وب را انجام داد و هم به برنامه نویسی آن مسلط شد و در کنار آن کلی مهارت دیگر مثل کار و مدیریت سرور، مدیریت پروژه و… را نیز دارا بود؟

و شاید با خودتان فکر کنید که کسی که همه‌ی این چیزها را میداند، اصطلاحا اقیانوسی به عمق ۱ سانتی متر است و درباره‌ی هرکدام از این مباحث یک دانش سطحی دارد.

در خصوص پاسخ به این سوال، باید چند نکته را بررسی کنیم:

Full Stack کارها با تجربه هستند

این نکته‌ی خیلی مهمی است که حتما باید آن‌را در نظر بگیریم و حواسمان به آن باشد. برنامه نویسان Full Stack همانطور که گفتیم افراد بسیار با تجربه ای هستند و در هرکدام از زمینه های طراحی وب و برنامه نویسی وب، حداقل مدت ها (شاید چندین سال) فعالیت داشته اند.

بسیار از طراحان و برنامه نویسان وب که حرفه‌ای هستند و عمق داستان را میدانند، از اینکه خودشان را یک برنامه نویس Full Stack بخوانند میترسند و از عنوان کردن اینکه «من یک برنامه نویس Full Stack هستم» ترس دارند. زیرا تبدیل شدن به یک برنامه نویس Full Stack، کاری زمان بر است و حاصل تجربیات چندین ساله‌ی شما خواهد بود.

پس به راحتی و صرفا به دلیل دانستن HTML, CSS, Javascript, PHP, MySQL و… نمیتوانید به خودتان یک برنامه نویس فول استک بگویید. ماجرا خیلی پیچیده تر از این حرف‌هاست

اما نهایتا …

در پاسخ به سوال Full Stack چیست ، باید این را بپذیریم که نهایتا هر فرد، بالاخره در یکی از زمینه‌های طراحی وب یا برنامه نویسی وب، قوی تر از آن یکی است.

من دوستان برنامه نویس Full Stack زیادی دارم و با برنامه نویسان Full Stack بسیار زیادی نیز همکاری داشته ام. اما آن‌ها نهایتا در یکی از زمینه‌ها قوی تر بوده‌اند. به این معنا که:

  • یا طراحان وب بهتری بودند، یعنی قسمت هنری مغزشان فعال‌تر بود و میتوانستند رابط های کاربری (UI) بسیار حرفه‌ای و چشم نوازی طراحی کنند.
  • یا برنامه نویسان سمت سرور فوق العاده‌ای بودند و بخش منطقی مغزشان فعال تر بوده است و میتوانستند منطق‌ها و الگوریتم های بسیار پیچیده و کدهایی بسیار تمیز بنویسند.

یعنی هرچقدر فرد هم یک Full Stack Developer باشد،‌ باز هم در یکی از زمینه‌های طراحی وب یا برنامه نویسی وب قوی تر است و یکی از نیم کره‌های مغز او بهتر کار میکند. برای مثال ممکن است یک فرد یک برنامه نویس Full Stack باشد و هم طراحی وب فوق العاده ای انجام دهد و هم برنامه نویس سمت سرور بسیار خوبی باشد، اما نهایتا خود آن فرد هم میداند که در یکی از این زمینه‌ها حرفه‌ای تر و بهتر است.

مهارت‌های یک برنامه نویس فول استک (Full Stack)

در پاسخ به سوال Full Stack چیست‌ ، خیلی خوب است که بدانیم یک برنامه نویس فول استک، چه مهارت‌هایی باید داشته باشد. در ادامه‌ یک لیست بسیار ساده را میبینیم که یک برنامه نویس Full Stack باید به آن‌ها تسلط کامل داشته باشد و نیز تجربه‌ی بسیار خوبی در کار با هرکدام از آن‌ها داشته باشد تا بتواند یک Full Stack Developer واقعی باشد.

  • طراحی وب
  • طراحی رابط کاربری
  • برنامه نویسی وب
  • کار با پایگاه داده
  • هاست و سرور
  • توانایی کار با API ها
  • آشنایی با Version Controll System ها
  • توانایی مدیریت پروژه‌های نرم افزاری

در این مقاله و فایل ویدئویی سعی کردیم به سوال Full Stack چیست پاسخ دهیم. نظر شما چیست؟ طراح وب بودن بهتر است؟ یا برنامه نویس بودن؟ یا تبدیل شدن به یک Full Stack Developer؟ کدام یک آسان تر است؟

منبع: یادیفای

نوشته Full Stack چیست و به چه کسی برنامه نویس فول استک میگویند؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

Back End چیست و به چه کسی برنامه نویس بک اند میگویند؟

در مقاله ای دیگر در یادیفای درباره‌ی Front End و یا طراحی سمت وب صحبت کردیم. در این مقاله میخواهیم درباره برنامه نویسی سمت وب، یا برنامه نویسی بک اند یا Back End Development صحبت کنیم و تمام آن چیزی که نیاز دارید را بررسی کنیم. این مقاله و فایل آموزشی میتواند به سوال Back End چیست پاسخ دهد و شما را برای تبدیل شدن به یک برنامه نویس وب (یا برنامه نویس سمت وب یا برنامه نویس Server Side) آماده کند.

https://www.aparat.com/v/yTC1G

Back End چیست

اگر بخواهیم به سوال Back End چیست پاسخ دهیم، در مرحله‌ی اول خیلی خوب است که به دنبال معنی واژه‌ی Back در دیکشنری باشیم. در فست دیک، واژه‌ی Back اینگونه معنا شده است:

Back: عقب، پشت (بدن)، پس، عقبی، گذشته، پشتی، پشتی کنندگان، تکیه گاه، به عقب، درعقب، برگشت (و…)

همانطور که میبینید، یکی از اصلی ترین معانی واژه‌ی Back، پشت می‌باشد. و دقیقا این معنی با کاری که برنامه نویسی اند میکند ارتباط دارد.

وقتی از برنامه نویسی بک اند صحبت میکنیم، منظورمان تمام آن کارهایی است که در پشت صحنه انجام میشود و کاربر آن‌ها را نمیبیند.

ما در تعریف طراحی/برنامه نویسی فراند اند گفتیم:

طراحی یا کدنویسی هر آن چیزی که مربوط به جلوی وبسایت میشود. در واقع یک طراح وب یا یک Front End Developer، کسی است که چیزی را طراحی میکند کاربر آنرا میبیند.

اما برنامه نویسی بک اند (Back End)،‌ دقیقا آن سوی ماجرا قرار دارد. اگر بخواهیم به سوال Back End چیست خیلی ساده پاسخ دهیم، میتوانیم بگوییم:

برنامه نویسی بک اند (Back End) مربوط به کدنویسی و برنامه نویسی هر آن چیزی است که کاربر آن را مشاهده نمیکند و مربوط به کارهای پشت صحنه وب سایت است. برای مثال وقتی که یک وبسایت، مقالات را از دیتابیس دریافت میکند، یک امر مربوط به بک اند است. وظیفه‌ی یک برنامه نویس بک اند، برنامه نویسی چیزهایی است که هسته اصلی یک وبسایت هستند و کاربر کدهای آن‌را بصورت مستقیم مشاهده نمیکند.

مقایسه با فرانت اند

یک نکته‌ی خیلی جالب در تفاوت برنامه نویسی فرانت اند (Front End) و برنامه نویسی بک اند (Back End) وجود دارد. و آن هم نمایان بودن یا نبودن کدهای آن برای کاربران سایت شماست.

وقتی که شما در حال طراحی وب با تکنولوژی هایی مثل HTML, CSS, Javascript و… هستید، تمام کدهایی که نوشتید را کاربر میتواند به راحتی ببیند. زیرا آن کدها مربوط به کاربر هستند و به آن‌ها دسترسی مستقیم دارد.

اما وقتی شما در حال کدنویسی بک اند هستید و مثلا با زبانی مثل PHP کد نویسی میکنید، کاربر هیچ وقت هیچ دسترسی ای نمیتواند به کدهای شما داشته باشد. به این دلیل که این کدها سمت سرور پردازش و اجرا میشوند و کاربر به هیچ وجه نمیتواند آن‌ها را ببیند،‌ بلکه فقط نتیجه‌ای که ایجاد میکنند را مشاهده میکند.

برای اطلاعات بیشتر و درک بهتر سوالBack End چیست پیشنهاد میکنیم این مقاله را حتما مطالعه کنید: Front End چیست و به چه کسی برنامه نویس فرانت اند میگویند؟

Server Side و Client Side به چه معنا هستند.

در آینده حتما در خصوص تفاوت Server Side و Client Side بیشتر صحبت خواهیم کرد. اما برای اینکه بتوانیم به سوال Back End چیست بهتر پاسخ دهیم، خیلی خوب است که این دو مفهوم را کمی توضیح دهیم.

اما اگر بخواهیم خیلی ساده این دو مفهوم را معرفی کنیم، اینگونه میتوانیم بگوییم:

Client Side

از آن‌جایی که Client به معنای مشتری است، Client Side هم به معنی زبان‌هایی است که سمت کاربر کار میکنند. برای مثال میتوان به HTML, CSS, Javascript و… زبان‌های سمت کاربر و Client Side نیز بگوییم. و به مجموع کاری که این زبان‌ها انجام میدهند، طراحی وب یا Front End Development میگوییم.

Server Side

همانطور که از اسم این عبارت پیداست، زبان‌هایی که در این دسته بندی قرار میگیرند، روی سرور اجرا میشوند و برای اجرا شدن به یک سرور نیاز دارند. برای مثال زبان‌هایی مثل PHP یا ASP.NET برای اجرا حتما به یک سرور نیاز دارند،‌ که این سرور هم میتواند یک سرور واقعی در دنیای آنلاین باشد و هم یک شبیه ساز سرور یا لوکال هاست (Localhost). به زبان‌های برنامه نویسی‌ای که سمت سرور اجرا میشوند، زبان‌های Server Side و به مجموع کاری که این زبان‌ها انجام میدهند، برنامه نویسی بک اند یا Back End Development میگویند

همان مثال تئاتر

در مطلبی که به سوال Front End چیست پاسخ دادیم، گفتیم که طراحی وب و برنامه نویسی وب را میتوانیم به یک سالن تئاتر تشبیه کنیم. حالا دوباره همان مثال را میزنیم که پاسخ سوال Back End چیست برایمان واضح تر شود

تمام آن‌ کسانی که در صحنه فعالیت میکنند و نقش آفرینی میکنند و تماشاچیان آن‌ها را میبینند را میتوانیم بگوییم Front End  یک اجرای تئاتر.

و تمام کسانی که در پشت صحنه فعالیت میکنند، مثل طراح لباس، کارگردان، نویسنده، تهیه کننده و… که تماشاچیان آن‌ها را نمیبینند، ولی در پشت صحنه کار میکنند و کارشان روی اجرا تاثیر دارد را میتوانیم Back End یک اجرای تئاتر بنامیم.

در وب هم دقیقا به همین صورت است. تمام آن چیزی که کاربر در صفحه مانیتور خود میبیند مربوط به Front End میشود، و تمام آن چیزی که در پشت صحنه اجرا میشود، مربوط به Back End میشود.

مهارت‌های یک برنامه نویس Back End چیست

برای تبدیل شدن به یک برنامه نویس بک اند، شما باید مهارت‌های زیادی داشته باشید. در آینده حتما لیستی از مهارت‌هایی که برای تبدیل شدن به یک برنامه نویس بک اند حرفه‌ای به آن نیاز دارید را منتشر میکنیم. اما اگر بخواهیم بصورت خلاصه این مهارت‌ها را لیست کنیم، میتوانیم به موارد زیر اشاره کنیم:

زبان برنامه نویسی سمت سرور

برای برنامه نویسی سمت سرور یا برنامه نویسی بک اند، اولین چیزی که نیاز دارید، یک زبان برنامه نویسی‌ای است که سمت سرور اجرا شود. برای مثال زبانی مثل PHP یک زبان برنامه نویسی Back End است که باید روی سرور اجرا شود. پر در اولین قدم شما به یک زبان برنامه نویسی نیاز دارید.

پایگاه داده

دومین چیزی که حتما و قطعا به آن نیاز دارید، پیدا کردن تسلط به یک دیتابیس (Database) یا پایگاه داده است.

میتوان گفت که اصلی ترین کار زبان های برنامه نویسی سمت سرور، توانایی ارتباط برقرار کردن آن‌ها با دیتابیس است.

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

مباحث پیشرفته زبان برنامه نویسی

یکی از مباحثی که براش شما بسیار مفید خواهد بود، استفاده قابلیت‌های حرفه‌ای زبان برنامه نویسی‌تان است. به این معنا که بتوانید با آن زبان برنامه نویسی که کار میکنید، کدهای حرفه‌ای و پیشرفته‌ای بنویسید. هرچقدر کدی که مینویسید بهتر و حرفه‌ای و تمیزتر باشد، بازدهی کد شما بالاتر میرود و در نهایت سرویس آنلاین قوی تر و سریع‌تری خواهید داشت.

برای مثال در برنامه نویسی PHP،‌ شما اگر بتوانید کدتان را به شیوه‌ی شی گرایی (Object Oriented) بنویسید، کد شما میتواند خیلی تمیزتر، سریع‌تر و حرفه‌ای تر باشد.

توانایی حل مسئله

وقتی در خصوص برنامه نویسی سمت سرور یا Back End  صحبت میکنیم، یکی از چیزهایی که برای شما ضروری است،‌توانایی حل مسئله و داشتن یک ذهن تحلیل‌گر است.

داشتن ذهن تحلیلگر، یکی از مهم‌ترین ویژگی هایی است که هر برنامه نویسی باید از آن بهره ببرد.

خبر خوب این است که این ذهن تحلیلگر،‌ ارثی نیست و میتوان آن‌را بدست آورد!

در آینده حتما در خصوص توانایی حل مسئله صحبت خواهیم کرد.

سوال پرسیدن

یکی دیگر از مهارت‌هایی که شما به عنوان یک برنامه نویس به آن نیاز دارید، توانایی سوال پرسیدن و راهنمایی گرفتن از دیگران است.

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

در این مقاله بصورت کامل سعی کردیم به سوال Back End چیست پاسخ دهیم و تمام آن چیزی که نیاز دارید را در اختیارتان قرار دهیم.

نظر شما چیست؟ به نظر شما برای تبدیل شدن به یک برنامه نویس وب خوب،‌ به چه مهارت‌هایی نیاز داریم؟

منبع: یادیفای

نوشته Back End چیست و به چه کسی برنامه نویس بک اند میگویند؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

طراحی وب چیست؟ همه چیز درباره‌ی طراحی وب سایت (web design)

اگر در دنیای وب تازه کار باشید و به تازگی وارد دنیای برنامه نویسی شده باشید، حتما واژه‌ی طراحی وب را بارها و بارها شنیده اید. و حتما این سوال برایتان پیش آمده است که طراحی وب چیست . شاید هم هنوز نتوانسته اید تفاوت واژه های طراحی وب را با برنامه نویسی وب درک کنید. در این مقاله و آموزش ویدئویی بصورت کامل به این سوال « طراحی وب چیست » پاسخ میدهیم و چند مفهوم دیگر را نیز تا حدودی توضیح میدهیم و منابع مفیدی را برای یادگیری آن‌ها معرفی میکنیم.

طراحی وب چیست

در مقاله ای به نام برنامه نویسی چیست، درباره‌ی برنامه نویسی توضیحات ساده‌ای را ارائه دادیم. در این فایل آموزشی میخواهیم به این سوال پاسخ دهیم: طراحی وب چیست

اگر به دنبال یک پاسخ خیلی ساده ولی کاربردی برای سوال طراحی وب چیست هستید، فیلم زیر را مشاهده کنید

https://www.aparat.com/v/3VbeP

وب چیست؟

اگر بخواهیم به سوال طراحی وب چیست پاسخ بدهیم، اول باید بدانیم که وب چیست و به چه چیزی وب میگویند. در زیر یک تعریف بسیار ساده (و شاید تا حدودی اشتباه از لحاظ فنی) از وب ارائه میدهیم:

وب یا همان شبکه جهانی یا World Wide Web که به اختصار www نامیده میشود، همان چیزی است که امروزه به آن اینترنت میگوییم. امروزه از طریق یک مرورگر و با اتصال به این شبکه‌ی جهانی، میتوانیم به تمام اطلاعات درون آن دسترسی داشته باشیم.

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

وب سایت چیست؟

بعد از پاسخ به سوال وب چیست ، میرسیم به وب سایت. حتما شما هم بارها اسم وب سایت به گوشتان خورده است. میخواهم با یک مثال مفهوم وبسایت را برایتان توضیح دهم.

همانطور که ما در دنیای واقعی بخشی از زمین را برای زندگی و یا کسب و کار اجاره میکنیم، در دنیای اینترنت هم میتوانیم اینکار را انجام دهیم. به این معنی که میتوانیم بخشی از اینترنت را اجاره کنیم و آن‌ قسمت را مدتی برای خودمان داشته باشیم. به بخشی که ما روی اینترنت اجاره میکنیم و برای مدتی متعلق به ما می‌باشد وب سایت میگویند. در واقع وب سایت ها، زمین های ما در اینترنت هستند که میتوانیم از آن‌ها استفاده های مختلفی داشته باشیم.

طراحی وب چیست؟

با مفهوم وب سایت نیز آشنا شدیم. حالا میخواهیم برسیم به سوال اصلی خودمان: طراحی وب چیست .

همانطور که در دنیای واقعی از گچ بری، رنگ، کابینت، وسایل خانه و… برای زیبا شدن خانه استفاده میکنیم، در دنیای اینترنت هم از ابزارهایی میتوانیم برای زیبایی سایت‌مان استفاده کنیم. به زابن دیگر، در دنیای آنلاین ابزارهایی در اختیار ما قرار داده شده است، که با استفاده از آن‌ها میتوانیم سایت‌مان را ابتدا بسازیم و سپس آن‌را زیبا کنیم.

در دنیای واقعی، ابتدا زمینی را اجاره میکنیم یا میخریم، سپس با استفاده از بتن، سیمان، میل گرد، آجر و… آن‌را میسازیم  و در مرحله‌ی آخر با گچ کاری، رنگ، سرامیک، کف پوش و… آن را زیبا میکنیم. در دنیای وب نیز دقیقا به همین شکل است. ابتدا سایت‌مان را میسازیم، و سپس با استفاده از ابزارهایی آن‌را زیبا میکنیم.

پس در پاسخ به سوال طراحی وب چیست میتوانیم بصورت بسیار ساده بگوییم: هر آن چیزی که کمک میکند وبسایت ما بهتر و زیباتر دیده شود را طراحی وب میگوند.

یک طراح وب مشخص میکند که المان های مختلف یک وبسایت مثل متن ها، عکس ها، لینک ها و… به چه شکل نمایش داده شوند و محل هرکدام از بخش های سایت مثل لوگو، مقالات، منو و… در کجای صفحه وب قرار بگیرد.

طراحی وب را با برنامه نویسی وب اشتباه نگیرید!

اشتباهی که معمولا افراد تازه کار به آن مبتلا می شوند این است که طراحی وب را با برنامه نویسی وب اشتباه میگیرند. در صورتی که این دو مفهوم کاملا با یکدیگر متفاوت هستند و نباید به جای دیگری از آن‌ها استفاده کرد.

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

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

طراح وب کیست و چه وظایفی دارد؟

تا اینجا درباره‌ی طراحی وب صحبت کردیم و الان پاسخ دادن به سوال « طراحی وب چیست » برایمان کار زیاد سختی نیست. حالا میخواهیم درباره‌ی وظایف یک طراح وب صحبت کنیم و بگوییم که یک طراح وب چه کاری باید انجام دهد.

طراح وب یا به اصطلاح Front End Designer کسی است که با استفاده از تکنولوژی‌های مختلف (مثل HTML – CSS – Javascript و … ) ظاهر یک سایت را طراحی میکند و کاری به کدهای پشت صحنه ندارد.

ممکن است برایتان سوال پیش بیاید که Front End چیست و چه تفاوتی با Back End دارد. سوال بسیار خوبی است که در فیلم و مقالات آموزشی آینده حتما درباره آن صحبت میکنیم.

زبان های طراحی وب

همانطور که در قسمت قبل یک اشاره‌ی کوچک داشتیم، یک طراح وب برای طراحی صفحات وب از تکنولوژی ها و زبان های برنامه نویسی مختلفی استفاده میکند.

یک طراح وب، برای اینکه بتواند یک صحفه‌ی وب را طراحی کند، از تکنولوژی های زیر استفاده میکند:

  • HTML (یا HTML5)
  • CSS (یا CSS3)
  • جاوا اسکریپت
  • جی کوئری
  • و…

۴ موردی که در بالا نام بردیم، حداقل دانشی است که شما برای طراحی صفحات وب و تبدیل شدن به یک طراح وب نیاز دارید. البته میتوانید فقط با ۲ مورد اول یعنی HTML و CSS نیز سایت هایی را طراحی کنید،‌ ولی جاوا اسکریپت و جی کوئری میتوانند به کار شما بسیار قدرت دهند.

باید به این نکته توجه کنیم که به دلایلی نمیتوانیم به HTML و CSS زبان های برنامه نویسی بگوییم. زیرا اصلا ویژگی های زبان های برنامه نویسی را ندارند. بلکه آن‌ها را  زبان های نشانه گذاری یا تگ گذاری میدانیم.

برای طراحی وب به چه ابزارهایی نیاز داریم

تا اینجا سعی کردیم به سوال طراحی وب چیست پاسخ دهیم. حالا میخواهیم ببینیم که برای طراحی وب به چه ابزارهایی نیاز داریم.

برای طراحی صفحات اینترنتی، نیاز به داشتن امکانات پیچیده نیست. حداقل هایی که نیاز داریم را در زیر مشاهده میکنید:

  • یک محیطی که بتوانیم کدهایمان را در آن بنویسیم. این محیط میتواند Notepad ویندوز باشد و یا یک Text Editor یا IDE حرفه‌ای تر(مثل phpStorm)
  • یک مرورگر اینترنتی (Browser) که بتوانیم کدهایمان را از طریق آن اجرا کنید (مثل فایرفاکس، گوگل کروم و…)

درباره‌ی طراحی وب و آموزش های طراحی وب، در آینده در یادیفای حتما مقالات بسیار خوبی خواهیم داشت.

منبع: یادیفای

نوشته طراحی وب چیست؟ همه چیز درباره‌ی طراحی وب سایت (web design) اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

باگ امنیتی جدید در افزونه Duplicator وردپرس

حدود یک ماه گذشته نقص امنیتی در افزونه Duplicator توسط شرکت ارائه دهنده آن Synacktiv کشف شد. Duplicator یکی از پرکاربرد ترین افزونه های وردپرس برای بک آپ گیری و انتقال سایت های وردپرسی هستش و باعث شد که عده زیادی با مشکلات عدیده ای رو به رو شوند. این باگ باعث میشه اختلالات زیادی مثل حذف شدن مشخصات دیتابیس از فایل کانفیگ وردپرس به وجود بیاید که در این صورت سایت با پیغام دیتابیس مواجه می شود:

مشکل از اون جا شروع میشه که بعد از پایان کار و استفاده از افزونه، فایل های installation باقی مانده توسط کاربر از روی هاست پاک نمی شوند.

خود Duplicator این موضوع را به کرات به کاربر گوشزد می کند، ولی خب طبیعتا ما ایرانی ها علاقه چندانی به توجه به پیغام های هشدار و یا حتی خوندن آن ها نداریم و با بی توجهی ازش می گذریم 🙂

بعد از پایان کار افزونه، این پیغام به صورت sticky داشبورد نمایش داده میشه و تا زمان پاک کردن فایل های نصبی (و یا uninstall کردن افزونه) باقی می ماند:

پیغام sticky

فایل های مخرب اصلی در این باگ، دو فایل installer.php و installer-backup.php هستند و چون استرینگ های دریافتی را اصطلاحا بدون تمیز کاری (sanitizing)‌ مستقیما به فایل wp-config وارد می کنند باعث به وجود آمدن injection vulnerability در سایت می شوند.

راه حل چیه؟‌

  • اولا Duplicator را آپدیت کنید. چون patch مربوط به باگ توسط شرکت صادر شده که تا حد زیادی مشکل رو رفع می کنه.
  • فایل هایی که دربارش صحبت شد (installer.php and installer-backup.php) و یا هر فایل دیگه ای که مربوط به بازگردانی بک آپ توسط افزونه میشه را از روی هاست خود پاک کنید. ممکنه فایل هایی با اسم database.sql را هم ببینید که باید حذف بشه.
  • جهت اطمینان رمز دیتابیس وردپرس را ریست کنید.
  • باز هم جهت اطمینان، فایل wp-config.php را پاک کنید و مجددا بسازید. از این API وردپرس استفاده کنید تا کلید های امنیتی برای فایل بسازید و در آن جایگزین کنید.

در آخر هم یادتون باشه که از این به بعد اگر از اینچین افزونه هایی استفاده کردید حتما پس از پایان کار فایل های اضافی را پاک کنید .

نوشته باگ امنیتی جدید در افزونه Duplicator وردپرس اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

۱- همه چیز درباره گردل: معرفی ساختار

اندروید استدیو برای بیلد پروژه‌ها از ابزاری به نام gradle استفاده می‌کند. زبان این ابزار groovy نام داره و یکی از قدرتمند ترین ابزارهای بیلد پروژه‌هاست. فرایند بیلد پروژه در gradle به این صورت ذیل می باشد.

همان گونه که در تصویر فوق مشخص است داده‌های برنامه به همراه کتابخانه‌هایی که در آن استفاده شده کامپایل شده و فایل dex تولید می‌شود، سپس با کلید مورد نظر sign می‌شود و فایل قابل نصب بدست می‌آید.

بیلد یک پروژه جنبه‌های مختلفی دارد:

یک: Build Types

مراحل فرایند ساخت پروژه را مشخص می‌کند. برای مثال در حالت دیباگ کلیدی که مورد استفاده قرار می‌گیرد، شرایط درهم ریزی کد و کوچک شدن و… را مشخص می کند. بیلد تایپ‌های پیشفرض debug و release هستند ولی شما می‌تواند به آنها اضافه کنید.

دو: Product Flavors

با اضافه کردن به flavor های پروژه شما می‌توانید نسخه‌های تفکیک شده‌ای از محصول خود داشته باشید. برای مثال از یک سورس کد نسخه دمو و اصلی برنامه را خروجی بگیرید. توجه داشته باشید از نام‌هایی رجیستر شده برای flavor مانند test، debug، main و… استفاده نکنید.

سه: Build Variants

این قابلیت بیلد به شما این اختیار را می‌دهد که ریسورس‌های دو flavor را از هم جدا کنید. برای مثال این امکان را برای شما فراهم می کند که از دو آیکن متفاوت برای نسخه اصلی برنامه و نسخه دمو برنامه استفاده کنید. برای این کار شما باید هم نام flavor خود یک پوشه در کنار پوشه main ایجاد کنید و در پوشه ساخته شده پوشه هایی هم نام ریسورس‌های پوشه main بسازید، تنها نکته‌ای که باید به آن توجه داشته باشید این است که از هم‌نامی برای جایگزین شدن فایل‌ها در زمان بیلد استفاده کنید.

چهار: Manifest Entries

این مفهوم به شما کمک می‌کند تا از چندین فایل منیفست بهرمند شوید. با استفاده از این قابلیت می‌توانید یک فایل منیفست را برای هر کدام از flavor ها به صورت مجزا پیکربندی کنید.

پنج: Dependencies

این قابلیت که معادل فارسی اون میشه وابستگی به شما کمک می‌کنه تا از کتابخانه‌های منتشر شده در اینترنت به سادگی استفاده کنید. فقط کافی لینک اونها رو توی فایل پیکربندی پروژتون قرار بدید.

شش: Signing

با استفاده از این ویژگی gradle شما می‌توانید امضا فایل خروجی پروژه خود را مشخص کنید، تا در زمان بیلد پروژه از فایل امضا مشخص شده برای پروژه استفاده شود. امضا کردن فایل خروجی برنامه باعث می‌شود تا شما کلیدی منحصر به فرد برای پروژه داشته باشید. فایل امضا همان keyStore است. اگه فایل امضا برنامه‌ای به هر دلیلی تغییر کنه کاربرها دیگر قادر به بروزرسانی برنامه نیستند و باید برای نصب نسخه جدید برنامه قبلی خود را حذف کنند.

هفت: ProGuard

یکی از قابلیت های خوب gradle پروگارد است. شما می‌تونید در پروگارد تعدادی روال تعریف کنید که gradle در زمان بیلد پروژه با استفاده از آنها کدهای شما رو کوچک و مبهم کنه. این کار باعث می‌شود تا علاوه بر کاهش حجم پروژه در صورتی که شخصی کد برنامه شما را دیکامپایل کند قادر به خواندن کد شما نباشه.

هشت: Multiple APK Support

این ویژگی به شما این امکان را می‌دهد که همزمان چند فایل خروجی با داده‌های مختلف بدست بیاورید. برای مثال همزمان فایل خروجی نسخه اصلی و نمایشی را می‌تونید خروجی بگیرید.

ساختار فایل های پیکربندی:

شما میتوانید فایل‌های پیکربندی شخصی خودتان را داشته باشید، پیکربندی را تقسیم کنید به چند فایل یا همه دستورات را در یک فایل بنویسید. برای تغییر در ساختار استاندارد پیکربندی پروژه لازم است که به میزان تغییرات فایل‌ها، پیکربندی پیشفرض رو دستکاری کنید و مطابق نیاز آنها را ویرایش کنید. ساختار پیکربندی پیشفرض یک پروژه اندروید را می‌توانید در تصویر زیر مشاهده کنید.

شما می‌توانید این پیکربندی را تغییر دهید اما باید قبل از این کار حتما حوزه و هدف هر فایل را به خوبی بشناسید و از حداقل های زبان groovy آگاهی داشته باشید.

معرفی فایل های پیکربندی پروژه:

یک: settings.gradle

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

include ‘:app’

در صورتی که شما هر ماژولی به برنامه خود اضافه کنید باید نام آن را در ادامه این فایل بنویسید.

دو: build.gradle سطح پروژه

این یک فایل سطح بالا است، همانگونه که در تصویر می‌بینید این فایل در ریشه پروژه قرار دارد. این فایل پیکربندی بر روی تمام ماژول‌ها اعمال می شود و همه ماژول‌ها به آن دسترسی دارند. در بلاک buildscript شما می توانید تمام مخازن و وابستگی‌های کل ماژول‌های خودتان را تعریف کنید. در بلاک allprojects شما می توانید تمام مخازنی که کل ماژول‌های پروژه به آنها نیاز دارند را تعریف کنید، برای مثال third-party ها، کتابخانه‌ها و…. یکی دیگر از قابلیت های جذاب این فایل پیکربندی بلاک ext‌ هست، که به شما اجازه می‌دهد پیکربندی خود را توسعه دهید. برای این کار شما در این بلاک متغییر هایی که نیاز دارید را تعریف می‌کنید و در دیگر قسمت‌های فایل‌های پیکربندی از این متغییرها استفاده می کنید.

  compileSdkVersion rootProject.ext.compileSdkVersion

سه: build.gradle سطح ماژول

این فایل پیکربندی در سطح ماژول است و در آدرس project/{module}/build.gradle قرار دارد. تنظیمات این فایل بر روی ماژول جاری اعمال می‌شود. این تنظیمات به شما اجازه می‌دهد تا ماژول سفارشی تولید کنید. برای مثال تنظیمات مربوط به flavor ها در این فایل نوشته می شود. در خط اول این فایل با دستور زیر به gradle معرفی می‌کنیم که این پیکربندی برای پلاگینی اندرویدی است. بلاک android که فقط خاص پروژه های اندروید است قابل شناسایی می‌شود. در این بلاک، پیکربندی ساخت ماژول را مشخص می کنیم.

apply plugin: ‘com.android.application’

شما همچنین می‌توانید مخازن و وابستگی‌های مورد نیاز این ماژول را در این فایل پیکربندی بنویسید.

معرفی فایل‌های پیکربندی gradle:

یک: gradle.properties

این فایل برای پیکربندی gradle استفاده می‌شود. برای مثال داده‌های پراکسی، سایز رم مورد نیاز برای بیلد پروژه و… را در این فایل می توانید تنظیم کنید.

دو: local.properties

این فایل برای پیکربندی محیط بیلد پروژه است. برای مثال آدرس SDK و NDK در این فایل نوشته شده است.

همگام سازی پروژه:

در زمانی که شما تغییری در هر کدام از فایل های پیکربندی ایجاد کنید باید gradle را همگام سازی کنید. در بیشتر مواقع در بالای فایل های پیکربندی در نواری زرد رنگ عبارت Sync Now نمایش داده می شود که فقط لازم است بر روی آن کلیک کنید.

در صورتی که خواستید gradle را همگام سازی کنید و لینک فوق برای شما نمایش داده نشده بود میتوانی از نوار ابزار بر روی آیکن همگام سازی کلیک کنید تا پیکربندی شما همگام سازی شود.

منابع بیلد:

همانطور که قبلا گفتیم شما می توانید build type ها و product flavor ها متفاوتی داشته باشید. در صورتی که بخواهید منابع این دو نوع را از پروژه اصلی جدا کنید، باید به صورت زیر در ساختار پوشه‌های برنامه تغییر ایجاد کنید.

ساختار پیشفرض پروژه

src/main/

تغییر در منابع برای یک build type خاص

src/buildType/

تغییر در منابع برای یک flavor‌ خاص

src/productFlavor/

ترکیب یک build type و flavor

src/productFlavorBuildType/

ترکیب دو flavor

src/productFlavor1ProductFlavor2/

مثال:

src/main/
src/full/
src/debug/
src/fullDebug/

برای تغییر در build type و product flavor فعال اندروید استدیو میتونید از پنجره build variant‌ استفاده کنید.


منابع:

https://developer.android.com/studio/build/
https://developer.android.com/studio/build/shrink-code.html
http://www.gradle.org/
http://groovy-lang.org/

نوشته ۱- همه چیز درباره گردل: معرفی ساختار اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

شبکه توزیع محتوا (CDN) چیست و دلایل استفاده از CDN در وب سایت

” اگر من CDN برای سایتم بگیرم باز هم نیازه هاست بخرم؟” وقتی چنین سوالاتی مدام از ما پرسیده میشه به این نتیجه می رسیم که بسیاری از تازه کارها هنوز درک درستی از CDN ندارند. بخشی از این ابهام به ما برمی گرده که شاید هیچوقت به طور واضح در مورد CDN صحبتی نکردیم. هربار درمورد آن نوشتیم، مفاهیم پایه را نادیده گرفتیم. حالا قصد داریم در این مقاله توضیح بدیم که CDN چیست و چرا به استفاده از CDN برای بلاگ وردپرس خودتون نیاز دارید .
در همین ابتدا برای واضحتر شدن بهتره بگم، CDN چیزیست که علاوه بر هاست از آن استفاده می کنید چون کمک زیادی به افزایش سرعت سایت می کند. CDN جایگزین هاست نیست! با وجود داشتن CDN باز هم شما به یک ارائه دهنده هاست  نیاز خواهید داشت.

درخواست های زیادی از ما میشه برای یک آموزش دقیق و با جزئیات با هدف افزایش سرعت سایت های وردپرس. برای همین قصد داریم مفهوم CDN را روشن تر بیان کنیم. CDN مخفف Content Delivery Network به معنی شبکه توزیع محتواست. یعنی شبکه ای از سرور ها، محتوای استاتیک وب سایت ها را کش می کنند و مطابق موقعیت جغرافیایی کاربر این محتوا را به کاربر تحویل می دهند. گیج کنندست نه؟ بیاید به زبان ساده تر در موردش صحبت کنیم.

معمولا وقتی یک کاربر از سایت وردپرس شما دیدن می کند، به وب سروری که سایت خود را در آن هاست کردید هدایت می شود ( مثلا HostGator). فرض کنیم وب سرور میزبان شما در مرکز شهر Houston,TX قرار گرفته است. بنابراین همه کاربران برای مشاهده وب سایت به همین یک سرور مراجعه می کنند. حالا تصور کنید سایت شما ترافیک بالایی داشته باشد. چه اتفاقی می افتد؟ سایت شما باعث می شود بار زیادی به سرور تحمیل شود که در نتیجه سرعت لود شدن سایت کند می شود و حتی سرور کرش می کند( از کار می افتد). اینجاست که اهمیت وجود CDN به چشم میاد. چون نه تنها CDN به جای یک سرور چندین سرور فراهم می کند بلکه این سرور ها در سراسر جهان گستره هستند. وقتی از CDN استفاده می کنید محتوای استاتیک سایتتان کش شده و در تمامی این سرورها ذخیره می شود. شاید بپرسید محتوای استاتیک سایت شامل چه چیزهاییست؟ تصاویر، فایل های CSS که مربوط به قالب سایت هستند، جاوا اسکریپت ها، فلش و غیره. حالا اگر یک بازدید کننده به سایت شما بیاید( سرور اصلی) فن آوری CDN او را به نزدیک ترین سرور موقعیت مکانیش هدایت می کند.
مثال می زنم، اگر سرور اصلی که سایت رو روی اون هاست کردید در Houston,TX باشد و شخصی از Durham انگلیس به سایت مراجعه کند، به نزدیکترین سرور که احتمالا در لندن خواهد بود هدایت می شود. امتیاز استفاده از CDN فقط افزایش سرعت بارگزاری سایت نیست بلکه تعداد هک هایی که هنگام انتقال فایل های استاتیک به کاربر نهایی اتفاق می افتد را نیز کاهش می دهد.
نزدیکی کاربر به وب سرور تاثیر به سزایی در سرعت لود سایت دارد. با مستقر کردن محتوای سایتتان روی چندین سرور پراکنده در جهان، باعث می شوید سایت از موقعیت کاربر سریعتر لود شود.اینجاست که CDN به کمکتان می آید. به زبان ساده تر هرچقدر سرور CDN به کاربر شما نزدیکتر باشد، محتوا سریعتر لود می شود.

CDN مخفف Content Delivery Network به معنی شبکه توزیع محتواست.

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

محتوای استاتیک وب سایت ها را کش می کند و بر اساس موقعیت جغرافیایی کاربر، موقعیت سرور حاوی محتوای اصلی و سرور CDN این محتوا را به کاربر نمایش می دهد

 

شبکه توزیع محتوا (CDN) چیست

 

چرا برای بلاگ وردپرس خود به CDN نیاز دارید؟

 

مزایای استفاده از CDN:

سرعت:

به محض شروع استفاده از CDN سایت سریعتر خواهد شد.

جلوگیری از کرش کردن:

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

بهبود تجربه کاربر:

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

بهبود SEO:

گوگل به وضوح اعلام کرده که سایت های سریعتر رنک بالاتری در موتور های جستجو دارند.

ما روی سایت خودمون از cloudflare استفاده می کنیم که واقعا عالیست.

در مورد نحوه ثبت نام و آشنائی با cloudflare لینک آموزش و آشنایی با سرویس کلودفلر را لطفا مطالعه کنید.

 

برگرفته از [wpbeginner.com]

 

نوشته شبکه توزیع محتوا (CDN) چیست و دلایل استفاده از CDN در وب سایت اولین بار در ایران سرور پدیدار شد.

گردآوری توسط ایده طلایی

مثال های کاربردی ریدایرکت در htaccess

در مقاله قبلی  توضیحات کاملی در مورد فایل htaccess و کاربرد های آن  و اینکه این فایل چگونه ایجاد می شود، تشریح شد. یکی از پرکاربردترین استفاده ای که از فایل htaccess انجام می شود، ریدایرکت یا فوروارد می باشد، در این مقاله برخی از پرکاربردترین کدهای ریدایرکت را معرفی می کنیم.

 

ریدایرکت  http به https

RewriteEngine On

RewriteCond %{HTTPS} off

RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

 

ریدایرکت https با (www   (https://www به بدون  www

RewriteEngine On

RewriteCond %{HTTPS} off [OR]

RewriteCond %{HTTP_HOST} ^www. [NC]

RewriteRule ^ https://okex.ir%{REQUEST_URI} [L,NE,R=301]

 

ریدایرکت آدرس سایت بدون www به آدرس با www

RewriteEngine on

RewriteCond %{HTTP_HOST} ^example.com [NC]

RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]

بجای عبارت example.com که نام دامنه میباشد باید ادرس دامنه خودتان را وارد کنید.

 

ریدایرکت آدرس سایت با www به آدرس بدون www

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www.example.com [NC]

RewriteRule ^(.*)$ http://example.com/$1 [L,R=301,NC]

بجای عبارت example.com که نام دامنه میباشد باید ادرس دامنه خودتان را وارد کنید.

 

ریدایرکت http به  https  بجز یک دایرکتوری یا  فولدر



RewriteCond %{HTTPS} on

RewriteRule ^%{HTTP_HOST}/demo(.*) http://%{HTTP_HOST}/demo/$1 [R=301,L]

RewriteRule ^index.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]

در مثال بالا نام دایرکتوری مورد نظر را جایگزین  demo کنید.

ریدایرکت فقط یک پوشه از سایت بر بستر https

RewriteEngine On

RewriteCond %{SERVER_PORT} 80

RewriteCond %{REQUEST_URI} folder

RewriteRule ^(.*)$ https://www.example.com/folder/$1 [R,L]

در این مثال بایستی folder را با نام پوشه مورد نظر جایگزین نموده و بجای www.example.com نام دامنه مورد نظر را درج کنید.

 

ریدایرکت ساب دامنه بر روی دامنه اصلی

#Options +FollowSymlinks

RewriteEngine On

RewriteCond %{HTTP_HOST} ^sub.domain.com$ [OR]

RewriteCond %{HTTP_HOST} ^www.sub.domain.com$

RewriteRule (.*)$ http://domain.com/$۱ [R=301,L]

 

ریدایرکت یک فایل در   htaccess

RedirectMatch 301 /oldurl  /newurl

 

ریدایرکت تمامی آدرس های یک دامنه به یک آدرس خاص

RedirectMatch 301 / /newurl

ریدایرکت از نوع موقت (۳۰۲)

Redirect 302 / http://domain.com/

 

ریدایرکت دامنه قدیمی به دامنه جدید

RewriteEngine on

RewriteCond %{HTTP_HOST} ^ domain.ir [NC,OR]

RewriteCond %{HTTP_HOST} ^www.domain.ir [NC]

RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301,NC]

نام دامنه قدیمی را جایگزین domain.ir و نام دامنه جدید را جایگزین  domain.com کنید.

 

ریدایرکت یک صفحه به صفحه دیگر

Redirect /old-index.html http://www.mynewwebsite.com/foldername/new-index.html

 

ریدایرکت دامنه پارک شده به ساب دامنه

RewriteEngine on

RewriteBase /

RewriteCond %{HTTP_HOST} ^(www.)?parkdomain.com$ [NC]

RewriteRule ^(.*)$ http://maindomain/subdomain [L]

نام دامنه پارک شده را جایگزی parkdomain.com و بجای maindomain/subdomain  آدرس ساب دامنه مورد نظر را درج کنید.

 

ریدایرکت دامنه اصلی به ساب دامنه

Options +SymLinksIfOwnerMatch

RewriteEngine on

RewriteCond %{HTTP_HOST} ^(www.)?domain.com$ [NC]

RewriteRule ^http://sub.domain.com[R,L]

بجای domain و .com نام دامنه و پسوند آن را درج نموده و بجای  sub.domain.com نام ساب دامنه مورد نظر را درج کنید.

 

ریدایرکت webmail

با کد زیر می توانید webmail.domian.com را به domain.com/webmail ریدایرکت کنید.

RewriteEngine on

RewriteBase /

RewriteCond %{HTTP_HOST} ^(www.)?webmail.domain.com/$ [NC]

RewriteRule ^(.*)$ http:// domain.com/webmail/ [L]

نام دامنه مورد نظر را جایگزین domain.com نمائید.

 

ریدایرکت ساب دامنه به ip با پورت

RewriteEngine on

RewriteCond %{HTTP_HOST} ^subsonic.mydomain.com$ [NC]

RewriteRule ^(.*)$ http://ip:4040/$1 [R=301]

 

ریدایرکت کردن کل ترافیک سرور بر روی https

RewriteEngine On

RewriteCond %{SERVER_PORT} 80

RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

با قرار دادن این کد ها کل ترافیک هاست به https://www.example.com ریدایرکت می شود.

 

ریدایرکت یک پسوند خاص صفحات سایت به پسوند دیگر

 RedirectMatch 301 (.*).html$ http://domain.com$1.php

با این کد، صفحاتی نظیر http://domain.com/Page.html به http://domain.com/Page.php ریدایرکت ۳۰۱ می شود.

 

 

نوشته مثال های کاربردی ریدایرکت در htaccess اولین بار در ایران سرور پدیدار شد.

گردآوری توسط ایده طلایی

htaccess چیست و چه کاربردی دارد؟

 htaccess چیست؟

.htaccess یک فایل با محیط متنی می‌باشد که جهت پیکربندی پوشه‌های مختلف در  بعضی از وب سرورها از جمله آپاچی به کار می‌رود. بسیاری از کارهایی که نیاز به کدنویسی‌های پیشرفته دارند، تنها با نوشتن یک خط کد در این فایل ممکن می‌گردند.

با استفاده از این فایل شما می توانید صفحه ای را به صفحه دیگر ریدایرکت کنید ، پسوند فایل را تغییر دهید ، روی پوشه رمز گذاری نمائید و مواردی از این قبیل را بسادگی انجام دهید.

فایل htaccess کجاست ؟ نحوه دسترسی به htaccess  چگونه است؟

این فایل بصورت معمول در  دایرکتوری public_html هاست وجود دارد. در اغلب  سیستم های مدیریت محتوا مثل وردپرس و دروپال این فایل بصورت خودکار ایجاد می شود.

در صورتیکه کنترل پنل  هاست شما  cpanel می باشد، این کنترل پنل بصورت پیش فرض فایل های مخفی را نمایش نمی دهد، بنابراین جهت نمایش فایل های مخفی بصورت زیر اقدام نمائید:

در پوشه Fle Manager در گوشه بالا سمت راست صفحه بر روی دکمه Settings کلیک کنید تا پنجره پاپ آپ مربوط به تنظیمات فایل منیجر نمایش داده شود.

در پنجره پاپ آپ باز شده تیک گزینه Show Hidden Files را بزنید و روی save کلیک کنید.

با این تغییر پس از ذخیره می‌توانید وارد پوشه  public_html شوید و فایل htaccess را مشاهده نمایید . در پوشه Home نیز سایر پوشه های مخفی نظیر Trash که فایل های حذف شده در آن قرار دارد قابل مشاهده خواهد بود .

 

معرفی سایت جهت ساخت htaccess

شما از طریق سایت htaccesseditor.com بسادگی می توانید با توجه به کاربرد مورد نظرتان کدی که لازم است در htaccess درج کنید را تولید نموده و در فایل htaccess سایت خود اضافه کنید.

 

کاربرد های htaccess

این فایل که معمولا با نصب CMSهای معروف و Open Source مانند WordPress، Joomla و Drupal به صورت خودکار در مسیر اصلی اسکریپت ایجاد و محتوا سازی می شود، عهده‌دار وظایف مهمی نظیر موارد زیر می‌باشد:

 

تغییر عنوان و فرمت فایل اصلی index

شما با استفاده از این کد می توانید نام و فرمت فایل اصلی سایت خود را تغییر دهید

DirectoryIndex file.php file.htm

 

جلوگیری از سرقت فایلهای و فولدرهای درون هاست

بیشتر وقتها اطلاعاتی مثل فایل‌های قالب اختصاصی شما که بر روی هاست قرار دارند و یا فایل‌هایی که به صورت zip شده در هاست خود ذخیره کرده‌اید به راحتی با مرور هاست شما توسط سایرین کشف و به سرقت میرود، برای جلوگیری از این امر کد زیر رو در اننهای فایل htaccess قرار دهید.

Options All -Indexes

 

محدودیت دسترسی با ip های خاص در  htaccess

در برخی مواقع مثل بازدیدهای غیر واقعی که درخواست های زیادی از یک یا رنجی از ip به سایت شما  ارسال می شوند و باعث کاهش سرعت لود سایت شما می گردند و یا مسدود کردن ip اسپمرها می توانید Ip های مورد نظر را از طریق فایل  htaccess محدود کنید.

deny from 1.2.3.4

allow from all

بجای ۱٫۲٫۳٫۴  نیاز است  ip  یا رنج ip مورد نظر را اضاف کنید.

همچنین برای امنیت مدیریت سایت شما نیز می توانید در مسیر  مدیریت سایت بعنوان مثال در وردپرس در مسیر wp-admin  یک فایل .htaccess ایجاد نموده و دسترسی کلیه Ip ها بغیر از ip استاتیک خودتان را محدود کنید بدین شکل تنها از سیستم شما به مسیر مدیریت سایت دسترسی وجود خواهد داشت.

deny from all

allow from 1.2.3.4

بجای ۱٫۲٫۳٫۴  نیاز است  ip  یا رنج ip مورد نظر را اضاف کنید.

 

افزایش امنیت فایل در htaccess (ایجاد محدودیت در دسترسی به فایل)

جهت عدم دسترسی سایرین به برخی از فایل های مهم سایت مثل فایل های کانفیگ کد زیر را در htaccess درج کنید:



order allow,deny

deny from all

بجای wp-config.php نیاز است نام فایل مورد نظر را درج نمائید.

 

مخفی کردن لیست دایرکتوری ها

یکی از مشکلاتی که در سایت ها وجود دارد قابلیت مشاهده کردن فایل ها و پوشه ها میباشد که موجب میشود تا هر کسی بتواند محتوای آپلود شده در سایت شما را ببیند و  بعنوان مثال قادر خواهند بود قالب سایت شما را کپی کنند.

جهت جلوگیری از این مشکل کد زیر را در htaccess درج کنید:

Options –Indexes

 

کش شدن سایت بر روی مرورگر با کد  htaccess

کش شدن سایت بر روی مرورگر باعث میشود مصرف ترافیک ، مصرف رم و cpu در سایت شما کاهش یابد و در نتیجه سرعت لود شدن سایت شما افزایش یابد.

کد زیر را در انتهای فایل htaccess قرار دهید:

# Enables browser caching



ExpiresActive On

ExpiresByType image/jpg "access 1 year"

ExpiresByType image/jpeg "access 1 year"

ExpiresByType image/gif "access 1 year"

ExpiresByType image/png "access 1 year"

ExpiresByType text/css "access 1 month"

ExpiresByType application/pdf "access 1 month"

ExpiresByType text/x-javascript "access 1 month"

ExpiresByType application/x-shockwave-flash "access 1 month"

ExpiresByType image/x-icon "access 1 year"

ExpiresDefault "access 2 days"

 

محدود کردن نوع فایلهای قابل اجرا و نمایش

برای حفظ امنیت و اطلاعات سایت می‌توانید پسوند فایل‌هایی که بتوان اجرا کرد رو تعیین کنید :

Options +FollowSymlinks

RewriteEngine On

rewritecond %{REQUEST_FILENAME} !^(.+).css$

rewritecond %{REQUEST_FILENAME} !^(.+).js$

rewritecond %{REQUEST_FILENAME} !file.php$

RewriteRule ^(.+)$ /deny/ [nc]

 

اضافه کردن mime-type از طریق htaccess

حذف پرسش سرور پیرامون اینکه فایل را باز می نمایید و یا دانلود می کنید. براحتی فایل مورد نظر را download  نمایید.

AddType application/octet-stream .pdf

AddType application/octet-stream .zip

AddType application/octet-stream .mov

 

فعال کردن  gzip

شما از طریق htaccess می توانید gzip-compression  را فعال نموده و این تغییر در افزایش سرعت سایت موثر می باشد، جهت کسب اطلاعات بیشتر در این زمینه مقاله gzip-compression را مطالعه نمائید، در این مقاله کدهای مختلف فعالسازی برای سیستم های مدیریت محتوا و وب سرور های گوناگون ذکر شده است.

 

ایجاد محدودیت در آپلود فایل

از طریق کد زیر می توانید حداکثر حجم فایل قابل آپلود رو ۲۰ مگابایت تنظیم کنید.

php_value upload_max_filesize 20M

 

ایجاد محدودیت در حجم پست ارسالی

از طریق کد زیر می توانید حداکثر حجم هر پست رو ۲ مگابایت مشخص کنید.

php_value post_max_size 2M

 

تنظیم محدودیت حافظه memory_limit

از طریق کد زیر می توانید میزان محدودیت حافظه را مشخص کنید.

php_value memory_limit 128M

 

تعریف ریدایرکت در htaccess

یکی از پر کاربردترین موارد در htaccess امکان تعریف ریدایرکت و فوروارد است. شما می توانید از طریق درج کد در این فایل سایت یا لینک های مختلف آن را به آدرس دیگری هدایت کنید، یا مشخص کنید سایت با http  به  https و یا با www به بدون www ریدایرکت شود.

در مقاله مثال های کاربردی ریدایرکت در htaccess می توانید برخی از پر کاربردترین کد های ریدایرکت را مشاهده کنید.

ریدایرکت از طریق Htaccess

بعنوان مثال از طریق کد زیر می توانید http را به https ریدایرکت کنید:

RewriteEngine On

RewriteCond %{HTTPS} off

RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

 

تغییر صفحه پیش فرض

با استفاده از کد زیر می توانید مشخص کنید، صفحه پیش فرض سایت چه صفحه ای باشد یعنی در زمان لود سایت ابتدا چه صفحه ای بارگذاری شود و یا اولویت نمایش صفحات پیش فرض را مشخض کنید.

#Alternate default index pages

DirectoryIndex first.html index.htm index.html index.php

 

ایجاد صفحات پیش فرض خطا

ایجاد صفحه خطای اختصاصی به این معناست که مثلا لحظه‌ای وبسایت شما با یکی از خطاهای رایج HTTP که در بالا در مورد برخی از آن‌ها صحبت شد، مواجه می‌شود؛ برای مثال فایل یا صفحه‌ای وجود ندارد و بازدید کننده با وارد کردن آدرسی که در سرور و وبسایت شما وجود ندارد با خطای ۴۰۴ مواجه می‌شود. حال ممکن است او معنی این خطا را نداند و یا حتی اگر بداند باز دچار سردرگمی شود و از بازدید وبسایت شما منصرف شود. در این شرایط چنانچه ما از پیش صفحه‌ای ساخته باشیم تا بازدیدکننده به جای مواجهه با خطای ۴۰۴، وارد صفحه‌ای شود که به درستی به او این پیغام را دهد که «فایل مورد نظر وجود ندارد؛ ممکن است این فایل به دلیلی حذف و یا جابه‌جایی آن به مسیر دیگر روی داده باشد»، این گونه بازدیدکننده حس بهتری نسبت به آن خطا پیدا می‌کند.

ErrorDocument 401 /error_pages/401.html
ErrorDocument 404 /error_pages/404.html
ErrorDocument 500 /error_pages/500.html

 

نحوه جلوگیری از عمل Hotlink در فایل  .htaccess (جلوگیری از استفاده تصاویر سایت در سایت های دیگر)

Hotlink Protection  باعث می‌گردد از کپی شدن اطلاعات شما در وبسایت‌های دیگر جلوگیری شود برای مثال چنانچه تصویری در یک دایرکتوری از سرویس میزبانی شما وجود دارد، از نمایش آن تصویر در وبسایت‌های دیگر جلوگیری به عمل می‌آید و همچنین چنانچه فایلی قابلیت دانلود با لینک مستقیم با استفاده از وبسایت شما را دارد و لینک مذکور در وبسایتی دیگر کپی گردیده باشد، کاربران آن وبسایت با کلیک بر روی لینک مذکور ابتدا به آدرس وبسایت شما ارجاع داده می‌شوند.  این امر باعث افزایش ترافیک و لود سایت شما می شود. در این صورت پهنای باند شما در حالی به پایان می رسد که بازدیدها از سایت شما صورت نگرفته است.

با استفاده از htaccess مانع از استفاده ی مطالب خود در سایر وب سایت ها می شوید مخصوصا استفاده از تصاویر وب سایت شما.

توجه داشته باشید ، این قابلیت مستلزم آن است که از mod_rewrite است بر روی سرور شما فعال باشد.بنابراین حتما با مدیر سیستم خود و یا شرکت میزبانی وب ارتباط برقرار نمایید.

دستورالعمل جلوگیری از استفاده از مطالب برای فایل ها با فرمت های ‘GIF’ ، ‘ JPG’ و ‘CSS’ که باید در فایل htaccess قرار بگیرد در زیر آمده است:

RewriteEngine on

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !^http://(www.)?yourdomain.com/.*$ [NC]

RewriteRule .(gif|jpg|css)$ - [F]

‘yourdomain.com’ با آدرس وب سایت جایگزین میشود.

 

مسدود کردن حملات XSS

هدف از حمله XSS، تزریق کدهای مخرب برای اجرا در صفحات وبی که به کاربرانشان اعتماد کرده اند(اگر بخواهیم خوش بین باشیم) است. این کدها مانند کدهایی که از سمت سرور به سمت کلاینت میرسند، اجرا خواهند شد و میتوانند به همه اطلاعاتی که کاربر میتواند دسترسی داشته باشد، دسترسی پیدا کنند مانند کوکی، Session و … .

# Blocks some XSS attacks



RewriteCond %{QUERY_STRING} (|%3E) [NC,OR]

RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]

RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})

RewriteRule .* index.php [F,L]

 

اعمال رمز عبور برای دایرکتوری‌(Password Protection)

با اعمال چند خط کد ساده در فایل htaccess. می‌توان دسترسی به دایرکتوری‌ها را با تعریف نام‌ کاربری و رمز عبور در فایلهای htpasswd. کنترل نمود.

 

محتویات htaccess پیشفرض در وردپرس

بصورت پیش فرض فایل Htaccess وردپرس شامل کد زیر می باشد،  در صورتیکه این فایل وجود نداشته باشد یا این کد از htaccess حذف شود صفحات داخلی سایت شما باز نخواهد شد و با ارور ۴۰۴ مواجه می گردد.

# BEGIN WordPress



RewriteEngine On

RewriteBase /

RewriteRule ^index.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]



# END WordPress

 

حفاظت از htaccess. از دسترسی غیر مجاز

همانطور که مشاهده کردید، کارهای زیادی وجود دارد که می توانید با استفاده از فایل htaccess. انجام دهید.  با توجه به قدرت و کنترل آن بر روی وب سرور شما مهم است که این فایل را از دسترسی غیرمجاز توسط هکرها محافظت کنید. جهت حفاظت از این فایل به سادگی کد زیر را در فایل htaccess. خود اضافه کنید:



order allow,deny

deny from all

 

 

 

نوشته htaccess چیست و چه کاربردی دارد؟ اولین بار در ایران سرور پدیدار شد.

گردآوری توسط ایده طلایی

مقایسه محبوب ترین کنترل پنل های میزبانی وب

اغلب افرادی که به میزبانی وب نیاز دارند، بدنبال ساده ترین روش برای مدیریت سرور می باشند و انتظار دارند رابط گرافیکی همراه با هاست ارائه شود. بسیاری از شرکت های هاستینگ معتبر برترین کنترل پنل ها را در پلن های خود ارائه می دهند.

کنترل پنل یک محیط مبتنی بر وب است که امکان مدیریت خدمات مختلف سرور را از طریق مرورگر برای  کاربران و یا مدیران سرور فراهم می کند. کنترل پنل ها ویژگی و امکانات مشابهی با هم دارند، اما دارای تفاوت های منحصر بفردی در قابلیت استفاده، امنیت، نگهداری و … می باشند.

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

 

انواع کنترل پنل هاست

معرفی کنترل پنل Cpanel

Cpanel کنترل میزبانی وب، مبتنی بر لینوکس است .این کنترل پنل قدرتمند و معروف آمریکایی گران قیمت و در عین حال پرکاربرد بوده که امروزه یکی ازپیشرفته ترین کنترل پنل های روز دنیاست. میلیون ها وب سایت در سراسر جهان از سی پنل استفاده می کنند. Cpanel کنترل کاملی را به شما در مورد عملیاتی مانند ایجاد دیتابیس، مدیریت فایل های سایت، ایجاد اکانت ایمیل و پاسخگوی خودکار ارائه می دهد. علاوه بر رابط گرافیکی،سی پنل دارای خط فرمان نیز می باشد که به فروشندگان نرم افزار، شرکت های میزبانی وب و توسعه دهندگان اجازه می دهد تا فرآیندهای مدیریتی را به شکل اتوماتیک انجام دهند.

رابط کاربری cpanel

معرفی کنترل پنل Direct Admin

DirectAdmin یکی از قوی ترین و بهترین کنترل پنل های موجود برای سرورهای لینوکس می باشد. دایرکت ادمین بگونه ای برنامه نویسی شده است که از  سرعت خارق العاده ای در اجرا و لود درخواست ها برخوردار می باشد، رابط کاربری پنل دایرکت ادمین در عین قدرتمندی بسیار آسان و کاربر پسند است و عملکرد و کارایی را تا حد زیادی برای کاربر رضایت بخش می کند. کاربران با استفاده از این نرم افزار می توانند تمام امکانات سایت خود را از جمله ایمیل ها، بانک های اطلاعاتی، FTP، آمار و … مدیریت نمایند. از آنجایی که این نرم افزار کانادایی است، همانند کنترل پنل های آمریکایی مانند cPanel و … از ریسک پایین تری نسبت به تحریم و قطع شدن لایسنس برخوردار است. بسیاری از مدیران سرور ها بعد از تحریم های اعمال شده روی cPanel به DirectAdmin مهاجرت کردند.

رابط کاربری دایرکت ادمین

 

معرفی کنترل پنل plesk

کنترل پنل Plesk به دلیل پشتیبانی از هر دو سیستم عامل و پلتفرم ویندوزی و لینوکسی ، در حوزه هاستینگ  و سرور از محبوبیتی خوبی برخوردار است و توجه مدیران سایت و وب­مسترها را به خود جلب کرده است. شما می­توانید با استفاده از پلسک ، بدون دانش بسیار فنی ، تنظیمات هاست خود را مدیریت و کنترل کنید. در میان کنترل پنل هایی که برای ویندوز ارائه شده بیشتر آنها پایدار نیستند و از درجه اطمینان پایینی برخوردارند. کنترل پنل پلسک با ارائه اینترفیس قوی و مناسب به کمک پنل­های ویندوزی آمد و امکاناتی که دارد، تجربه جدیدی برای کاربرانش فراهم کرده است.

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

رابط کاربری پلسک

 

رابط کاربری

احتمالا اصلی ترین گزینه ای که ممکن است در انتخاب کنترل پنل تاثیرگذار باشد، رابط کاربری است.  بدیهی است رابط کاربری باید به گونه ای باشد که احساس خوبی در کاربر ایجاد نموده و دسترسی آسان به بخش های مختلف آن بسادگی امکانپذیر باشد.

پلسک اغلب بعنوان رابط کاربری واضح و جذاب تر بنظر می رسد، اما cpanel محبوب ترهست و از آنجا که بیشتر کاربران آشنا و با آن براحتی کار می کنند استدلال می کنند که رابط کاربری آن دوستانه است. دایرکت ادمین نیز از رابط کاربری ساده ای برخوردار است که پیچیدگی چندانی ندارد ، سهولت استفاده و سادگی ویژگی اصلی این کنترل پنل می باشد و هچنین از سرعت بالا و پشتیبانی قوی نیز برخوردار می باشد.

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

مشاهده دمو plesk                      https://webpro-lin.demo.plesk.com:8443/smb/

مشاهده دمو cpanel                    https://cpanel.com/demo/

مشاهده دمو  DirectAdmin           https://www.directadmin.com/demo.php

 

سازگاری سیستم عامل

از دیگر تفاوت های این کنترل پنل ها قابلیت اجرا برروی سیستم عامل های مختلف می باشد. از بین این سه کنترل‌پنل تنها پلسک سازگار با هر دو سیستم عامل لینوکس و ویندوز می باشد و در صورتیکه نیاز به استفاده همزمان از Php  و Asp داشته باشید و یا بخواهید php را در ویندوز استفاده کنید می توانید از کنترل‌پنل Plesk  استفاده کنید.

 

 

سیستم عامل

 

نام کنترل پنل

Linux (RedHat/CentOS/FreeBSD/Debian)  

cPanel

 

Windows Server (2012), Linux (CentOS/CloudLinux/RedHat/Ubuntu/Debian, openSUSE)  

Plesk

 

Linux (RedHat/CentOS/FreeBSD/Debian)

 

 

DirectAdmin

 

 

پنل مدیریت

Cpanel دارای دو بخش اصلی می باشد. بخش دسترسی کاربران که Cpanel و بخش دسترسی مدیر که Whm شناخته می شود. اگرچه دوبخش به هم لینک شده اند اما دارای لاگین و رابط مجزایی می باشند.  در دایرکت‌ادمین و پلسک  تنها یک لاگین برای مدیران و کاربران وجود دارد و اگرچه بنظر شبیه هم می باشند اما گزینه‌های کاملا متفاوتی دارند.

 

سهولت مدیریت

cpanel و plesk  هر دو محیط گرلفیگی تقریبا ساده ای را جهت نصب نسخه های مختلف Php و نصب ماژول های مورد نیاز کاربران را فراهم نموده اند، مخصوصا Cpanel که با فراهم کردن محیط easyapache  این کار را ساده تر کرده است و شما بعنوان یک مدیر سرور  بدون دانش بسیارفنی بسادگی می توانید، با آن کار کنید. محیط custom build مشابه فراهم شده در دایرکت ادمین کمی پیچیده تر است اما در رابطه با نصب ماژول های مختلف و یا تغییرات مورد نیاز در دایرکت ادمین در سایت های مختلف حتی فارسی  مطالب زیادی درج شده است و نیاز به نگرانی از این بابت وجود نخواهد داشت.

 

امنیت

یکی از موارد بسیار مهمی که می تواند بر روی اعتبار سرویس تأثیرگذار باشد، امنیت اکانت ها و امنیت سرور است. مکانیزم دسترسی به حساب کاربری در هر سه کنترل پنل به خوبی تفکیک شده است؛ بنابراین به هیچ وجه این امکان وجود ندارد که یک کاربر به حساب کاربر دیگری وارد شود. شما می توانید سیاست های رمزعبور، مدت زمان آماده به کار بودن، و بلک لیستی از IPها را به اجرا در آورید. برای امنیت در سطح حساب کاربری، در همه کنترل پنل ها توصیه می شود که افزونه هایی را نصب نمایید، افزونه هایی مانند فایروال ها ، اسکنرهای آپلود فایل، فیلترهای ضد هرزنامه و احراز هویت چندعاملی. با این وجود معروف است که پلسک در مواجهه با خطرِ آسیب­ پذیری،سریع­تر واکنش نشان میدهد. بهترین روش برای کاهش خطرات امنیتی نظارت بر کانالهای امنیتی است؛ و اگر در حین این نظارت مسأله ای یافت شود می بایست با استفاده از فایروال ها یا پچ های نرم افزار مربوطه دسترسی آن مسدود شود.

مقایسه کنترل پنل ها

مزایای cpanel:

سادگی نصب: cpanel براحتی و با اجرای اسکریپت بر روی سیستم عامل لینوکس در تعداد مراحل کمی نصب می شود.

سازگاری بالا: این کنترل پنل بطور گسترده با بسیاری از برنامه های متن باز سازگار است.

رابط های تعاملی: cpanel واسط های مختلف مجازی را برای کاربران مختلف شامل کاربران، مدیران و کاربران ایمیل فراهم می کند.

معایب cpanel:

آسیب پذیری:  با توجه به زمان فرآیند بروزرسانی که معمولا شبانه انجام می شود، هرگونه حمله قبل از بروزرسانی می تواند تهدید بزرگی محسوب شود.

مشکلات تحریم برای کاربران ایرانی

هزینه لایسنس بالا

 

مزایای دایرکت ادمین:

عدم وجود مشکلات تحریم برای کاربران ایرانی

سرعت بسیار بالای بارگذاری کنترل پنل

سادگی رابط کاربری

مصرف منابع کمتر

هزینه کمتر

معایب دایرکت ادمین:

بالابودن هزینه های ارتقاء و افزایش امکانات آن

 

مزایای پلسک:

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

رابط کاربری دوستانه

قابلیت تنظیم فایروال متناسب با سیستم عامل

معایب پلسک:

هزینه بیشتر نسبت به دایرکت ادمین

گستردگی کمتر نسبت به cpanel

 

در پایان هر کدام از این سه کنترل پنل نقاط قوت و ضعفی دارند. هر فرد بنابه ویژگی های متفاوت این کنترل پنل ها مانند سازگاری سیستم عامل، قیمت گذاری، پشتیبانی فنی، سهولت استفاده، افزودنیها و … می تواند کنترل پنل مناسب تر برای سایتش را انتخاب کند. اما من به شما توصیه می کنم با توجه به سادگی پنل کاربری دایرکت ادمین و عدم مشکلات تحریم و هزینه پائین تر برای سرورهای لینوکسی از این کنترل پنل استفاده کنید و در سرورهای ویندوزی با توجه به امکانات متعددی که پلسک در اختیار شما قرار می دهد، حتما از کنترل پنل پلسک استفاده کنید، شاید کنترل پنل های رایگانی برای سرورهای ویندوزی وجود داشته باشد اما در طی مرور با توجه به نیاز هایی که پیدا خواهید کرد مشاهده خواهید نمود که کنترل پنل های رایگان چه امکانات ساده مورد نیاز شما را نداشته و با چه خطاهایی مواجه می شوند، امیدواریم در این مقاله اطلاعات کافی برای کمک به انتخاب صحیح شما ارائه شده باشد.

جهت مشاهده هزینه لایسنس این کنترل پنل ها و ثبت سفارش به لینک خرید لایسنس نرم افزاری سایت لطفا مراجعه نمائید. همینطور جهت خرید لایسنس و فعالسازی آن می توانید با بخش فروش ایران سرور تماس حاصل کنید.

۰۵۱۳۱۷۷۶-۹۰۱

نوشته مقایسه محبوب ترین کنترل پنل های میزبانی وب اولین بار در ایران سرور پدیدار شد.

گردآوری توسط ایده طلایی