PHP & MYSQL
1.34K subscribers
21 photos
1 video
36 files
23 links
Download Telegram
PHP & MYSQL pinned « Redis hashes در میان دستورات متنوع Redis، دستورات هش یکی از مفیدترین‌ها برای مدیریت داده‌های ساختارمند هستند. در این مطلب، کاربردهای کلیدی دستورات هش و چگونگی استفاده از آن‌ها را بررسی می‌کنیم. ⚙️ چه زمانی از هش‌ها استفاده کنیم؟ 1️⃣ ساختار داده‌ای مرتبط:…»
Forwarded from کانال آموزشی لاراول (PapiDon)
هنگام شروع یک اپلیکیشن جدید Laravel، باید از Model::shouldBeStrict استفاده کنید.

شما ایده‌ای برای اپ جدید دارید. شما Laravel را نصب می‌کنید و آماده شروع هستید. اولین کاری که باید انجام دهید چیست؟

برای من، من به app service provider می‌روم و به متد boot پایین می‌آیم و Model::shouldBeStrict را به صورت global تنظیم می‌کنم:

public function boot(): void
{
Model::shouldBeStrict();
}


با فعال سازی این گزینه، کارهای زیر را انجام می‌دهد:

public static function shouldBeStrict(bool $shouldBeStrict = true)
{
static::preventLazyLoading($shouldBeStrict);
static::preventSilentlyDiscardingAttributes($shouldBeStrict);
static::preventAccessingMissingAttributes($shouldBeStrict);
}


🛠 این سه کار را انجام می‌دهد:

1️⃣ Prevents lazy loading

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

2️⃣ It prevents silently discarding attributes

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

3️⃣ It prevents accessing missing attributes

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


🔸Preventing Lazy Loading

در اینجا نمونه‌ای آورده شده است.

$articles = \App\Models\Article::get();

foreach ($articles as $article) {
echo "<li>" . $article->user->name . "</li>\n";
}


اگر این کد را اجرا کنید، خروجی مورد انتظار شما را نشان می‌دهد. با این حال، این کد رابطه کاربر را به صورت lazy loading بارگیری می‌کند و در هر حلقه یک کوئری جدید ایجاد می‌کند.

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

Attempted to lazy load [user] on model [App\Models\Article] but lazy loading is disabled.


🔸Prevents Silently Discarding Attributes

در اینجا نمونه‌ای از تلاش برای به‌روزرسانی یک ویژگی که قابل پر کردن نیست آورده شده است:

$user->fill(["remember_token" => "bar"]);


حالا این کد یک استثنا برمی‌گرداند:

Add fillable property [remember_token] to allow mass assignment on [App\Models\User].


🔸Prevents Accessing Missing Attributes

فرض کنید ما سعی داریم یک ویژگی در کاربر را نمایش دهیم که ممکن است وجود نداشته باشد:

{{ $user->nonexistant }}


به طور پیش‌فرض، Laravel چیزی نمایش نمی‌دهد زیرا ویژگی پیدا نمی‌شود، اما با فعال بودن حالت Strict شما دریافت می‌کنید:

The attribute [nonexistant] either does not exist or was not retrieved for model [App\Models\User].

این در مواردی که ممکن است اشتباه تایپی داشته باشید بسیار کمک می‌کند، مانند:

{{ $user->emial }}


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

فعال کردن ()Model::shouldBeStrict حالا اولین کاری است که من در هر اپ انجام می‌دهم و به من کمک می‌کند تا از اشتباهات پایه‌ای که ممکن است برای اپ بعدا زیان‌آور باشد، جلوگیری کنم.




کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه نویسی </>
📌 @PapiDon_coding
3👍1
PHP & MYSQL pinned « هنگام شروع یک اپلیکیشن جدید Laravel، باید از Model::shouldBeStrict استفاده کنید. شما ایده‌ای برای اپ جدید دارید. شما Laravel را نصب می‌کنید و آماده شروع هستید. اولین کاری که باید انجام دهید چیست؟ برای من، من به app service provider می‌روم و به متد boot…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
عملگر ارجاع (&) در PHP چیست؟

