<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های حسن عسکری</title>
        <link>https://virgool.io/feed/@m_98087794</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 14:12:06</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/2854313/avatar/iA7cfL.jpg?height=120&amp;width=120</url>
            <title>حسن عسکری</title>
            <link>https://virgool.io/@m_98087794</link>
        </image>

                    <item>
                <title>مزایای استفاده از صف‌ها در لاراول</title>
                <link>https://virgool.io/@m_98087794/%D9%85%D8%B2%D8%A7%DB%8C%D8%A7%DB%8C-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%B5%D9%81-%D9%87%D8%A7-%D8%AF%D8%B1-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-okc6fhdovuai</link>
                <description>افزایش سرعت پاسخ‌دهی: عملیات‌هایی که زمان زیادی می‌برند به صف ارسال می‌شوند و به پس‌زمینه منتقل می‌شوند.مقیاس‌پذیری: شما می‌توانید تعداد Workers را افزایش دهید و صف‌ها را بین چندین سرور توزیع کنید.قابلیت اعتماد: اگر یک Job در صف شکست بخورد، می‌توان آن را بازیابی یا دوباره امتحان کرد.مثال کاربردی: ارسال ایمیل تأییدیه کاربربه‌جای اینکه ایمیل تأییدیه در لحظه ثبت‌نام ارسال شود و کاربر منتظر بماند، می‌توان ارسال ایمیل را به صف واگذار کرد:ایجاد Job:php artisan make:job SendVerificationEmailارسال Job به صف پس از ثبت‌نام:SendVerificationEmail::dispatch($user-&gt;email);اجرای Worker:php artisan queue:workخلاصه:سیستم صف در لاراول به شما کمک می‌کند تا کارهای سنگین و پردازش‌های زمان‌بر را به پس‌زمینه منتقل کرده و به‌طور غیرهمزمان اجرا کنید، که این امر باعث بهبود کارایی و تجربه کاربری در برنامه شما می‌شود.</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Tue, 10 Sep 2024 23:32:10 +0330</pubDate>
            </item>
                    <item>
                <title>Stored Procedure</title>
                <link>https://virgool.io/@m_98087794/stored-procedure-olhxqko9afk9</link>
                <description>میخوایم بدونیم  Stored Procedure چیه و چه کارایی داره خیلی ساده بخوام بگم یه اسکریپته که با اس کیو ال نوشته میشه یعنی یه سری دستورات رو ما توی دیتابیس ذخیره میکنیم با یه اسم خاص هر موقع بخوایم از اون دستورات استفاده کنیم اون اسم رو صدا میزنیم مثلا شما میخوای از جدول کاربرها اطلاعات یه کاربر رو بگیری حالا این یه مثال سادس شما میتونی از کوئری ساده استفاده کنید یا هم میتونید از پرسیجر استفاده کنید و توی دیتا بیس کوئری شو بزارید هرجایی که خواستید اطلاعات کاربری رو بگیرید فقط کافیه  صداش بزنید CREATE PROCEDURE نام پرسیجر(
    IN user_id INT
)
BEGIN
   //در این قسمت شما دستورات اس کیو ال خود را وارد میکنید
 SELECT * FROM users WHERE id = user_id;
