🚀 جلوگیری از اجرای تصادفی کامندهای خطرناک در پروداکشن !
آیا میدانستید از لاراول ۱۱.۹ به بعد میتونین اجرای کامندهای حساس مثل migrate و db:wipe رو توی محیط Production بلاک کنین، فقط با اضافه کردن Trait جدید Prohibitable! 🔒
📌 چطوری؟ خیلی ساده:
حالا میتونین توی بوت اپلیکیشن، این دستورات رو مسدود کنین:
یا خیلی راحت با DB Facade این کار رو انجام بدین:
✅ متد
خیلی کاربردیه، نه؟😎
@panicdev
آیا میدانستید از لاراول ۱۱.۹ به بعد میتونین اجرای کامندهای حساس مثل migrate و db:wipe رو توی محیط Production بلاک کنین، فقط با اضافه کردن Trait جدید Prohibitable! 🔒
📌 چطوری؟ خیلی ساده:
use Illuminate\Console\Command;
use Illuminate\Console\Prohibitable;
class SomeDestructiveCommand extends Command
{
use Prohibitable;
}
حالا میتونین توی بوت اپلیکیشن، این دستورات رو مسدود کنین:
FreshCommand::prohibit();
RefreshCommand::prohibit();
ResetCommand::prohibit();
WipeCommand::prohibit();
یا خیلی راحت با DB Facade این کار رو انجام بدین:
DB::prohibitDestructiveCommands($this->app->isProduction());
✅ متد
prohibit() یه مقدار Boolean میگیره و میتونین شرطی تنظیمش کنین که فقط توی Production بلاک بشه و توی Development بدون مشکل اجرا بشه. 💡 خیلی کاربردیه، نه؟
@panicdev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍7❤🔥3
📝 یک Rich Text Editor در لاراول با پکیج Rich Text Laravel
اگه توی پروژههاتون نیاز به یه ویرایشگر متن پیشرفته دارین، پکیج Rich Text Laravel که از Trix Editor پشتیبانی میکنه، گزینهی عالیایه! 🎯
📌 نصب و راهاندازی:
🛠 بروزرسانی مدل
📝 اعتبارسنجی در Form Request
🖋 استفاده از Blade Component
💡 میتونین دکمههای ویرایشگر رو شخصیسازی کنین و حتماً ورودیها رو با Symfony’s HTML Sanitizer ایمنسازی کنین! 🔒
💡 نگران attachment ها هم نباشید . اون هارو هم بخوبی پشتیبانی میکنه و راحت میتونید دریافتشون کنید و مدیریتشون کنید
💡 کامپوننت لایوایری هم داره که میتونید توی پروژه های لایوایری هم ازش استفاده کنید .
💡 داکیومنت خوب و تکمیلی داره که میتونید ریپازیتوری مربوطه را مشاهده کنید . لینک
اگه به یه ویرایشگر متن قوی برای لاراول نیاز دارین، این پکیج رو امتحان کنین! 🚀
اگه توی پروژههاتون نیاز به یه ویرایشگر متن پیشرفته دارین، پکیج Rich Text Laravel که از Trix Editor پشتیبانی میکنه، گزینهی عالیایه! 🎯
📌 نصب و راهاندازی:
composer require tonysm/rich-text-laravel
php artisan richtext:install
🛠 بروزرسانی مدل
use Tonysm\RichTextLaravel\Models\Traits\HasRichText;
class Product extends Model
{
use HasFactory, HasRichText;
protected $richTextAttributes = ['denoscription']; // فیلدهای ویرایشگر متن
protected $fillable = ['name', 'price', 'type', 'denoscription'];
}
📝 اعتبارسنجی در Form Request
$this->validate([
'name' => ['required', 'string', 'max:255'],
'price' => ['required', 'decimal:10,2'],
'type' => ['required'],
'denoscription' => ['nullable', 'string'],
]);
🖋 استفاده از Blade Component
<x-trix-input id="denoscription" name="denoscription"
:value="old('denoscription', $product->denoscription?->toTrixHtml())" autocomplete="off" />
💡 میتونین دکمههای ویرایشگر رو شخصیسازی کنین و حتماً ورودیها رو با Symfony’s HTML Sanitizer ایمنسازی کنین! 🔒
💡 نگران attachment ها هم نباشید . اون هارو هم بخوبی پشتیبانی میکنه و راحت میتونید دریافتشون کنید و مدیریتشون کنید
💡 کامپوننت لایوایری هم داره که میتونید توی پروژه های لایوایری هم ازش استفاده کنید .
💡 داکیومنت خوب و تکمیلی داره که میتونید ریپازیتوری مربوطه را مشاهده کنید . لینک
اگه به یه ویرایشگر متن قوی برای لاراول نیاز دارین، این پکیج رو امتحان کنین! 🚀
GitHub
GitHub - tonysm/rich-text-laravel at madewithlaravel.com
Integrates the Trix Editor with Laravel. Inspired by the Action Text gem from Rails. - GitHub - tonysm/rich-text-laravel at madewithlaravel.com
👍8🔥4❤🔥2
🔐 افزایش امنیت حساب با
لاراول یه قابلیت امنیتی قوی داره که با
🛠 چطور پیادهسازی کنیم؟
مثلاً وقتی کاربر فعالیت مشکوک حس کرد، میتونیم همه سشنها (بهجز فعلی) رو ببندیم:
✅ نکته: این قابلیت نیاز به
🔑 تغییر رمز عبور + خروج از تمام دستگاهها
🔒 چرا این قابلیت مهمه؟
✅ کاربر میتونه روی امنیت حساب خودش کنترل بیشتری داشته باشه.
✅ دسترسی غیرمجاز به حساب به خاطر سشنهای فراموششده جلوگیری میشه.
یه لایهی امنیتی قویتر برای اپلیکیشنهای لاراول!🔥
Auth::logoutOtherDevices() در لاراوللاراول یه قابلیت امنیتی قوی داره که با
Auth::logoutOtherDevices() میتونین تمام سشنهای کاربر روی دستگاههای دیگه رو ببندین و فقط دستگاه فعلی رو فعال نگه دارین. این ویژگی برای محافظت از دادههای حساس خیلی مفیده! 🚀 🛠 چطور پیادهسازی کنیم؟
مثلاً وقتی کاربر فعالیت مشکوک حس کرد، میتونیم همه سشنها (بهجز فعلی) رو ببندیم:
public function secureSessions(Request $request)
{
Auth::logoutOtherDevices($request->password);
return back()->with('status', 'همهی سشنهای دیگر بسته شدند');
}
✅ نکته: این قابلیت نیاز به
auth.session middleware داره: Route::middleware(['auth', 'auth.session'])->group(function () {
// مسیرهای محافظتشده
});🔑 تغییر رمز عبور + خروج از تمام دستگاهها
class SecurityController extends Controller
{
public function updatePassword(Request $request)
{
$validated = $request->validate([
'current_password' => 'required',
'new_password' => 'required|min:8|confirmed'
]);
if (!Hash::check($request->current_password, Auth::user()->password)) {
return back()->withErrors([
'current_password' => 'رمز عبور فعلی اشتباه است'
]);
}
Auth::logoutOtherDevices($request->current_password);
Auth::user()->update([
'password' => Hash::make($request->new_password)
]);
return redirect('/dashboard')
->with('status', 'رمز عبور بروزرسانی شد و همهی دستگاههای دیگر خارج شدند');
}
}
🔒 چرا این قابلیت مهمه؟
✅ کاربر میتونه روی امنیت حساب خودش کنترل بیشتری داشته باشه.
✅ دسترسی غیرمجاز به حساب به خاطر سشنهای فراموششده جلوگیری میشه.
یه لایهی امنیتی قویتر برای اپلیکیشنهای لاراول!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍4😁1
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Release v12.0.0 · laravel/framework
[12.x] Prep Laravel v12 by @driesvints in #50406
[12.x] Make Str::is() match multiline strings by @SjorsO in #51196
[12.x] Use native MariaDB CLI commands by @staudenmeir in #51505
[12.x] Adds miss...
[12.x] Make Str::is() match multiline strings by @SjorsO in #51196
[12.x] Use native MariaDB CLI commands by @staudenmeir in #51505
[12.x] Adds miss...
❤🔥14👍4🕊2🔥1
کیت استارتر های جدید 🔥
Vue: https://github.com/laravel/vue-starter-kit
React: https://github.com/laravel/react-starter-kit
Livewire: https://github.com/laravel/livewire-starter-kit
Vue: https://github.com/laravel/vue-starter-kit
React: https://github.com/laravel/react-starter-kit
Livewire: https://github.com/laravel/livewire-starter-kit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍1
🚀 خوب Laravel 12 و قابلیت جدید `when()` با Closure!
توسعهدهندههای لاراول، احتمالاً با متد
💡 چرا این قابلیت مهمه؟
چون باعث میشه شرطهای پیچیدهتر رو بهشکل خواناتر و تمیزتر بنویسیم!
مثال:
یا برای تعیین مهلت پرداخت فاکتور:
✅ نتیجه؟ کد تمیزتر، خواناتر و انعطافپذیرتر! 😎
@panicdev
توسعهدهندههای لاراول، احتمالاً با متد
when() آشنا هستین، ولی میدونستین که توی Laravel 12 به بعد حالا میتونین از Closure بهعنوان شرط استفاده کنین؟ 🤌 💡 چرا این قابلیت مهمه؟
چون باعث میشه شرطهای پیچیدهتر رو بهشکل خواناتر و تمیزتر بنویسیم!
مثال:
$taxRate = when(
$country === 'US',
fn() => 0.07, // ۷٪ مالیات برای آمریکا
fn() => 0.2 // ۲۰٪ مالیات برای سایر کشورها
);
یا برای تعیین مهلت پرداخت فاکتور:
$invoiceDueDate = when(
fn() => $user->isVIP() && now()->isWeekday(),
fn() => now()->addDays(10), // کاربران VIP ده روز اضافه دارند
fn() => now()->addDays(5) // کاربران عادی پنج روز اضافه دارند
);
✅ نتیجه؟ کد تمیزتر، خواناتر و انعطافپذیرتر! 😎
@panicdev
🔥16❤🔥1👍1
🚀 معرفی
لاراول یه helper به اسم
🔹 مثال ساده:
✅ پاسخ فوراً به کاربر نمایش داده میشه، اما بعد از ۳ ثانیه، لاگ ذخیره میشه!
🔹 کاربرد واقعی:
مثلاً توی یه صفحهی مشاهده دوره آموزشی، میخوایم دوره رو به عنوان "در حال پیشرفت" برای کاربر علامت بزنیم، ولی این عملیات نیازی نداره که قبل از نمایش صفحه اجرا بشه:
✅ کاربر صفحه رو فوراً میبینه، اما عملیات در پسزمینه اجرا میشه.
🔥 چرا
✔️ برای کارهای سبک و سریع که نیاز به اجرا در لحظه ندارن.
✔️ نیازی به تنظیمات صف و اجرای
✔️ پردازش بعد از ارسال پاسخ انجام میشه، بدون تأخیر در نمایش صفحه!
⚠️ بهتره برای کارهای سنگین مثل پردازش ویدیو از صفها استفاده کنین، نه `defer`!
نتیجه: یه ابزار عالی برای بهینهسازی درخواستهای لاراول! 🚀✨
defer در لاراول لاراول یه helper به اسم
defer داره که میتونین بعضی از پردازشها رو بعد از ارسال پاسخ اجرا کنین، بدون نیاز به صفها! 🎯 🔹 مثال ساده:
Route::get('/', function () {
defer(function () {
sleep(3);
\Log::info('Some log');
});
return response(' پاسخ ارسال شد');
});✅ پاسخ فوراً به کاربر نمایش داده میشه، اما بعد از ۳ ثانیه، لاگ ذخیره میشه!
🔹 کاربرد واقعی:
مثلاً توی یه صفحهی مشاهده دوره آموزشی، میخوایم دوره رو به عنوان "در حال پیشرفت" برای کاربر علامت بزنیم، ولی این عملیات نیازی نداره که قبل از نمایش صفحه اجرا بشه:
defer(fn () => $this->addCourseToProgress->handle(auth()->user(), $course));
✅ کاربر صفحه رو فوراً میبینه، اما عملیات در پسزمینه اجرا میشه.
🔥 چرا
defer بهتر از صفهاست؟ ✔️ برای کارهای سبک و سریع که نیاز به اجرا در لحظه ندارن.
✔️ نیازی به تنظیمات صف و اجرای
queue:work نداره. ✔️ پردازش بعد از ارسال پاسخ انجام میشه، بدون تأخیر در نمایش صفحه!
⚠️ بهتره برای کارهای سنگین مثل پردازش ویدیو از صفها استفاده کنین، نه `defer`!
نتیجه: یه ابزار عالی برای بهینهسازی درخواستهای لاراول! 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
🛠 چطور `defer` در لاراول کار میکند؟
در نگاه اول، ممکنه فکر کنین که
لاراول از طریق Middleware مخصوص به نام
🔍 پشت صحنه اجرای
📌 لاراول متدی به نام
✅ یعنی اگه پاسخ موفقیتآمیز باشه (کد ۲xx یا ۳xx)، توابع
🤔 چطور لاراول بعد از ارسال پاسخ،
شاید عجیب باشه، چون درخواست کاربر تموم شده و پاسخ ارسال شده، ولی چطور
✅ دلیلش اینه که PHP روی FastCGI اجرا میشه که اجازه میده پردازش بعد از ارسال پاسخ هم باز بمونه و اجرا بشه!
📌 ترتیب اجرای
1️⃣ کاربر
2️⃣ لاراول کالبک
3️⃣ پاسخ (
4️⃣ (پردازش PHP هنوز باز هست) 🚀
5️⃣ لاراول متد
6️⃣ و`defer` اجرا شده و عملیات در پسزمینه پردازش میشه.
7️⃣ بعد PHP این کد رو بدون تأخیر در نمایش پاسخ، در پسزمینه اجرا میکنه.
✅ این دقیقاً مثل queue نیست ولی شبیه اجراهای پسزمینهای هست که بعد از ارسال پاسخ، وظایف رو اجرا میکنه!
@panicdev
در نگاه اول، ممکنه فکر کنین که
defer یه چیزی شبیه صفها (queues) هست، ولی در واقع اینطور نیست! لاراول از طریق Middleware مخصوص به نام
InvokeDeferredCallbacks پردازشهای defer رو بعد از ارسال پاسخ اجرا میکنه. 🔍 پشت صحنه اجرای
defer 📌 لاراول متدی به نام
terminate داره که بعد از ارسال پاسخ، توابع defer ذخیرهشده رو اجرا میکنه: class InvokeDeferredCallbacks
{
public function terminate(Request $request, Response $response)
{
Container::getInstance()
->make(DeferredCallbackCollection::class)
->invokeWhen(fn ($callback) => $response->getStatusCode() < 400 || $callback->always);
}
}
✅ یعنی اگه پاسخ موفقیتآمیز باشه (کد ۲xx یا ۳xx)، توابع
defer اجرا میشن! 🤔 چطور لاراول بعد از ارسال پاسخ،
defer رو اجرا میکنه؟ شاید عجیب باشه، چون درخواست کاربر تموم شده و پاسخ ارسال شده، ولی چطور
defer هنوز اجرا میشه؟ 🤔 ✅ دلیلش اینه که PHP روی FastCGI اجرا میشه که اجازه میده پردازش بعد از ارسال پاسخ هم باز بمونه و اجرا بشه!
📌 ترتیب اجرای
defer در لاراول 1️⃣ کاربر
/ رو باز میکنه. 2️⃣ لاراول کالبک
defer رو ذخیره میکنه (ولی اجرا نمیکنه). 3️⃣ پاسخ (
response) فوراً به کاربر نمایش داده میشه. 4️⃣ (پردازش PHP هنوز باز هست) 🚀
5️⃣ لاراول متد
terminate رو اجرا میکنه. 6️⃣ و`defer` اجرا شده و عملیات در پسزمینه پردازش میشه.
7️⃣ بعد PHP این کد رو بدون تأخیر در نمایش پاسخ، در پسزمینه اجرا میکنه.
✅ این دقیقاً مثل queue نیست ولی شبیه اجراهای پسزمینهای هست که بعد از ارسال پاسخ، وظایف رو اجرا میکنه!
@panicdev
👍7🔥1
من به عنوان attacker وب سایت شمارو مورد بررسی قرار میدم
و میخوام که یوزر نیم پسورد کاربران شمارو پیدا کنم !
یک روش که میتونه کار من رو راحت کنه این هستش که وقتی یوزر نیم و پسورد رو وارد میکنم
به من یک خطای واضح برگرونید
مثلا
- ایمیل وارد شده یافت نشد
- پسورد وارد شده اشتباه است .
خوب من اگه رندوم ایمیل های مختلف رو وارد کنم و یه جا به جای خطای
- ایمیل / یوزر نیم وارد شده اشتباه است ببینم که خطای پسورد وارد شده اشتباه هست رو برگردوندید .
میفهمم که این ایمیل تو سیستم شما وجود داره و میرم سراغ پسورد .
حالا برای این که کار من رو سخت کنید .
میاید تحت هر شرایطی ( چه ایمیل چه پسورد ) اشتباه باشه
خطا میدید که اطلاعات وارد شده صحیح نمی باشد .
خوب من میام یکم پیشرفته تر عمل میکنم
چند درخواست همزمان میفرستم سمت سرور شما و تایم ریسپانسی که به من میدید رو چک میکنم
هرجایی که ریسپانس زودتری برگردونید میفهمم که یوزر/ایمیلی که دادم تو سیستم شما نیست .
هرجایی که ریسپانس بیشتر طول کشید میفهمم که ایمیل/یوزر نیم داخل سیستم شما هست و فقط پسورد اشتباه هست .
برای این که کار من و سخت تر کنید . چه راه حلی دارید ؟ ( بدون AI بگید اگر که جوابی دارید . )
Please open Telegram to view this post
VIEW IN TELEGRAM
Panic Dev
مچکرم از مشارکتتون
جواب ها تا حدی زیادی نزدیک بود ، دمتون گرم
هدف تمرکز روی خود عمل بود . بدون در نظر گرفتن بلاک کردن ، ریت لیمیت و امثال این ها .
اما هدف از طرح چالش این بود که شما رو با کلاس
تو لاراول آشنا کنم که ۲۰۲۲ معرفی شد .
شاید خیلی ها تو داکیومنت دیده باشیدش ولی نمیدونستید کاربرد واقعیش چی بوده . و یا کجا میشه ازش استفاده کرد
یا اینکه با این حمله و مفهوم
لاراول برای چنین چالش هایی که فقط برای لاگین نیستش
میتونه برای عملیات کریپتوگرافی هم باشه . امده این کلاس و فیچر و اضافه کرده😊
که مثالش میشه این
اگر علاقه دارید برای توضیحات بیشتر میتونید این لینک هارم مشاهده نمایید .
🔗 داکیومنت
🔗مقاله مربوطه
@panicdev
جواب ها تا حدی زیادی نزدیک بود ، دمتون گرم
هدف تمرکز روی خود عمل بود . بدون در نظر گرفتن بلاک کردن ، ریت لیمیت و امثال این ها .
اما هدف از طرح چالش این بود که شما رو با کلاس
Timeboxتو لاراول آشنا کنم که ۲۰۲۲ معرفی شد .
شاید خیلی ها تو داکیومنت دیده باشیدش ولی نمیدونستید کاربرد واقعیش چی بوده . و یا کجا میشه ازش استفاده کرد
یا اینکه با این حمله و مفهوم
Timeless Timing Attack اشنا نبودید لاراول برای چنین چالش هایی که فقط برای لاگین نیستش
میتونه برای عملیات کریپتوگرافی هم باشه . امده این کلاس و فیچر و اضافه کرده
که مثالش میشه این
protected function hasValidCredentials($user, $credentials)
{
return $this->timebox
->call(function ($timebox) use ($user, $credentials) {
$validated = ! is_null($user)
&& $this->provider->validateCredentials($user, $credentials);
if ($validated) {
$timebox->returnEarly();
$this->fireValidatedEvent($user);
}
return $validated;
}, 200 * 1000);
}
اگر علاقه دارید برای توضیحات بیشتر میتونید این لینک هارم مشاهده نمایید .
🔗 داکیومنت
🔗مقاله مربوطه
@panicdev
Please open Telegram to view this post
VIEW IN TELEGRAM
Laravel
Helpers - Laravel 12.x - The PHP Framework For Web Artisans
Laravel is a PHP web application framework with expressive, elegant syntax. We’ve already laid the foundation — freeing you to create without sweating the small things.
👍6🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣24👍2🌚2😁1
لایووایر توی نسخه جدیدش چندتا دایرکتیو و تابع جدید معرفی کرده 🥳
اول از همه اینکه شما به سادگی و با ران کردن
میتونید به راحتی این آپدیت رو دریافت کنید و از این فیچرها استفاده کنید📝
حالا هرکدوم از این موارد چیکار میکنن؟🙄
با استفاده از
توی Blade به اینصورت عمل کنید
نتیجه این میشه که 85 توی spanتون قرار میگیره🤟
با استفاده از wire:show میتونید بر اساس یک پروپرتی توی کلاس کامپوننت؛ یک المان از blade رو نمایش بدید یا مخفی کنید
توی Blade به اینصورت عمل کنید
و زمانی که مقدار showModal برابر با true بشه، div شما نمایش داده میشه.
حتی میتونید از transition ها برای انیمیت کردنش استفاده کنید✨
مستندات توابع و دایرکتیو هارو میتونید از داکیومنت ببینید🙄
⭐️ wire:text docs
⭐️ wire:show docs
⭐️ wire:transition docs
⭐️ wire:cloak docs
⭐️ $js & this->js() docs
wire:text
wire:show
wire:cloak
wire:transition
$js(...)
$this->js(...)
اول از همه اینکه شما به سادگی و با ران کردن
composer update livewire/livewire
میتونید به راحتی این آپدیت رو دریافت کنید و از این فیچرها استفاده کنید
حالا هرکدوم از این موارد چیکار میکنن؟
با استفاده از
wire:text میتونید به راحتی متن پروپرتیتون رو توی المان های blade قرار بدیدpublic int $likes = 85;
توی Blade به اینصورت عمل کنید
<span wire:text="likes"></span>
نتیجه این میشه که 85 توی spanتون قرار میگیره
با استفاده از wire:show میتونید بر اساس یک پروپرتی توی کلاس کامپوننت؛ یک المان از blade رو نمایش بدید یا مخفی کنید
public bool $showModal = false;
توی Blade به اینصورت عمل کنید
<div wire:show="showModal"></div>
و زمانی که مقدار showModal برابر با true بشه، div شما نمایش داده میشه.
حتی میتونید از transition ها برای انیمیت کردنش استفاده کنید
مستندات توابع و دایرکتیو هارو میتونید از داکیومنت ببینید
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥9👍9
بحث #دیتابیس #mysql
داشتم یک مطلبی میخوندم ، به یک دستوری اشاره کرد به اسم
مواردی که تونستم در بیارم زیاد نبود ،
ولی یه خلاصه و چند مورد از سناریو هایی که بهتر هست از این دستور استفاده کنیم رو بخوام بگم. این هستش که :
دستور ANALYZE TABLE یک دستور مفید برای بهروزرسانی آمار داخلی جدول که به بهینهسازی اجرای کوئریها کمک میکنه !
حالا مواردی که اشاره شده بود برای استفاده از این دستور این ها هستش :
✅زمانی که بعد از تغییرات بزرگ در دادهها، کوئریها کند شدند.
✅ زمانی که بعد از افزودن ایندکس، ایندکس استفاده نمیشود.
✅ زمانی که MySQL به جای استفاده از ایندکس، کل جدول را اسکن میکند.
✅ زمانی که بعد از بازیابی بکاپ، سرعت پایگاه داده کاهش یافته است.
✅ زمانی که جدول را با OPTIMIZE TABLE بهینه کردهاید.
✴️ نکات و best practices
🔹 تحلیل منظم: بهطور مرتب دستور ANALYZE TABLE را روی جداولی که تغییرات دادهای زیادی دارند اجرا کنید تا عملکرد کوئریها حفظ شود.
🔹 پایش عملکرد: این دستور را بهعنوان بخشی از نگهداری دورهای اجرا کنید، بهویژه پس از عملیات حجیم روی دادهها، تا آمارها بهروز بمانند.
🔹 توجه به سربار پردازشی: در نظر داشته باشید که ANALYZE TABLE ممکن است هنگام تجزیه و تحلیل، جداول را قفل کند که میتواند بر عملیات همزمان تأثیر بگذارد. بهتر است آن را در ساعات کمبار اجرا کنید تا اثرات منفی کاهش یابد.
🔹 سازگاری با موتورهای ذخیرهسازی: این دستور در موتورهای ذخیرهسازی مانند InnoDB و MyISAM پشتیبانی میشود اما ممکن است برای همه موتورهای ذخیرهسازی قابل استفاده نباشد. قبل از استفاده، از سازگاری آن اطمینان حاصل کنید.
🔹 اجرای خودکار: در برخی شرایط، MySQL ممکن است بهطور خودکار ANALYZE TABLE را اجرا کند، اما اجرای دستی آن تضمین میکند که آمارها بهروز باشند.
🔹 ارزیابی اثربخشی: برای بررسی تأثیر ANALYZE TABLE، برنامههای اجرای کوئری (Execution Plan) را قبل و بعد از آن مقایسه کنید. اگر موتور ذخیرهسازی شما از آن پشتیبانی نمیکند یا باعث افت عملکرد قابلتوجهی میشود، از اجرای آن خودداری کنید.
➕ نکته اضافه :
دستور
منابع که شاید برای مطالعه بیشتر دوست داشته باشید .
- لینک
- لینک
-لینک
#تجربه
خیلی دوست دارم کسانی که تجربه کار با این کامند داشتند ، تجربیاتشون رو با ما به اشتراک بگذارند . تاثیراتی که روی دیتابیس و کوئری ها بوده به چه صورتی بود و چقدر تائیر گذار داشته ، آیا این رو به صورت دوره ای schedule کردن ؟
ایا تجربه بدی هم ازش داشتن .
آیا اطلاعات بیشتری یا سناریو هایی بیشتری میشناسید که از این کامند استفاده کنیم ؟
با اشتراک گذاری اطلاعاتتون مارا خوشحال کنید .
سپاس
@panicdev
داشتم یک مطلبی میخوندم ، به یک دستوری اشاره کرد به اسم
ANALYZE کنجکاو شدم که بدونم به چه کاری میاد و باهاش میشه چیکار کرد . مواردی که تونستم در بیارم زیاد نبود ،
ولی یه خلاصه و چند مورد از سناریو هایی که بهتر هست از این دستور استفاده کنیم رو بخوام بگم. این هستش که :
دستور ANALYZE TABLE یک دستور مفید برای بهروزرسانی آمار داخلی جدول که به بهینهسازی اجرای کوئریها کمک میکنه !
حالا مواردی که اشاره شده بود برای استفاده از این دستور این ها هستش :
✅زمانی که بعد از تغییرات بزرگ در دادهها، کوئریها کند شدند.
✅ زمانی که بعد از افزودن ایندکس، ایندکس استفاده نمیشود.
✅ زمانی که MySQL به جای استفاده از ایندکس، کل جدول را اسکن میکند.
✅ زمانی که بعد از بازیابی بکاپ، سرعت پایگاه داده کاهش یافته است.
✅ زمانی که جدول را با OPTIMIZE TABLE بهینه کردهاید.
✴️ نکات و best practices
🔹 تحلیل منظم: بهطور مرتب دستور ANALYZE TABLE را روی جداولی که تغییرات دادهای زیادی دارند اجرا کنید تا عملکرد کوئریها حفظ شود.
🔹 پایش عملکرد: این دستور را بهعنوان بخشی از نگهداری دورهای اجرا کنید، بهویژه پس از عملیات حجیم روی دادهها، تا آمارها بهروز بمانند.
🔹 توجه به سربار پردازشی: در نظر داشته باشید که ANALYZE TABLE ممکن است هنگام تجزیه و تحلیل، جداول را قفل کند که میتواند بر عملیات همزمان تأثیر بگذارد. بهتر است آن را در ساعات کمبار اجرا کنید تا اثرات منفی کاهش یابد.
🔹 سازگاری با موتورهای ذخیرهسازی: این دستور در موتورهای ذخیرهسازی مانند InnoDB و MyISAM پشتیبانی میشود اما ممکن است برای همه موتورهای ذخیرهسازی قابل استفاده نباشد. قبل از استفاده، از سازگاری آن اطمینان حاصل کنید.
🔹 اجرای خودکار: در برخی شرایط، MySQL ممکن است بهطور خودکار ANALYZE TABLE را اجرا کند، اما اجرای دستی آن تضمین میکند که آمارها بهروز باشند.
🔹 ارزیابی اثربخشی: برای بررسی تأثیر ANALYZE TABLE، برنامههای اجرای کوئری (Execution Plan) را قبل و بعد از آن مقایسه کنید. اگر موتور ذخیرهسازی شما از آن پشتیبانی نمیکند یا باعث افت عملکرد قابلتوجهی میشود، از اجرای آن خودداری کنید.
➕ نکته اضافه :
دستور
EXPLAIN ANALYZE در MySQL هم داریم که اطلاعات دقیقی دربارهی برنامهی اجرای کوئری میده ، از جمله جزئیات مربوط به تصمیمات بهینهساز، روشهای دسترسی و هزینههای تخمینی. برخلاف EXPLAIN که فقط طرح اجرای کوئری را بدون اجرای واقعی آن نمایش میده EXPLAIN ANALYZE کوئری را اجرا میکنه و آمار زمان اجرا را ارائه میکند. این ویژگی یک ابزار ارزشمند برای تحلیل عملکرد کوئریها و شناسایی نقاط قابل بهبود .منابع که شاید برای مطالعه بیشتر دوست داشته باشید .
- لینک
- لینک
-لینک
#تجربه
خیلی دوست دارم کسانی که تجربه کار با این کامند داشتند ، تجربیاتشون رو با ما به اشتراک بگذارند . تاثیراتی که روی دیتابیس و کوئری ها بوده به چه صورتی بود و چقدر تائیر گذار داشته ، آیا این رو به صورت دوره ای schedule کردن ؟
ایا تجربه بدی هم ازش داشتن .
آیا اطلاعات بیشتری یا سناریو هایی بیشتری میشناسید که از این کامند استفاده کنیم ؟
با اشتراک گذاری اطلاعاتتون مارا خوشحال کنید .
سپاس
@panicdev
DataCamp
MySQL ANALYZE TABLE Usage Performance Optimization: Usage & Examples
Optimize MySQL performance with `ANALYZE TABLE`. Learn its usage, examples, and best practices to update table statistics for efficient query execution. Ideal for tables with frequent data changes.
👍6
🚀 پکیج GPDF یک پکیج PHP/Laravel برای تولید PDFهای عربی، راستچین (RTL) و چندزبانه است که بهصورت بومی از ۱۷ فونت عربی داخلی پشتیبانی میکند. این پکیج با پشتیبانی از فضای ابری S3 بر اساس DomPDF توسعه یافته و مشکلات رندر متن عربی را حل کرده است، در عین حال قابلیتهای مدرنی را برای اسناد، فاکتورها و گزارشها اضافه میکند.
https://github.com/omaralalwi/Gpdf
#package
@panicdev
https://github.com/omaralalwi/Gpdf
#package
@panicdev
GitHub
GitHub - omaralalwi/Gpdf: Gpdf: PHP PDF Generator - HTML to PDF Converter for Laravel & PHP with native Arabic/RTL support, with…
Gpdf: PHP PDF Generator - HTML to PDF Converter for Laravel & PHP with native Arabic/RTL support, with built-in 17 fonts, and S3 storage. Extends DomPDF to fix Arabic limitations and add ad...
🔥9👍4
حتماً برات پیش اومده که بخوای از سرورهای ایران به وبسرویس رباتهای تلگرام وصل بشی، ولی همیشه کلی دردسر داشتی. خوب، یه راهحل ساده، رایگان و بیدردسر برات دارم که میتونی راحت ازش استفاده کنی! 🚀
❔ راه حل چیه؟
✅ Cloudflare Workers
سرویس Cloudflare Workers این امکان رو بهت میده که یه قطعه کد یا پروژه رو روی سابدامین خودت یا حتی سابدامین workers.dev (که خود کلادفلر ارائه میده) اجرا کنی. این سرویس کاملاً رایگانه و استفاده ازش خیلی سادهست.
🎯 چطور راهاندازی کنیم؟
خیلی راحت:
1. تو Cloudflare ثبتنام کن.
2. یه Worker جدید بساز.
3. این کد رو توش کپی کن:
🚀 چطور ازش استفاده کنیم؟
وقتی Worker رو دیپلوی کردی، یه دامنه اختصاصی براش میگیری. حالا کافیه بهجای این که درخواستهات رو به
💡 چرا این روش عالیه؟
✅ کاملاً رایگان و بدون نیاز به سرور
✅ نیازی نیست کدهای اصلی باتت رو تغییر بدی
✅ سرعت بالا و بدون محدودیت دسترسی
✅ امکان استفاده روی دامنه اختصاصی
برای جزئیات بیشتر، یه سر به مستندات Cloudflare Workers بزن. 😉
Happy Coding! 🥳
@PanicDev
سرویس Cloudflare Workers این امکان رو بهت میده که یه قطعه کد یا پروژه رو روی سابدامین خودت یا حتی سابدامین workers.dev (که خود کلادفلر ارائه میده) اجرا کنی. این سرویس کاملاً رایگانه و استفاده ازش خیلی سادهست.
🎯 چطور راهاندازی کنیم؟
خیلی راحت:
1. تو Cloudflare ثبتنام کن.
2. یه Worker جدید بساز.
3. این کد رو توش کپی کن:
export default {
async fetch(request, env, ctx) {
const requestClone = request.clone();
try {
const url = new URL(request.url);
const targetUrl = `https://api.telegram.org${url.pathname}${url.search}`;
const telegramRequest = new Request(targetUrl, {
method: request.method,
headers: request.headers,
body: request.method !== 'GET' && request.method !== 'HEAD' ? await requestClone.blob() : undefined,
});
const response = await fetch(telegramRequest);
return new Response(await response.clone().blob(), {
status: response.status,
statusText: response.statusText,
headers: response.headers,
});
} catch (error) {
return new Response(`Proxy Error: ${error.message}`, { status: 500 });
}
},
};🚀 چطور ازش استفاده کنیم؟
وقتی Worker رو دیپلوی کردی، یه دامنه اختصاصی براش میگیری. حالا کافیه بهجای این که درخواستهات رو به
api.telegram.org بفرستی، به دامنه Worker خودت بفرستی و همون جواب رو بگیری. 🎉💡 چرا این روش عالیه؟
✅ کاملاً رایگان و بدون نیاز به سرور
✅ نیازی نیست کدهای اصلی باتت رو تغییر بدی
✅ سرعت بالا و بدون محدودیت دسترسی
✅ امکان استفاده روی دامنه اختصاصی
برای جزئیات بیشتر، یه سر به مستندات Cloudflare Workers بزن. 😉
Happy Coding! 🥳
@PanicDev
Please open Telegram to view this post
VIEW IN TELEGRAM
Cloudflare
Cloudflare Workers
Welcome to the Cloudflare Dev Platform - Powering the next generation of applications
🔥12👍10❤🔥5