عملگر ارجاع در PHP (&) یک عملگر مهم است که برای ارجاع دادن به محل حافظه یک متغیر به جای کپی ارزش آن استفاده می‌شود. به زبان ساده، وقتی شما از عملگر ارجاع استفاده می‌کنید، به جای اینکه یک نسخه جدید از متغیر ایجاد کنید، شما به همان نسخه اصلی متغیر دسترسی پیدا می‌کنید و هر تغییری که روی آن اعمال کنید، مستقیماً روی متغیر اصلی اثر می‌گذارد.

📖 استفاده از ارجاعات در PHP:

استفاده از ارجاعات در PHP می‌تواند در موارد زیر مفید باشد:

1️⃣ تغییر متغیرها در داخل توابع:
وقتی یک متغیر را به عنوان پارامتر به یک تابع پاس می‌دهید و می‌خواهید که تغییرات داخل تابع روی متغیر اصلی اعمال شود.

2️⃣ به اشتراک گذاری متغیرها بین چندین بخش از برنامه: برای جلوگیری از کپی‌کاری بی‌مورد و صرفه‌جویی در حافظه.

3️⃣ کار با آرایه‌ها و اشیاء:
که معمولاً حجم بیشتری دارند و کپی کردن آن‌ها می‌تواند منابع زیادی مصرف کند.

🔍 مثال عملی:

function add_prefix(&$string) {

// Add a prefix to a string
$string = 'prefix_' . $string;

}

$myStr = 'name';
add_prefix($myStr);
echo $myStr;
// Output: prefix_name


در این مثال، myStr$ از طریق ارجاع به تابع add_prefix پاس داده شده است. بنابراین، هر تغییری که تابع روی پارامتر اعمال می‌کند، مستقیماً روی متغیر myStr$ اعمال می‌شود.

💡 نکات کلیدی:

- استفاده از ارجاعات می‌تواند به بهینه‌سازی حافظه کمک کند، اما باید با احتیاط استفاده شوند چون ممکن است منجر به نتایج غیرمنتظره شود اگر به درستی مدیریت نشوند.

- ارجاع دادن به یک متغیر با استفاده از عملگر & در هنگام ارسال آن به توابع، انتقال به آرایه‌ها، یا در هنگام کار با متغیرهایی که به صورت (global) یا استاتیک (static) تعریف شده‌اند، استفاده می‌شود.

🛠 مدیریت ارجاعات:

- هنگامی که دیگر به ارجاع نیازی ندارید، می‌توانید با استفاده از تابع unset ارجاع را حذف کنید.

- ارجاع دادن به یک متغیر فقط روی متغیرهایی که قابل تغییر هستند (مانند متغیرهای نوع Scalar، آرایه‌ها، و اشیاء) امکان‌پذیر است، نه روی مقادیر Literal یا Expressions.

👩‍💻 بهترین شیوه‌ها:

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

- برای جلوگیری از سردرگمی، ارجاعات را به گونه‌ای مدیریت کنید که کد شما خوانا و واضح باقی بماند.



📁 #PHP

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
4👍2
PHP & MYSQL pinned « عملگر ارجاع (&) در PHP چیست؟ عملگر ارجاع در PHP (&) یک عملگر مهم است که برای ارجاع دادن به محل حافظه یک متغیر به جای کپی ارزش آن استفاده می‌شود. به زبان ساده، وقتی شما از عملگر ارجاع استفاده می‌کنید، به جای اینکه یک نسخه جدید از متغیر ایجاد کنید، شما به…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
تعریف OKR

مخفف Objectives and Key Results است، یک سیستم مدیریتی است که به سازمان‌ها و تیم‌ها این امکان را می‌دهد که اهداف استراتژیک خود را به شکلی واضح تعیین کنند و سپس پیشرفت خود را نسبت به این اهداف به طور مداوم اندازه‌گیری کنند.

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

🎲 Objectives (اهداف)

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

📈 Key Results (نتایج کلیدی)

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

⚙️ پیاده‌سازی OKR

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

🔄 چرخه OKR