END;واسه استفاده ازش هم مثال پایین که حالا من از pdo استفاده کردم شما از هر روشی که بخواید میتونید استفادهه کنید فقط کافید کال کنید اسم اون پرسیجر رو و اون مقدار مورد نظر رو بهش بدید $user_id = 123;
$sql = &amp;quotCALL اسم پرسیجر(:user_id)&amp;quot
$stmt = $pdo-&gt;prepare($sql);
$stmt-&gt;bindParam(&#039;:user_id&#039;, $user_id, PDO::PARAM_INT);
$stmt-&gt;execute();
$user = $stmt-&gt;fetch(PDO::FETCH_ASSOC);ای اقا خوب چه کاریه همون کوئری ساده رو میزنیم الان بهتون میگم چرا بهتره از پرسیجر ها استفاده کنید ببینید پرسیجر ها قبل از اولین اجرا توسط موتور پایگاه داده کامپایل میشن و هربار شما صداش بزنید فقط اجراش میکنه که باعث میشه سریع تر باشهولی کوئری های عادی هر بار که اجرا بشن توسط موتور پایگاه داده تفسیر و بعد اجرا میشن خوب این باعث میشه یکم زمان بر تر بشه پروسه حالا پایین یه سری تفاوت های دیگه ای هم اماده کردم براتون که بخونید بد نیست  از لحاظ محل ذخیره :پرسیجر ها در پایگاه داده ذخیره میشنکوئری های عادی در برنامه شمااز لحاظ سطح دسترسی :پرسیجر ها میتونن توسط برنامه های مختلف از طریق یه رابط تعریف شده فراخوانی بشن چون توی دیتا بیس هستن ولی کوئری های عادی فقط میتونن توسط برنامه شما اجرا شونداز لحاظ امنیت:پرسیجر ها میتونن با استفاده از مجوز های پایگاه داده کنترل بشن تا فقط کابرای مجاز بتونن اونارو اجرا کننکوئری عادی دیگه بستگی داره شما نکات امنیتی رو رعایت کرده باشین یا نه از لحاظ خوانایی:پرسیجر ها چون توی دیتا بیس متمرکز هستن و هر جا بخواین فقط کافیه اسمشونو صدا بزنید خوانایی بیشتری دارنولی کوئری های عادی در پروژه شما پراکنده هستن خوانایی دشوار تری دارناز لحاظ نگهداری :پرسیجر ها یه جا هستن و هر تغییری بخوای بدی راحت تغییر میدی و همه جای پروژه اطلاعات بروزرو برمیگردونه ولی کوئری عادی باید بری دستی تمام کوئری هارو تغییر بدی</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Sat, 11 May 2024 22:30:20 +0330</pubDate>
            </item>
                    <item>
                <title>database:Eloquent model and db in laravel</title>
                <link>https://virgool.io/@m_98087794/databaseeloquent-model-and-db-in-laravel-zlbcinw3zzcj</link>
                <description>روش های اینزرت در دیتا بیس لاراول $user = User::create([
&#039;name&#039; =&gt; &#039;John Doe&#039;,
&#039;email&#039; =&gt; &#039;johndoe@example.com&#039;,
 &#039;password&#039; =&gt; &#039;password&#039;,
]);مزایا:استفاده  اسان مختصر و خوانا نیاز به ایجاد یک شی جدید از مدل نداردمعایب:انعطاف پذیری کمتر برای سناریو های پیچیده مناسب نیست$user = new User;
$user-&gt;name = &#039;John Doe&#039;;
$user-&gt;email = &#039;johndoe@example.com&#039;;
$user-&gt;password = &#039;password&#039;;
$user-&gt;save();مزایا:انعطاف پذیری بیشتر کنترل بیشتر در فرایند درجمعایب :کد طولانی تر خوانایی کمترDB::insert(&#x27;users&#x27;, [    &#x27;name&#x27; =&gt; &#x27;John Doe&#x27;,    &#x27;email&#x27; =&gt; &#x27;johndoe@example.com&#x27;,    &#x27;password&#x27; =&gt; &#x27;password&#x27;,]);مزایا : حداکثر کارایی هر کاری بخوای انجام بدی دستت بازهبرای کوئری های خام sql مناسبه معایب :خوانایی کمتر دیگه مزایای استفاده از ORM رو نداری نگهداری دشوار ترحالا میخوام متد های که بیشتر استفاده میشه توی مدل ها رو به صورت خلاصه بگم متد های ایجاد:اولی create که نمونه شو بالا گفتم ایجاد رکورد جدید در دیتا بیسدومی forceCreate به هر قیمتی شده رکورد جدید رو میسازه حتی اگه یونیک باشه متد های خواندن :اولی all همه رکورد های اون جدول رو به عنوان یه شی از مدل برمیگردونه دومی find ایدی رو بهش میدی پیداش میکنه به عنوان یه شی از مدل برمیگردونه سومی whereفیلتر کردن اطلاعات بر اساس معیار هایی که ما بهش میدیمچهارمی first اگه بعد از where بزاریم اولین رکوردی که با اون معیار مطابقت داره رو برمیگردونه اگه روی خود جدول بزاریم اولین رکورد جدول رو برمیگردونهپنجمی get مجموعه ای از رکورد هایی که با معیار  where مطابقت دارن رو به عنوان یه شی از مدل برمیگردونه متد های بروزرسانی :اولی update رکورد موجود رو با مقادیر جدید بروز رسانی میکنهدومی save رکورد رو ذخیره میکنه چه جدید باشه چه  موجود باشه متد های حذف :اولی delete رکورد مورد نظر را حذف می کنددومی forceDelete همه اطلاعات رو به صورت دائم حذف میکنه حتی محافظت شده هاروسومی softDeletes فیزیکی حذف نمیکنه فقط اونارو روی حالت حذف شده قرار میده متد های مربوط به کوئری ها :اولی orderBy مرتب کردن اطلاعات بر اساس ستون های خاصدومی limit تعداد رکوردی که ما میخوایم رو برمیگردونهسومی skip مثلا میگه این ۱۰ تا رکورد اول رو نادیده بگیر بقیه رو بده چهارمیselect ستون هایی که میخوایم ازش اطلاعات بگیریم رو مشخص میکنیماین مورد پنجم with کار جوین رو میکنه نیاز داره بیشتر توضیح بدم فرض کنید یه مدل یوزر دارید که با جدول پست و کامنت ارتباط داره حالا میخوایم همه کاربر هارو به همراه پست ها و کامنت هاشون بگیریم چجوری باید این کارو بکنیم؟ دقت کنید که اول باید رابطه رو برقرار کنید بعد از این کد استفاده کنید$users = User::with(&#x27;posts&#x27;, &#x27;comments&#x27;)-&gt;get();میاد همه کاربر هارو میگیره حالا چک میکنه خوب هر پست و هر کامنتی یه یوزر ایدی داره که معلوم میکنه مال کدوم کاربره بوسیله اون میاد همه پست ها و کامنت های هر کاربر رو هم برمیگردونه</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Sat, 11 May 2024 22:24:42 +0330</pubDate>
            </item>
                    <item>
                <title>Interface in laravel</title>
                <link>https://virgool.io/@m_98087794/interface-in-laravel-jolnxhjfkifw</link>
                <description>Interface: قابلیت ها و چارچوب های یک کلاس را مشخص میکند خودش کلاس نیست بلکه یه جور قرار دادهInterface به معنی رابط هستشنکته مهم : وقتی یک کلاس از یک Interface ارث‌بری می‌کند، باید همهٔ متدهای موجود در Interface را پیاده‌سازی کند، در غیر این صورت خطا رخ می‌دهد.یه Interface، میتونه یک یا مجموعه‌ای از متدها (بدون بدنه) باشه که باید در کلاس‌هایی که از آن ارث‌بری می‌کنند، پیاده‌سازی شود.نکته دوم : Interface میتواند همزمان از چند کلاس ارث بری کندinterface Animal {
public function makeSound();//متد بدون بدنه}
class Cat implements Animal {
 public function makeSound() {
    echo &amp;quotMeow!&amp;quot
 }
}
class Dog implements Animal {
public function makeSound() {
    echo &amp;quotWoof!&amp;quot
   }
}
$cat = new Cat();
$cat-&gt;makeSound(); //Meow!
$dog = new Dog();
$dog-&gt;makeSound(); //Woof!حالا فرق ایمپلمنت با اکستند چیه؟ایمپلمنت فقط مال اینترفیسه و اینکه هیچ عملیات خاصی نداره چون متد هاش بدون بدنه هستن و فرایند ارث بریش فقط متدشه و تمامولی اکستند میاد عملیماتی وارد میشه و از اون عملیاتی که توی بدنه اون متد ها انجام میشه استفاده میکنهو همچنین چایلد ها قابلیت اوررایت متد های پرنت رو دارن&#x60;&#x60;&#x60;interface UserInterface
{public function getName();public function getEmail()}class User implements UserInterface‍    public function getName()    {
        return $this-&gt;name;
}
 public function getEmail()
    {
        return $this-&gt;email;
   }
}</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Sat, 11 May 2024 22:19:01 +0330</pubDate>
            </item>
                    <item>
                <title>cache in laravel</title>
                <link>https://virgool.io/@m_98087794/cache-in-laravel-htffyybakipk</link>
                <description>متد های مربوط به کش لاراول1.ذخیره داده در کش: cache([&#x27;key&#x27; =&gt; &#x27;value&#x27;], $minutes);ذخیره دیتا با استفاده از خود کش بدون متدCache::remember($key, $minutes, $callback)این متد اگه کش موجود باشه برمیگردونه اگه موجود نباشه با استفاده از اون کالبک فانکشن کش رو میسازه و با همون کی ذخیره میکنه Cache::put($key, $value, $minutes)این متد همونطوری که از اسمش پیداست اگه کش موجود باشه مقدار جدید رو قرار میده توش اگه کش موجود نباشه جدید میسازهCache::forever(&#x27;key&#x27;, &#x27;value&#x27;)ذخیره کش در حافظه پنهان برای همیشه2.بازیابی داده از کش:Cache::get($key)خوب رسیدیم به بخش اسون کش ها متد get میاد با استفاده از کلیدی که بهش میدیم اون کش مورد نظر رو پیدا میکنه اگه کش موجود باشه مقدارشو برمیگردونه اگه موجود نباشه هم که null برمیگردونه3.حذف داده از کش:Cache::forget($key)این متد میاد با استفاده از اون کلید اون کش مورد نظر رو پاک میکنه و در جواب true برمیگردونه اگه اون کش موجود نباشه هیچی برنمیگردونه خطا هم نمیدهCache::pull($key)این مورد مقدار رو از کش بازیابی میکنه بعد اون کش رو پاک میکنهCache::has($key)متد has میاد چک میکنه کش موجود هست یا نیست اگه باشه true برمیگردونه اگه موجود نباشه false برمیگردونه</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Sat, 11 May 2024 22:12:56 +0330</pubDate>
            </item>
                    <item>
                <title>نصب داکر در لینوکس</title>
                <link>https://virgool.io/@m_98087794/%D9%86%D8%B5%D8%A8-%D8%AF%D8%A7%DA%A9%D8%B1-%D8%AF%D8%B1-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-umkneiksawol</link>
                <description>#حذف داکر قدیمی sudo apt-get remove docker docker-engine docker.io containerd runc# نصب پیش نیاز های لازمsudo apt-get updatesudo apt-get install ca-certificates curl gnupg lsb-release# #تغییر نیم سرور ها به دلیل تحریم های داکر# sudo nano /etc/resolv.conf# # لیست نیم سرور های تحریم شکن# 178.22.122.100 # شکن# 185.51.200.2 # شکن# 185.55.226.26 # بگذر //////////////////# 185.55.225.25 # بگذر# 78.157.42.100 # الکترو# 78.157.42.101 # الکترو# نصب داکرsudo install -m 0755 -d /etc/apt/keyringscurl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpgsudo chmod a+r /etc/apt/keyrings/docker.gpgecho \  &quot;deb [arch=&quot;$(dpkg --print-architecture)&quot; signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \  &quot;$(. /etc/os-release &amp;&amp; echo &quot;$VERSION_CODENAME&quot;)&quot; stable&quot; | \  sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/nullsudo apt-get updatesudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# تغییر مسیر دانلود ایمیجsudo nano /etc/docker/daemon.json{    &quot;registry-mirrors&quot;: [&quot;https://registry.docker.ir&quot;]}# یا البته اولی سرعتش بهتر بود بازم میشه تست کرد {    &quot;registry-mirrors&quot;: [&quot;https://m.docker-registry.ir&quot;]}# ری استارت کردن سرویس داکرsudo systemctl daemon-reloadsudo systemctl restart docker# افزودن کاربر جاری به گروه داکرsudo groupadd dockersudo usermod -aG docker $USERexit</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Wed, 13 Mar 2024 13:17:24 +0330</pubDate>
            </item>
                    <item>
                <title>فرق های ثابت و متغیر در زبان های برنامه نویسی</title>
                <link>https://virgool.io/@m_98087794/%D9%81%D8%B1%D9%82-%D9%87%D8%A7%DB%8C-%D8%AB%D8%A7%D8%A8%D8%AA-%D9%88-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1-%D8%AF%D8%B1-%D8%B2%D8%A8%D8%A7%D9%86-%D9%87%D8%A7%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-wsxsuzttvttz</link>
                <description>این مبحث رو به طور کلی میخوام براتون بگم نه توی یه زبان خاص   ثابت ها حالا فرق نمیکنه چه const باشه تویه جاوا اسکریپت و امثال اون چه define باشه تویه phpمزایا: ۱. خوانایی یعنی چی یعنی وقتی کسی کد شما رو بخونه متوجه میشه که این مقدار تغییر نمیکنه  2. از لحاظ امنیتی امنیت بیشتری داره چون دیگه قابل تغییر نیست. 3.مدیریت حافظه بهتری داره و کدتون بهینه تره یعنی چی یعنی ثابت ها فقط روی حالت خواندن هستن (ورعکس متغیر ها که روی حالت خواندن و نوشتن( تغییر دادن) هستن). 4. ثابت ها در زمان کامپایل اماده میشن واضح تر بگم مثلا شما یه محاسبه انجام میدین تویه یه ثابت میاید 2*2 رو انجام میدید این اگه ثابت باشه در زمان کامپایل محاسبه میشه و هر جایی شما از اون استفاده کنید فقط میره میخونه اونو ولی اگه متغیر باشه هر بار که شما استفاده کنید از اون متغیر هر بار میاد دوباره محاسبه میکنهمعایب : 1. خوب اینکه قابل تغییر نیست از برخی لحاظ های گفته شده مثبته ولی در بعضی جاها که شما نیاز پیدا میکنید تغییرش بدید عیب به حساب میادمتغیر ها مزایا: 1.انعطاف پذیری بالا در تغییر و خوب استفاده از اون نشون میده که این مورد امکان داره تغییر کنه  2. این مورد که هر بار استفاده بشن دوباره محاسبه میشن خودش برای مواردی که قابل تغییره ویژگی مثبته 3.میتونید بجای تکرار مقادیر ثابت از متغییر ها استفاده کنیدمعایب: 1.مصرف حافظه شون بیشتره و عملکرد پروژه رو میاره پایین تر 2.کد یه مقدار پیچیده تر میشه بخصوص وقتی تعداد متغییر ها بیشتر بشه و با بخش های مختلف هم در ارتباط باشه که دیگه بدتر این ارتباط بین بخش های مختلف دیباگ کردنشم سخت تر میکنه</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Thu, 15 Feb 2024 01:03:36 +0330</pubDate>
            </item>
                    <item>
                <title>داکر کامپوز برای وردپرس</title>
                <link>https://virgool.io/@m_98087794/%D8%AF%D8%A7%DA%A9%D8%B1-%DA%A9%D8%A7%D9%85%D9%BE%D9%88%D8%B2-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%88%D8%B1%D8%AF%D9%BE%D8%B1%D8%B3-mljihiontuoi</link>
                <description>version: &#039;3.3&#039;services:  #PHP Service  php:    build:      context: ./php      dockerfile: Dockerfile    container_name: wp_php    restart: unless-stopped    working_dir: /var/www    volumes:      - .:/var/www  #Nginx Service  nginx:    image: nginx:1.19.6    container_name: wp_nginx    restart: unless-stopped    ports:      - &amp;quot80:80&amp;quot    volumes:      - .:/var/www      - ./nginx/conf.d/:/etc/nginx/conf.d/  #MySQL Service  db:    image: mysql:8.0.23    container_name: wp_db    restart: unless-stopped    ports:      - &amp;quot3306:3306&amp;quot    environment:      MYSQL_DATABASE: wp      MYSQL_ROOT_PASSWORD: 123    volumes:      - ./mysql/data:/var/lib/mysqlفایل داکر FROM php:8.0.12-fpm-bullseyeRUN apt update &amp;&amp; apt install zip unzip git -yRUN docker-php-ext-install mysqli pdo pdo_mysqlRUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composerRUN apt-get install zlib1g-dev libwebp-dev libfreetype6-dev libjpeg-dev libpng-dev -y \    &amp;&amp; docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg --with-webp \    &amp;&amp; docker-php-ext-install gdRUN docker-php-ext-install exifRUN apt-get update &amp;&amp; apt-get install -y libmagickwand-dev --no-install-recommends &amp;&amp; rm -rf /var/lib/apt/lists/*RUN curl -sL https://deb.nodesource.com/setup_16.x | bash -RUN apt install -y nodejsRUN npm install --global yarnفایل انجنیکسserver {    listen 80;    index index.php index.html;    error_log  /var/log/nginx/error.log;    access_log /var/log/nginx/access.log;    root /var/www/wp;    location ~ \.php$ {        if ($request_method = &#039;OPTIONS&#039;) {            add_header &#039;Access-Control-Allow-Origin&#039; &#039;*&#039;;            add_header &#039;Access-Control-Allow-Methods&#039; &#039;GET, POST, OPTIONS&#039;;            add_header &#039;Access-Control-Allow-Headers&#039; &#039;DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,authorization&#039;;            add_header &#039;Access-Control-Max-Age&#039; 1728000;            add_header &#039;Content-Type&#039; &#039;text/plain; charset=utf-8&#039;;            add_header &#039;Content-Length&#039; 0;            return 204;         }        if ($request_method = &#039;POST&#039;) {            add_header &#039;Access-Control-Allow-Origin&#039; &#039;*&#039; always;            add_header &#039;Access-Control-Allow-Methods&#039; &#039;GET, POST, OPTIONS&#039; always;            add_header &#039;Access-Control-Allow-Headers&#039; &#039;DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,authorization&#039; always;            add_header &#039;Access-Control-Expose-Headers&#039; &#039;Content-Length,Content-Range&#039; always;        }        if ($request_method = &#039;GET&#039;) {            add_header &#039;Access-Control-Allow-Origin&#039; &#039;*&#039; always;            add_header &#039;Access-Control-Allow-Methods&#039; &#039;GET, POST, OPTIONS&#039; always;            add_header &#039;Access-Control-Allow-Headers&#039; &#039;DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,authorization&#039; always;            add_header &#039;Access-Control-Expose-Headers&#039; &#039;Content-Length,Content-Range&#039; always;        }        try_files $uri =404;        fastcgi_split_path_info ^(.+\.php)(/.+)$;        fastcgi_pass php:9000;        fastcgi_index index.php;        include fastcgi_params;        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;        fastcgi_param PATH_INFO $fastcgi_path_info;    }    location / {        try_files $uri $uri/ /index.php?$query_string;        gzip_static on;    }}</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Fri, 26 Jan 2024 19:49:06 +0330</pubDate>
            </item>
                    <item>
                <title>نکات جالب php</title>
                <link>https://virgool.io/@m_98087794/%D9%86%DA%A9%D8%A7%D8%AA-%D8%AC%D8%A7%D9%84%D8%A8-php-pebzvgxznbpr</link>
                <description>اینجا میخوام یه سری چیزهایی که توی php از نظر خودم جالبه رو بزارمشاید براتون جالب باشه بدونید چرا متغیر اصلی مون تغییر کرد برای اینکه توی فانکشن بتونی رفرنس بدی و متغیر اصلی رو تغییر بدی میتونی از علامت&amp; قبل از وردی استفاده کنیfunction sum(&amp;$value){
	$value+= 5;
}
$num = 2;
sum($num);
echo $num ;//7</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Fri, 26 Jan 2024 12:11:54 +0330</pubDate>
            </item>
                    <item>
                <title>بدست اوردن عدد اول در php</title>
                <link>https://virgool.io/@m_98087794/%D8%A8%D8%AF%D8%B3%D8%AA-%D8%A7%D9%88%D8%B1%D8%AF%D9%86-%D8%B9%D8%AF%D8%AF-%D8%A7%D9%88%D9%84-%D8%AF%D8%B1-php-nrkjkla8ld3e</link>
                <description>$endNumber = 100;
for ($number = 2; $number &lt;= $endNumber; $number++) {
//خوب تا اینجا که معلومه چه خبره تا موقعی که کمتر از صد باشه 
    $isPrime = true;
// از اینجا توی این فور اعدادی که صحیح نباشن فالص میخوره ونشون نمیده ولی اعداد صحیح توی شرط نمیره
    for ($counter = 2; $counter &lt; $number; $counter++) {       
        if ($number % $counter == 0) {
        $isPrime = false;
        break;
        }
   }
   if ($isPrime) {
          echo $number . &amp;quot is prime.\n&amp;quot
    }
}</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Fri, 26 Jan 2024 03:03:35 +0330</pubDate>
            </item>
                    <item>
                <title>ارایه ها در php</title>
                <link>https://virgool.io/@m_98087794/%D8%A7%D8%B1%D8%A7%DB%8C%D9%87-%D9%87%D8%A7-%D8%AF%D8%B1-php-m5uighb6k4um</link>
                <description>یکی از این توابع array_combin که یه ارایه برمیگردونه و دوتا ورودی میگیره که هر دوتا ورودیش ارایس ورودی اول میشه کلید برای ارایه جدید و ورودی دوم میشه ولیو برای ارایه جدیدمورد دوم array_diff که یه ارایه برمیگردونه و تعدا ورودی هاش نامحدوده  که همش ارایس از نوع کی و ولیو حالا کارش چیه میاد ولیو ها رو بررسی میکنه ارایه ای که توی ورودی اول بهش میدین ملاک قرار میده هرچی توی اون باشه و توی ارایه دوم یا سوم یا .... متفاوت باشه رو برمیگردونهمورد سوم array_diff_key که همون کار بالایی رو انجام میده فقط این روی کی ها حساسه و به ولیو ها کاری ندارهمورد چهارم array_diff_assoc این ترکیبی از دو مورد بالاست یعنی هم روی کی حساسه هم روی ولیو و متفاوت  هارو بر میگردونهمورد پنجم array_intersect این مورد میشه یه جوری شبیه array_diff فقط فرقش اینه که array_diff میاد تفاوت هارو برمیگردونه ولی این میاد شباهت ها رو برمیگردونهمورد شیشم array_keys فقط کلید های ارایه رو برمیگردونهمورد هفتم array_values ولیو های ارایه رو برمیگردونهمورد هشتم array_merge میاد دوتا ارایه رو باهم ادقام میکنه ارایه دوم رو اضافه میکنه به ارایه اولمورد نهم array_pop میاد از ارایه مورد اخر رو پاک میکنه و تغییر روی ارایه اصلی اعمال میشهمورد دهم array_push به اخر ارایه یه مورد رو اضافه میکنه تغییر روی ارایه اصلی ایجاد میشهمورد یازدهم array_replace از اسمشم معلومه میاد مقادیر ارایه دوم رو به جای مقادیر ارایه اول جایگذاری میکنهمورد دوازدهم array_reverse که اینم از اسمش معلومه میاد بر اساس کلید ها ورعکس میکنه ارایه رومورد سیزدهم array_slice میاد یه تیکه از ارایه رو بر میگردونه ورودی اول میشه ارایه و ورودی دوم میشه کی ارایه خود اون کی رو با هرچی بعدش باشه برمیگردونه والبته یه ورودی سوم هم داره که اپشناله و برای اینه که بهش بکی تا کجا یعنی تا کدوم ایندکس یا کی برگردونهمورد چهاردهم خیلی باحاله میای قبلش چند تا متغیر تعریف میکنی بعد میای از compact استفاده میکنی بهش وردوی میدی به صورت استرینک هم اسم متغیر ها بعد یه ارایه برمیگردونه که اسم اون متغیر ها میشه کی و ولیو اون متغیر ها میشه ولیو ارایه$name = &amp;quothassan&amp;quot 
$age = 23; 
$result = compact(&amp;quotname&amp;quot,&amp;quotage&amp;quot);//[&amp;quotname&amp;quot=&gt;&amp;quothassan&amp;quot,&amp;quotage&amp;quot=&gt;23]مورد پانزدهم extract این مورد ورعکس مورد بالاست اون متغیر رو به ارایه تبدیل میکرد این میاد ارایه رو تبدیل به متغیر میکنه و کی رو به عنوان متغیر و ولیو رو به عنوان ولیو متغیر در نظر میگیره$array = [&amp;quotname&amp;quot=&gt;&amp;quothassan&amp;quot,&amp;quotage&amp;quot=&gt;23]; 
extract($array );
echo $name; //hassanمورد شانزدهم,sizeof, count میاد تعداد المان های داخل ارایه رو برمیگردونهمورد هفدهم in_array یه مقدار بهش میدی بررسی میکنه که ایا توی ارایه هستش یا نهمورد هجدهم sort که میاد ارایه رو به ترتیب حرف الفبا مرتب میکنه خود ارایه اصلی رو تغییر میده و برا ورعکس مورد هجدهم sort که میاد ارایه رو به ترتیب حرف الفبا مرتب میکنه خود ارایه اصلی رو تغییر میده و برا ورعکس سورت کردن هم از rsort میتونید استفاده کنید</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Thu, 25 Jan 2024 21:23:41 +0330</pubDate>
            </item>
                    <item>
                <title>توابع مربوط به رشته php</title>
                <link>https://virgool.io/@m_98087794/%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D9%85%D8%B1%D8%A8%D9%88%D8%B7-%D8%A8%D9%87-%D8%B1%D8%B4%D8%AA%D9%87-php-viwopbuk7mgu</link>
                <description>مورد اول substr که ورودی اول و دومش ضروریه و ورودی سومش اپشناله  از ایندکسی که مشخص کردید برمیگردونه حالا اگه ورودی سوم داده باشین تا اون اگه نداده باشین تا اخرsubstr($رشته  , index از این  ,  index تا این );مورد دوم strlen که تعدا ایندکس های رشته رو برمیگردونه$str =&amp;quotare you ok&amp;quot ;
strlen($str);//9مورد سوم str_word_count که تعداد کلمات رشته رو برمیگردونه $str =&amp;quotare you ok&amp;quot ;
str_word_count($str);//3 مورد چهارم str_replaceمیاد یه قسمتی از رشته رو با اون چیزی که ما میخوایم تغییر میده پس سه تا ورودی میگیره اول اون قسمت که میخوایم تغییر بدیم که میتونه یه کلمه باشه دوم اون چیزی که میخوایم بجاش بزاریم و سوم اون رشته اصلی رو میدیم بهش$str =&amp;quotare you ok&amp;quot ;
str_replace (&amp;quotok&amp;quot,&amp;quotgood&amp;quot,$str );//are you goodمورد پنجم trim  این تابه میاد از اول و اخر رشته حذف میکنه حالا وقتی یه وردوی بهش بدیم به صورت دیفالت از اول و اخر رشته اسپیس ها رو حذف میکنه و اگه ورودی دوم رو هم بهش بدید که از اولش چیو حذف کنه و از اخرش چیو حذف کنه همونارو حذف میکنه$str =&amp;quot  are you ok  &amp;quot ;
trim($str); //&amp;quotare you ok&amp;quot
یا 
trim($str , &amp;quotark&amp;quot); //&amp;quot  e you o  &amp;quot 
//شاید براتون سوال باشه اگه از اخر هیچ حرفی ندیم بهش چی میشه ؟فقط از اول حذف میکنهمورد شیشم strpose میاد ایندکس اون ورودی که ما بهش میدیم رو برمیگردونه $str =&amp;quotare you ok&amp;quot ;
 strpose($str , &amp;quoty&amp;quot);//4 حواستون باشه که از صفر شروع میشه و اسپیس هم ایندکسهمورد هفتم strstr یه کلمه بهش میدیم میگیم از این به بعد رو توی رشته مورد نظر برگردون$str =&amp;quotare you ok&amp;quot ;
strstr($str , &amp;quotare&amp;quot);//you okمورد هشتم explodeمیاد رشته رو با توجه به جدا کننده ای که قرار دادید به ارایه تبدیل میکنه$str =&amp;quotare you ok&amp;quot ;
explode($str , &amp;quot &amp;quot);//[&#039;are&#039;,&#039;you&#039;,ok&#039;]ورعکس اینم یکی هست ارایه رو به رشته تبدیل میکنه implodeیه مورد دیگه هم داریم str_split اینم رشته رو به ارایه تبدیل میکنه ولی این ورودی دومش فرق میکنه رشته رو بهش میدی در وردی دوم میگی مثلا ۲ تا ۲ تبدیل به ارایه کن یا هر تعداد که نیاز بودمورد نهم strcmpمیاد دوتا رشته رو باهم مقایسه میکنه اگه یکی باشن ۰ اگه فرق کنن ایندکس هایی که توی رشته اول متفاوته رو برمیگردونه مثلا توی رشته اول ۵ تا ایندکسش با رشته دوم متفاوته اونو برمیگردونه</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Wed, 17 Jan 2024 23:34:36 +0330</pubDate>
            </item>
                    <item>
                <title>اصطلاحات php</title>
                <link>https://virgool.io/codenevis/%D8%A7%D8%B5%D8%B7%D9%84%D8%A7%D8%AD%D8%A7%D8%AA-php-kdutdsejmizx</link>
                <description>فرق فانکشن(تابع) با متد عمل جفتشون شبیه همه فقط مکانشون فرق میکنهمتد همون فانکشنیه که توی کلاس استفاده میشه و به صورت شی استفاده میشه ازش فانکشن یا تابع وقتی که اون فانکشن بیرون از کلاس ساخته و استفاده بشه فرق public و private فانکشن ها به صورت پیشفرض روی حالت public هستن یعنی همون حالت عادی فانکشنه ولی private وقتی استفاده کنید فقط توی همون کلاس بهش دسترسی دارید و از بیرون اون کلاس هیچ دسترسی بهش نداریدحالا static چیه؟ برای متغیر ها یا متد ها یا ثابت هایی استفاده میشه که به یه کلاس مرتبط هستند  مثلا میگم یه متغیر استاتیک تعریف میکنی مقدارش صفره یه شی از اون کلاس میسازی بعد این متغیر استاتیک رو مقدارش رو میکنی ۲ اون متغیر اساتیک کلا میشه ۲ یعنی دفعه بعدی ام کلاس رو نیو  کنی و بخوای مقدار اون متغیر رو بگیری بهت عدد ۲ رو برمیگردونهclass MyClass {
     public static $counter = 0; 
}
$object1 = new MyClass(); 
$object2 = new MyClass();  
$object1-&gt;counter++; 
$object2-&gt;counter++;  
echo MyClass::$counter; // 2</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Fri, 05 Jan 2024 23:36:25 +0330</pubDate>
            </item>
                    <item>
                <title>اتصال به دیتا بیس در whmcs با Capsule</title>
                <link>https://virgool.io/@m_98087794/%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%A8%D9%87-%D8%AF%DB%8C%D8%AA%D8%A7-%D8%A8%DB%8C%D8%B3-%D8%AF%D8%B1-whmcs-%D8%A8%D8%A7-capsule-coadri3axyfh</link>
                <description>برای اتصال به دیتا بیس در whmcs بهتره از روش کپسوله استفاده کنید مزایا :سادگی: روش کپسوله ساده تر از روش های دیگر است و یادگیری آن آسان تر است.انعطاف پذیری: روش کپسوله انعطاف پذیرتر از روش های دیگر است و امکان ذخیره سازی داده های مختلف با روابط مختلف را فراهم می کند.عملکرد: روش کپسوله می تواند به طور موثری داده ها را ذخیره و بازیابی کند.برای استفاده اول باید یوزش کنیدuse WHMCS\Database\Capsule;بعد  از کلاس کپسوله متد کانکشنش یه اتصال pdo برقرار کنید  $pdo = Capsule::connection()-&gt;getPdo();بعدش میشه کوئری ساده خودمون$query = &amp;quotSELECT * FROM tblclients WHERE id = 12 &amp;quot
$statement = $pdo-&gt;query($query);
$statement-&gt;execute(); $result = $statement-&gt;fetchAll(PDO::FETCH_ASSOC); var_dump($result);</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Tue, 02 Jan 2024 10:55:19 +0330</pubDate>
            </item>
                    <item>
                <title>مشکل خراب شدن نوشته ها در حالت موبایلی</title>
                <link>https://virgool.io/@m_98087794/%D9%85%D8%B4%DA%A9%D9%84-%D8%AE%D8%B1%D8%A7%D8%A8-%D8%B4%D8%AF%D9%86-%D9%86%D9%88%D8%B4%D8%AA%D9%87-%D9%87%D8%A7-%D8%AF%D8%B1-%D8%AD%D8%A7%D9%84%D8%AA-%D9%85%D9%88%D8%A8%D8%A7%DB%8C%D9%84%DB%8C-codntcdhz1f7</link>
                <description>مشکل خراب شدن نوشته ها در حالت موبایلی  مشکل بخاطر کش هستش و کشتون رو عوض کنید درست میشهکشی که ما داشتیم استفاده میکردیم کش Fastest Cache بود و با عوض کردنش درست شد کش لایت اسپید بجاش استفاده کردیمما چند روز درگیر این موضوع بودیم تا اینکه متوجه این موضوع شدیم اینو اینجا یادداشت میکنم هم برای اینده هم برای افرادی که به این مشکل میخورن تا بتونن سریع مشکلشونو حل کنن</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Sat, 16 Dec 2023 16:19:59 +0330</pubDate>
            </item>
                    <item>
                <title>لاراول اسکریپت تبدیل اعداد فارسی و عربی به انگلیسی</title>
                <link>https://virgool.io/avasam-laravel-edu/%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D9%88-%D8%B9%D8%B1%D8%A8%DB%8C-%D8%A8%D9%87-%D8%A7%D9%86%DA%AF%D9%84%DB%8C%D8%B3%DB%8C-ncmzs42mtnwq</link>
                <description>function convert($string)
{
$persian = [&#039;۰&#039;, &#039;۱&#039;, &#039;۲&#039;, &#039;۳&#039;, &#039;۴&#039;, &#039;۵&#039;, &#039;۶&#039;, &#039;۷&#039;, &#039;۸&#039;, &#039;۹&#039;];
$arabic = [&#039;٩&#039;, &#039;٨&#039;, &#039;٧&#039;, &#039;٦&#039;, &#039;٥&#039;, &#039;٤&#039;, &#039;٣&#039;, &#039;٢&#039;, &#039;١&#039;, &#039;٠&#039;];
$num = range(0, 9);
$convertedPersianNums = str_replace($persian, $num, $string);
$englishNumbersOnly = str_replace($arabic, $num, $convertedPersianNums);
return $englishNumbersOnly;
}</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Sun, 03 Dec 2023 22:03:02 +0330</pubDate>
            </item>
                    <item>
                <title>مشکل ووکامرس برای محصولات متغیر محصولاتی که موجود نیست نشون میده</title>
                <link>https://virgool.io/@m_98087794/%D9%85%D8%B4%DA%A9%D9%84-%D9%88%D9%88%DA%A9%D8%A7%D9%85%D8%B1%D8%B3-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%85%D8%AD%D8%B5%D9%88%D9%84%D8%A7%D8%AA-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1-%D9%85%D8%AD%D8%B5%D9%88%D9%84%D8%A7%D8%AA%DB%8C-%DA%A9%D9%87-%D9%85%D9%88%D8%AC%D9%88%D8%AF-%D9%86%DB%8C%D8%B3%D8%AA-%D9%86%D8%B4%D9%88%D9%86-%D9%85%DB%8C%D8%AF%D9%87-r75nkvb3z55v</link>
                <description>این مشکل بخاطر اینه که محصولات متغیر توی ووکامرس محدود به یه تعداد خاصیه و اگه میخواید بیشتر از اون محصول متغیر داشته باشید باید از هوک woocommerce_ajax_variation_threshold استفاده کنید توی فولدر mu-plugins این کد رو قرار بدید اسم فایل فرقی نمیکنه فقط باید یکتا باشهfunction custom_wc_ajax_variation_threshold( $qty, $product ) {
// این عدد تعداد محصولات متغیر رو نشون میده
return 500;
}
add_filter( &#039;woocommerce_ajax_variation_threshold&#039;, &#039;custom_wc_ajax_variation_threshold&#039;, 10, 2 );حالا بریم سراغ اینکه فولدر mu-plugins (Must-Use Plugins)  چه فولدری ای هستش؟پلاگین هایی که توی این فولدر قرار میگیریند بدون اینکه لازم باشه ادمین فعالشون کنه فعال میشند و همیشه فعال میمونندنکنه : توی این فولدر فقط میتونید فایل قرار بدید نمیتونید توش فولدر بزارید و توقع داشته باشید کار کنه یه نکته جدا از مطلب بالا توی وردپرس وقتی بخوایم بگیم که بجای اون فایل اصلی یه فایل دیگه رو بخونه یا به اصطلاح اوررایت کنه از روی یه فایل دیگه از روش زیر استفاده میکنیمsingle-اسم فایلی که میخواید بجاش اینو بخونه.php</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Sun, 19 Nov 2023 13:55:46 +0330</pubDate>
            </item>
                    <item>
                <title>داکر</title>
                <link>https://virgool.io/@m_98087794/%D8%AF%D8%A7%DA%A9%D8%B1-cgdhvv5ng41m</link>
                <description>داکر (docker) :یه پلتفرم برای ساخت و اجرای پروژه های شماست با داکر میتونید به راحتی پروژه رو اجرا کنید یا پروژه رو با تمام الزاماتش تبدیل به پکیج کنید و بر روی سیستم های دیگر اجرا کنیدکانتینر(container) :یه محیط ایزوله شده که به ما اجازه میده چند سرویس رو در کنار هم بیاریم بالا و ران کنیمنصب داکر :https://docs.docker.com/get-docker/از طریق لینک بالا داکر مناسب سیستم عامل خودتونو نصب کنیدبعد از نصب توی کامند لاین داکر ورژن رو بزنید و از نصبش مطمئن بشیدایمیج (image): حاویه هر ان چیزی که اپلیکیشن شما برای اجرا شدن بهش نیاز دارهساخت ایمیج :FROM node:alpine# در قدم اول یه ایمیج از نود میاریم  میتونید از سایت داکر هاب ایمیج ها ی مختلف رو بردارید
# میگه از ایمیج نود حالا باید یه توزیع کننده براش انتخاب کنید الپاین توزیع کننده سبکهCOPY    .     /src# اون دات میگه تمام فایل های توی اپلیکیشن رو بریز توی فولدر srcCMD node /src/app.js
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////# یا از روش بالا استفاده کنید یا از روش پایین توی نوشتن cmd و اضافه کردن workdir به ان
# این کد برای اجرای فایله میگه برو از src فایل app.js رو اجرا کن#WORKDIR    /src# این کد یعنی کامند های cmd رو بیا داخل این فولدر  اجرا کن#CMD node /app.jsمرحله بعدی بیلد گرفتن داکر فایل است کد زیر را در کامند لاین وارد کنید#docker build -t hello-docker .داکر بیلد که برای بیلد کردن استفاده میشه -t میاد اسم اون ایمیج یا تگ اون ایمیج رو قرار میده اون دات خر هم ادرس فایل داکر هستش که چون از ما توی همین پوشس دات میزاریملیست ایمیج ها :docker images 
یا
docker image ls ران کردن داکر :docker run اسم ایمیج همون تگش 
یا
docker up -d
یا
docker upنکته مهم : واسه اینکه همه جا به ایمیجتون دسترسی داشته باشید بهتر داکر تونو پوش کنید به داکر هاب برای اینکار برید توی سایتش ثبت نام کنید بعدش مثل گیت هاب میتونید پوش کنید یا از طریق افزونه داکر قسمت ایمیج ها پوش داره از اونجا اقدام کنیدhttps://labs.play-with-docker.com/یه vps لینوکسی موقت میده بهتون که فقط روش داکر داره  میتونید با کد زیر ایمیجتون رو pull و اجرا کنیدdocker pull  dockerId / imageName</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Fri, 10 Nov 2023 00:58:20 +0330</pubDate>
            </item>
                    <item>
                <title>نصب whmcs فارسی</title>
                <link>https://virgool.io/@m_98087794/%D9%86%D8%B5%D8%A8-whmcs-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-a1h9eak9qiu1</link>
                <description>دانلود : ابتدا از سایت whmcsco.com نسخه فارسی رو تهیه و دانلود کنیدیکی از لازمه های whmcs اینه که حداقل کار با crm یا یه کنترل پنل بلد باشیددر  crm از قسمت Domain میتونید هم Domain هم subdomain که خوب من باشم از subdomain استفاده میکنم چون اگه هاست اصلی به مشکل بخوره میتونیم راحت whmcs رو به یه هاست دیگه منتقل کنیم(subdomain رو میشه رو یه هاست دیگه میزبانی کرد)ساخت دیتا بیس و مراحل راه اندازی:حالا از قسمت دیتا بیس ویزارد دیتا بیس رو میسازیم و خوب یادتون باشه رمزتونو کپی کنید و داشته باشید مثل مراحل نصب ورد پرسه یه جورایی راه اندازی:فایل دانلودی رو بریزید توی public_html دقیقا مثل وردپرس فایل configuration.php.new رو پیدا کنید اون .new تهش رو برداریدمثل وردپرس ادرس اون subdomain یا Domain رو تو مرورگر وارد کنید یه صفحه براتون باز میشه روی click here to begin کلیک کنید در این صفحه  I AGREE با قوانین موافقت کنید در صفحه جدید روی Begin installation کلیک کنید تا وارد صفحه وارد کردن اطلاعات دیتا بیس بشیدصفحه وارد کردن اطلاعات دیتا بیس:license key در این قسمت چون  whmcsفارسی  نال شدس نیازی به لایسنس نداره هرچی خواستید بزنیدDatabaseHost که معمولا Localhost خودمونه Database Port که پورت دیتا بیس معمولا 3306 چیز دیگه ای هم خواستید میتونید بزاریدusername و password  و name دیتا بیس خودتون رو وارد کنید اطلاعات شخصی :در این مرحله first Name و Last Name که انتخاب میکنید حواستون باشه چون همه جا این نام میخورهusername و password خودتون رو وارد کنید و وارد مرحله بعدی بشیدبعد از نصب :وارد public_html یا روت پروژه بشید و فولدر install رو حذف کنیدحالا با استفاده از /admin دقیقا مثل وردپرس میتونید وارد پنل ادمین بشیدفارسی سازی :فارسی سازی ناحیه کاربری:از قسمت setop در منو بالا وارد قسمت general setings بشید بعد از وارد کردن رمز وارد قسمت localisation بشید در این بخش default languege رو روی فارسی بزاریدفارسی سازی پنل ادمین:از قسمت setop در منو بالا وارد قسمت step Managment شویداز اون قسمت وارد administrator users شویداز صفحه ای که باز میشه whmcs مورد نظر رو ادیت کنید توی این صفحه languege رو روی فارسی بزاریدفارسی سازی ایمیل ارسالی :دو روش داره یا از قسمت قالب ایمیل ها برید تمام ایمیل های اونجا رو دستی فارسی کنیدروش دوم یه بک اپ بگیرید بعد از قسمت  phpmyadmin جدول tblemailtemplates رو پیدا کنید و حذفش کنید بعد از طریق لینک زیر فایل فارسی این جدول رو دانلود و impurt کنید توی روت اصلی phpmyadmin</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Wed, 08 Nov 2023 12:21:10 +0330</pubDate>
            </item>
                    <item>
                <title>خطای corse</title>
                <link>https://virgool.io/@m_98087794/%D8%AE%D8%B7%D8%A7%DB%8C-corse-iu5cwx8paqtv</link>
                <description>header(&amp;quotAccess-Control-Allow-Origin: http://localhost:5173&amp;quot);
header(&amp;quotAccess-Control-Allow-Methods: POST, GET, OPTIONS&amp;quot);
header(&amp;quotAccess-Control-Allow-Headers: Content-Type, Authorization&amp;quot);
if ($_SERVER[&#039;REQUEST_METHOD&#039;] === &#039;OPTIONS&#039;) {
http_response_code(200);
 exit();
}میتونید از این کدا برای جلو گیری از خطای کرس استفاده کنید واین نکته هم هست که معمولا اونایی که تازه میخوان روی سرور کد بزن با این مشکل برخورد میکنن همیشه سرور خودتون localhost هستش</description>
                <category>حسن عسکری</category>
                <author>حسن عسکری</author>
                <pubDate>Fri, 03 Nov 2023 19:33:08 +0330</pubDate>
            </item>
            </channel>
</rss>