چرخه OKR معمولاً شامل تنظیم اهداف برای دوره‌های زمانی مشخص (مانند سه‌ماهه) است. پس از تنظیم اهداف و نتایج کلیدی، بررسی‌های دوره‌ای برای ارزیابی پیشرفت و تطبیق در صورت لزوم انجام می‌شود.

مزایای OKR

- تمرکز و شفافیت: OKR به تمام اعضای سازمان کمک می‌کند تا بر روی اهداف مهم و اولویت‌دار تمرکز کنند.

- هم‌راستایی و هماهنگی: اطمینان از اینکه همه تیم‌ها و افراد در جهت اهداف مشترک پیش می‌روند.

- مسئولیت‌پذیری: با ارزیابی مداوم پیشرفت، افراد و تیم‌ها مسئول دستیابی به نتایج کلیدی می‌شوند.

- انعطاف‌پذیری: توانایی سریع برای تطبیق با تغییرات و چالش‌های جدید.

🛠 نکات مهم برای موفقیت در OKR

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

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



📁 #OKR #TeamAlignment

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
4👍1
PHP & MYSQL pinned « تعریف OKR مخفف Objectives and Key Results است، یک سیستم مدیریتی است که به سازمان‌ها و تیم‌ها این امکان را می‌دهد که اهداف استراتژیک خود را به شکلی واضح تعیین کنند و سپس پیشرفت خود را نسبت به این اهداف به طور مداوم اندازه‌گیری کنند. در این سیستم، "Objective"…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
🚀 مقدمه به دنیای RabbitMQ

در دنیای پرسرعت تکنولوژی امروز، ارتباط و تبادل اطلاعات بین سیستم‌ها و برنامه‌ها از اهمیت ویژه‌ای برخوردار است. RabbitMQ یکی از ابزارهای کلیدی در این زمینه است که به عنوان یک سیستم پیام‌رسانی میان‌افزاری (Middleware) عمل می‌کند. این سیستم قادر است پیام‌ها را بین بخش‌های مختلف یک برنامه، یا حتی بین برنامه‌های مختلف، در یک معماری مبتنی بر خدمات (Service-Oriented Architecture) یا معماری میکروسرویس‌ها (Microservices) انتقال دهد.

🐇 RabbitMQ ?

یک بروکر پیام‌رسانی متن باز است که بر اساس پروتکل AMQP (Advanced Message Queuing Protocol) پیاده‌سازی شده است. این سیستم به توسعه‌دهندگان امکان می‌دهد تا به راحتی و با انعطاف‌پذیری بالا، پیام‌ها را بین اجزای مختلف یک برنامه یا سیستم منتقل کنند. RabbitMQ یک راه حل قدرتمند برای مسائل مربوط به هماهنگ‌سازی و غیرهمزمان‌سازی در برنامه‌ها است.

🛠 کاربردهای RabbitMQ

🔸انتقال پیام‌ها در معماری‌های مبتنی بر خدمات یا میکروسرویس‌ها: RabbitMQ به عنوان یک سیستم میان‌افزاری، پیام‌ها را بین سرویس‌های مختلف در یک معماری پیچیده انتقال می‌دهد.

🔸توزیع کارها بین (Workers): در سیستم‌هایی که نیاز به پردازش موازی و توزیع شده دارند، RabbitMQ می‌تواند برای توزیع کارها بین نودهای پردازشی استفاده شود.

🔸تضمین دلیوری پیام‌ها: RabbitMQ از تاییدات پیام و دوام پیام‌ها پشتیبانی می‌کند تا از از دست نرفتن پیام‌ها در صورت بروز خطا اطمینان حاصل شود.

🔸انعطاف‌پذیری و مقیاس‌پذیری: RabbitMQ امکان افزایش ظرفیت و توسعه‌پذیری را با استفاده از کلاسترها و تعادل‌بارها (Load Balancers) فراهم می‌کند.

مزایای RabbitMQ

- قابلیت اطمینان: ارائه مکانیزم‌هایی برای تضمین دلیوری پیام، شامل تایید پیام و ذخیره‌سازی دائمی.

- انعطاف‌پذیری: پشتیبانی از چندین الگوی پیام‌رسانی، از جمله publish/subscribe، request/reply و routing patterns.

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

- پشتیبانی از چندین زبان برنامه‌نویسی: کلاینت‌ها و کتابخانه‌هایی برای زبان‌های برنامه‌نویسی مختلف مانند Python، Java، .NET، PHP و دیگران.

معایب RabbitMQ

- پیچیدگی در پیکربندی و مدیریت: نیاز به دانش فنی برای پیکربندی صحیح و بهینه‌سازی عملکرد.

- مدیریت حافظه و منابع: در بار کاری‌های بسیار بالا، مدیریت منابع و حافظه می‌تواند چالش‌برانگیز باشد.

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

⚙️ کجا از RabbitMQ استفاده می‌شود؟

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

🔍 نتیجه‌گیری

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




📁 #RabbitMQ #MessageBroker

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
3👍1
PHP & MYSQL pinned «🚀 مقدمه به دنیای RabbitMQ در دنیای پرسرعت تکنولوژی امروز، ارتباط و تبادل اطلاعات بین سیستم‌ها و برنامه‌ها از اهمیت ویژه‌ای برخوردار است. RabbitMQ یکی از ابزارهای کلیدی در این زمینه است که به عنوان یک سیستم پیام‌رسانی میان‌افزاری (Middleware) عمل می‌کند. این…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
آشنایی با Heredoc در PHP

آیا تا به حال با مشکل تعریف رشته‌های چند خطی در PHP مواجه شده‌اید؟ 🤔 ممکن است در کار با متن‌های طولانی یا فرمت‌هایی مانند JSON و HTML به دنبال راه حلی راحت‌تر از استفاده مکرر از نقل قول‌ها و کاراکترهای اسکیپ باشید. اینجاست که Heredoc به کمک شما می‌آید!

📖 Heredoc ?

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

🧐 چگونه کار می‌کند؟

برای استفاده از Heredoc، کافی است عبارت <<< را دنبال شده با یک شناسه دلخواه (مثلا EOT) تایپ کنید. سپس، رشته‌ی مورد نظر خود را در خطوط بعدی قرار دهید و با همان شناسه در یک خط جدید به پایان ببرید. مهم است که شناسه پایانی باید در خط جدید و تنها محتوای آن خط باشد، بدون هیچ فضای خالی پیش یا پس از آن.

📌 مثال

<<<EOT

Please inspect the following text and determine if it is spam.

EOT;


🛠 نکات کاربردی:

- شناسه‌ها می‌توانند هر نامی باشند، اما باید معتبر و منحصر به فرد در متن شما باشند.

- اطمینان حاصل کنید که پس از شناسه پایانی و قبل از ; هیچ کاراکتر اضافی وجود ندارد.

- در واقع Heredoc برای قرار دادن HTML، SQL، JSON و هر نوع داده‌ی چند خطی دیگری در کد PHP ایده‌آل است.

🔥 جمع‌بندی:

ابزاری قدرتمند در PHP است که به شما کمک می‌کند با راحتی بیشتری با رشته‌های چند خطی کار کنید. با استفاده از این سینتکس، می‌توانید کدهای خود را خواناتر و مدیریت‌پذیرتر نگه دارید.




📁 #PHP #Heredoc

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
3👍1
PHP & MYSQL pinned « آشنایی با Heredoc در PHP آیا تا به حال با مشکل تعریف رشته‌های چند خطی در PHP مواجه شده‌اید؟ 🤔 ممکن است در کار با متن‌های طولانی یا فرمت‌هایی مانند JSON و HTML به دنبال راه حلی راحت‌تر از استفاده مکرر از نقل قول‌ها و کاراکترهای اسکیپ باشید. اینجاست که Heredoc…»
Forwarded from کانال آموزشی لاراول (PapiDon)
🎉 Laravel 11 😍

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

🔍 از مهم‌ترین قابلیت‌های این نسخه می‌توان به موارد زیر اشاره کرد:

1️⃣ ساختار دایرکتوری بهینه‌شده: کدنویسی ماژولار و استفاده مجدد از کد را آسان‌تر می‌کند، که نتیجه‌اش افزایش کارایی در فرآیند توسعه است.

2️⃣ مدیریت تنظیمات: با رویکردی جدید که تمامی تنظیمات از یک منبع بالادستی به ارث می‌برند، تنظیمات را می‌توان به صورت ساده‌تر و متمرکزتری مدیریت کرد.

3️⃣ قابلیت Dumpable: تجربه‌ی دیباگ کردن را با امکان استفاده از متدهای ()dd و ()dump درون کلاس‌ها، بهبود می‌بخشد و دیباگ کردن را در سرتاسر فریمورک یکپارچه و مداوم می‌سازد.

4️⃣ به‌روزرسانی‌های مربوط به مدیریت مسیریابی: تعداد فایل‌های مسیر پیش‌فرض از چهار به دو فایل کاهش یافته و برای افزودن مسیرهای API به صورت انتخابی عمل می‌کنید، که منجر به ساختار برنامه‌ای تمیزتر و سفارشی‌تر می‌شود.

📚 سعی خواهیم کرد موضوعات مهم را در کانال به اشتراک بگذاریم و حتماً درباره آن‌ها مطلب منتشر کنیم. با ما حتما همراه باشید. 🫶😊



کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه نویسی </>
📌 @PapiDon_coding
2🔥1
PHP & MYSQL pinned «🎉 Laravel 11 😍 بالاخره انتظارها به پایان رسید و نسخه ۱۱ فریمورک محبوب لاراول منتشر شد! این نسخه جدید با قابلیت‌های نوآورانه و بهبودهای چشمگیری همراه است که تجربه توسعه‌دهندگان را به سطح جدیدی ارتقا می‌بخشد. 🔍 از مهم‌ترین قابلیت‌های این نسخه می‌توان به موارد…»
Forwarded from کانال آموزشی لاراول (PapiDon)
🔧 راهنمای رفع مشکل اتصال به دیتابیس در لاراول 11

🔸با آغاز به کار نسخه جدید لاراول 11 و تنظیم پیش‌فرض DB_CONNECTION=sqlite، برخی از توسعه‌دهندگان که تمایل دارند از mysql به عنوان دیتابیس پروژه خود استفاده کنند، ممکن است با خطاهای اتصال دیتابیس روبرو شوند. یکی از رایج‌ترین این خطاها مربوط به تنظیمات collation است.

برای مثال، خطای SQLSTATE[HY000]: General error: 1273 Unknown collation: 'utf8mb4_0900_ai_ci' نشان می‌دهد که تنظیمات collation با نسخه فعلی سرور MySQL یا MariaDB شما سازگار نیست.


⛔️ علت خطا و راه‌حل‌ها:

خطای Unknown collation: 'utf8mb4_0900_ai_ci به این دلیل رخ می‌دهد که سرور دیتابیس MySQL یا MariaDB شما از تنظیمات collation utf8mb4_0900_ai_ci پشتیبانی نمی‌کند. این collation برای نسخه‌های جدید MySQL معرفی شده است و به بهبود عملکرد و دقت مقایسه داده‌ها کمک می‌کند، اما در نسخه‌های قدیمی‌تر MySQL یا برخی نسخه‌های MariaDB پشتیبانی نمی‌شود.


🛠 راه‌حل‌ها:

1️⃣ ارتقاء سرور MySQL/MariaDB:

اگر امکان‌پذیر است، سرور دیتابیس را به نسخه‌ای ارتقاء دهید که از این collation پشتیبانی می‌کند.

2️⃣ تغییر Collation در پروژه لاراول:

- به فایل config/database.php در پروژه لاراول خود بروید.

- در بخش اتصالات دیتابیس (mysql در این مورد)، collation را به یک مقدار سازگار با نسخه‌ی MySQL/MariaDB سرورتان تغییر دهید. برای نسخه‌های قدیمی‌تر، utf8mb4_unicode_ci توصیه می‌شود:

     'mysql' => [
...
'collation' => 'utf8mb4_unicode_ci',
...
],


📝 فایل env. پروژه خود را بررسی و اطمینان حاصل کنید که اطلاعات دیتابیس به درستی تنظیم شده‌اند:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=



⚙️ اجرای مایگریشن‌ها

با استفاده از دستور php artisan migrate ، اطمینان حاصل کنید که جدول‌های مورد نیاز در دیتابیس ایجاد شده‌اند. این کار همچنین به حل مشکلات مربوط به عدم وجود جدول‌ها کمک می‌کند.


⚜️برای اطمینان از اعمال تغییرات، دستورات php artisan config:cache و php artisan cache:clear را اجرا کنید تا تنظیمات کش شده پاک شود.



کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه نویسی </>
📌 @PapiDon_coding
4👍2
PHP & MYSQL pinned «🔧 راهنمای رفع مشکل اتصال به دیتابیس در لاراول 11 🔸با آغاز به کار نسخه جدید لاراول 11 و تنظیم پیش‌فرض DB_CONNECTION=sqlite، برخی از توسعه‌دهندگان که تمایل دارند از mysql به عنوان دیتابیس پروژه خود استفاده کنند، ممکن است با خطاهای اتصال دیتابیس روبرو شوند.…»
Forwarded from کانال آموزشی لاراول (PapiDon)
سلام رفقا
بعد از یه مدت نبودن، دوباره برگشتیم پر از انرژی 🫶


⚡️ نگاهی به ویژگی‌های جدید PHP 8.4

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

📅 زمان انتشار PHP 8.4 چه تاریخی است؟

انتشار رسمی PHP 8.4 برای ۲۱ نوامبر ۲۰۲۴ برنامه‌ریزی شده است. پیش از انتشار رسمی، این نسخه طی ۶ ماه مراحل پیش‌انتشار را از آلفا، بتا و کاندیداهای انتشار طی می‌کند.

💥 Property Hooks در PHP

از زبان‌هایی مثل Kotlin، C# و Swift الهام گرفته شده است. این ویژگی شامل دو نوع سینتکس متفاوت است که شبیه به closures کوتاه و چند خطی هستند:

class User implements Named
{
private bool $isModified = false;

public function __construct(
private string $first,
private string $last
) {}

public string $fullName {
// بازنویسی اکشن "خواندن" با منطق دلخواه
get => $this->first . " " . $this->last;

// بازنویسی اکشن "نوشتن" با منطق دلخواه
set {
[$this->first, $this->last] = explode(' ', $value, 2);
$this->isModified = true;
}
}
}


🤓 در واقع Property hooks کمک می‌کنند تا از کدهای زائد مربوط به getter و setter های خاصیت‌ها خلاص شویم و به یک خاصیت اجازه می‌دهد که دسترسی و به‌روزرسانی‌ها را با استفاده از hooks تعریف کند.

☄️ دسترسی به اعضای کلاس بدون پرانتز

از زمان معرفی دسترسی به اعضای کلاس هنگام نمونه‌سازی، شما باید ()new MyClass را در پرانتز قرار دهید، وگرنه با خطا مواجه می‌شوید. سینتکس پیشنهادی به شما این امکان را می‌دهد که به ثوابت، خصوصیات و متدها بدون نیاز به پرانتز اضافی دسترسی داشته باشید:

// پرانتزهای اضافی برای دسترسی به اعضای کلاس مورد نیاز هستند

$request = (new Request())->withMethod('GET')->withUri('/hello-world');

// خطا PHP (<= PHP 8.3): syntax error, unexpected token "->"

$request = new Request()->withMethod('GET')->withUri('/hello-world');


این به‌روزرسانی مشکل کوچک دسترسی به اعضای کلاس را ساده‌تر می‌کند، به‌طوری که نیازی به افزودن پرانتزهای اضافی یا استفاده از متد سازنده استاتیک نخواهد بود. این تغییر سینتکس PHP را بیشتر با زبان‌های C مانند جاوا، #C و TypeScript همسو می‌کند که نیازی به پرانتزهای احاطه‌کننده ندارند.

🔗 برای مطالعه بیشتر PHP 8.4



کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه نویسی </>
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍1
PHP & MYSQL pinned «سلام رفقا بعد از یه مدت نبودن، دوباره برگشتیم پر از انرژی 🫶 ⚡️ نگاهی به ویژگی‌های جدید PHP 8.4 به زودی PHP 8.4 منتشر می‌شود و در این مطلب به بررسی ویژگی‌های اعلام‌شده و امکانات جدید این نسخه خواهیم پرداخت. 📅 زمان انتشار PHP 8.4 چه تاریخی است؟ انتشار…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
⭐️ مفهوم CGroup در لینوکس به زبان ساده

CGroup (Control Group)

یکی از ویژگی‌های مهم در سیستم‌عامل لینوکس است که به شما امکان مدیریت منابع سیستمی مانند CPU، حافظه، دیسک و شبکه را برای گروهی از فرآیندها می‌دهد. این ابزار برای کنترل و محدود کردن استفاده از منابع توسط برنامه‌ها و سرویس‌ها بسیار مفید است.

🖥 مفهوم CGroup :

1️⃣ گروه‌بندی فرآیندها: CGroup به شما این امکان را می‌دهد که فرآیندهای مرتبط را در یک گروه قرار دهید. به عنوان مثال، می‌توانید همه فرآیندهای یک برنامه خاص را در یک گروه بگذارید.

2️⃣ مدیریت منابع: بعد از گروه‌بندی فرآیندها، می‌توانید منابع سیستمی را به آن گروه اختصاص دهید یا محدود کنید. مثلاً می‌توانید تعیین کنید که این گروه از فرآیندها فقط از 20 درصد از CPU استفاده کنند یا بیش از 1 گیگابایت حافظه مصرف نکنند.

3️⃣ نظارت و کنترل: با استفاده از CGroup، می‌توانید مصرف منابع توسط گروه‌های مختلف را نظارت کنید و در صورت نیاز تنظیمات را تغییر دهید تا از استفاده بیش از حد منابع جلوگیری کنید.

کاربردهای CGroup:

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

- بهبود امنیت: با محدود کردن دسترسی به منابع، می‌توانید از رفتارهای مخرب جلوگیری کنید.

- مدیریت سرویس‌ها: در سرورهای بزرگ و پیچیده، می‌توانید سرویس‌های مختلف را با استفاده از CGroup مدیریت و کنترل کنید تا هر کدام منابع مشخصی داشته باشند.

🔖 مثال ساده:

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

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

🐳 چگونه Docker از CGroup استفاده می‌کند؟

1️⃣ مدیریت منابع: Docker از CGroup برای مدیریت منابع استفاده می‌کند. به این معنا که می‌تواند منابع CPU، حافظه، دیسک و شبکه را برای هر کانتینر به طور جداگانه محدود کند.

2️⃣ ایزوله‌سازی: CGroup به Docker کمک می‌کند تا هر کانتینر را از کانتینرهای دیگر ایزوله کند. این ایزوله‌سازی به اطمینان از اینکه فرآیندهای یک کانتینر نمی‌توانند منابع کانتینرهای دیگر را تحت تأثیر قرار دهند، کمک می‌کند.

3️⃣ نظارت و کنترل: Docker با استفاده از CGroup می‌تواند مصرف منابع هر کانتینر را نظارت کند و در صورت نیاز تنظیمات منابع را تغییر دهد تا از کارایی و پایداری سیستم اطمینان حاصل کند.


نتیجه‌گیری:

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


📁 #Linux #Docker

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
PHP & MYSQL pinned «⭐️ مفهوم CGroup در لینوکس به زبان ساده CGroup (Control Group) یکی از ویژگی‌های مهم در سیستم‌عامل لینوکس است که به شما امکان مدیریت منابع سیستمی مانند CPU، حافظه، دیسک و شبکه را برای گروهی از فرآیندها می‌دهد. این ابزار برای کنترل و محدود کردن استفاده از…»
Forwarded from اتاق برنامه نویسی </> (PapiDon)
🖥 حل مشکل دانلود متادیتا برای مخازن CentOS در کانتینر داکر با استفاده از مخازن Vault

🧐هنگامی که تلاش می‌کنید بسته‌ای را در داخل کانتینر CentOS-8 با استفاده از yum نصب کنید، ممکن است با خطای زیر مواجه شوید:

Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist


علت مشکل:

این مشکل به دلیل پایان عمر (EOL) CentOS 8 و عدم دسترسی به مخازن پیش‌فرض CentOS به وجود می‌آید. زمانی که CentOS 8 به پایان عمر خود رسید، مخازن پیش‌فرض آن دیگر به‌روزرسانی نمی‌شوند و دسترسی به آنها ممکن است محدود یا قطع شود. بنابراین نیاز است که از مخازن جایگزین مانند مخازن Vault استفاده کنیم.

⚙️ راه حل:

1️⃣ ایجاد یا ویرایش فایل مخزن

ابتدا باید مخازن Vault را در یک فایل مخزن جدید تنظیم کنیم تا بتوانیم به بسته‌های مورد نیاز دسترسی پیدا کنیم.

- ایجاد یا ویرایش یک فایل مخزن جدید:

vi /etc/yum.repos.d/CentOS-Vault.repo


- اضافه کردن مخازن Vault:

محتوای زیر را در فایل قرار دهید:

[AppStream]
name=CentOS-$releasever - AppStream
baseurl=http://vault.centos.org/8.3.2011/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

[BaseOS]
name=CentOS-$releasever - Base
baseurl=http://vault.centos.org/8.3.2011/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

[extras]
name=CentOS-$releasever - Extras
baseurl=http://vault.centos.org/8.3.2011/extras/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial


2️⃣ غیرفعال کردن مخازن پیش‌فرض

باید مطمئن شویم که مخازن پیش‌فرض CentOS غیرفعال شده‌اند تا تداخل ایجاد نشود.

- ویرایش فایل‌های مخازن پیش‌فرض:

فایل‌های مخازن پیش‌فرض در مسیر /etc/yum.repos.d/ قرار دارند. به عنوان مثال، فایل‌های زیر را ویرایش کنید:

vi /etc/yum.repos.d/CentOS-Linux-AppStream.repo
vi /etc/yum.repos.d/CentOS-Linux-BaseOS.repo
vi /etc/yum.repos.d/CentOS-Linux-Extras.repo


- غیرفعال کردن مخازن پیش‌فرض:

در هر کدام از این فایل‌ها، خط enabled را به 0 تغییر دهید. به عنوان مثال:

[AppStream]
name=CentOS-$releasever - AppStream
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial


همین تغییر را برای BaseOS و Extras انجام دهید.

3️⃣ پاک کردن کش YUM و به‌روزرسانی

- پاک کردن کش YUM:

yum clean all


- به‌روزرسانی لیست بسته‌ها:

yum makecache


4️⃣ نصب بسته tree

- نصب بسته tree:

حالا باید بتوانید بسته tree را بدون مشکل نصب کنید.

yum install tree


⁉️ پرسش‌های متداول (FAQ)

🤔متادیتا چیست؟

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

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

بدون دسترسی به متادیتا، yum نمی‌تواند بسته‌های مورد نظر شما را پیدا و نصب کند.

🤓مخازن Vault چیست؟

مخازن Vault شامل نسخه‌های قدیمی‌تر از بسته‌های نرم‌افزاری است که برای نسخه‌هایی از سیستم عامل که به پایان عمر خود رسیده‌اند (EOL) استفاده می‌شود. این مخازن به شما امکان دسترسی به بسته‌های نرم‌افزاری و بروزرسانی‌ها را حتی پس از پایان عمر رسمی نسخه سیستم عامل می‌دهند.

مخازن Vault به شما اجازه می‌دهند تا به نسخه‌های قدیمی‌تر بسته‌ها دسترسی داشته باشید که دیگر در مخازن اصلی موجود نیستند. این مخازن به ویژه برای سیستم‌های قدیمی که به پایان عمر خود رسیده‌اند (EOL) مفید هستند.


📁 #Linux #Docker

کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1🔥1👏1
PHP & MYSQL pinned «🖥 حل مشکل دانلود متادیتا برای مخازن CentOS در کانتینر داکر با استفاده از مخازن Vault 🧐هنگامی که تلاش می‌کنید بسته‌ای را در داخل کانتینر CentOS-8 با استفاده از yum نصب کنید، ممکن است با خطای زیر مواجه شوید: Failed to download metadata for repo 'appstream':…»