عندما يتعلق الأمر بالقيادة ، فإن السرعة ليست كل شيء. لكن على الويب ، تُحدث السرعة فارقًا كبيرًا. كلما كان تطبيقك أسرع ، كانت تجربة المستخدم أفضل. حسنًا ، هذه المقالة عن (المولدات)PHP Generators ، فلماذا نتحدث عن السرعة؟ نظرًا لأنك على وشك اكتشاف ذلك قريبًا ، فإن المولدات تحدث فرقًا كبيرًا في السرعة وإدارة الذاكرة.
• ماهي بحق الجحيم PHP Generators .
تمت اضافتها في php عند اصدار 5.5
المولدات هي طريقة بسيطه للدخول او عمل لوب داخل البيانات من دون خزنها على الميموري او عمل array في الميموري.
مازلت مشوش ؟
• المثال طريقة جيدة لتريك ماهو عمل المولد.
أولاً ، دعنا ننشئ بسرعة ملف generator.php الذي سنستخدمه خلال هذا المثال التعليمي. بعد إنشاء الملف ، نضيف الكود الصغير هذا.
<?php
سيقوم بطباعه
Dataset 1
وصولاً الى
Dataset 15
ثم سيتوقف .
هذا الكود يبدو فعال بشكل جيد وسهل الاستعمال ولكن ماذا لو قمنا بعمل تغير بسيط عليه ؟
<?php
PHP_INT_MAX
اذهب بسرعه وقم بأعاده تشغيل الملف ، يقوم قارئ الاخطار ( الكومبايلر ) بأعطائك:
Fetal error: Allowed Memory size of 134217728 Bytes ...
حسنًا ، هذا عار ، نفذت ذاكرة PHP. الحلول الممكنة التي تتبادر إلى الذهن تشمل الذهاب إلى php.ini وزيادة memory_limit. دعونا نسأل أنفسنا هذه الأسئلة ، هل هذا فعال حقًا؟ هل نريد نصًا واحدًا يستحوذ على ذاكرة الخادم بالكامل؟ الإجابات هي لا و الف لا. هذا غير فعال ، ولا نريد نصاً واحدًا يستهلك كل ذاكرتنا.
• استعمال المولدات ( Using Generators )
دعنا نقوم بأعاده كتابه الفنكشن مع تغيرات بسيطه.
<?php
ماهو yield ؟
ببساطه : yield هي قلب المولد .
وتعني اثمر او انتج او ارجع بيانات.
تعمل yield كما return ولكن yield هنا تقوم بأرجاع البيانات من دون قتل الفنكشن اي الفنكشن لايتوقف عن العمل حتى انتهاء اللوب .
قم بتشغيل الكود اعلاه ستلاحظ ان البيانات اصبحت تنعرض على المتصفح ولكن ماذا تلاحظ ايضاً ؟
السرعه السرعه السرعه السرعه ، ارتفعت الى حدود السماء.
* يقوم الفنكشن الذي فيه مولد بأرجاع
Generator Object {}
* لايمكن استعمال yield الا داخل فنكشن والفنكشن هو مولد .
القلب يرتبط بالمولد والمولد يرتبط في القلب.
سهله صح؟
• لماذا نفعل هذا ( اي لماذا نستعمل المولدات ) ؟
نظراً لأنك احياناً ستحاول ان تطبع كميه كبيرة من البيانات من خزن قواعد البيانات على صفحتك الشخصيه او ربما تقوم بعرض log files !
وكذلك نحن لانريد ان يقوم فنكشن واحد بأستهالك كل ذاكرتنا ، وكذلك تذكر ان السرعه هي النقطه الاساسيه هنا.
• ارجاع المفاتيح ( Return Keys )
هنالك اوقات الامر لايتم من دون ارجاع مفتاح للتحقق من شيء معين في كودك .
<?php
<?php
المولد يأخذ منك البيانات ولكن من الجميل في الامر انه يمكنك ارسال بيانات اليه كذلك لعمل شروط او اي شيء يصدر في ذهنك.
دعنا نقوم بتعديل الفنكشن getRange مجدداً.
<?php
احدكم سيخبرني هنالك خطأ في الفنشكن .
لأن متغير $injected يحتوي رقم فليس من الممكن ان === stop ولكن في المولدات كل شيء ممكن !
لأرسال البيانات الى المتغير ببساطه:
<?php
Generator Object
• ماهي بحق الجحيم PHP Generators .
تمت اضافتها في php عند اصدار 5.5
المولدات هي طريقة بسيطه للدخول او عمل لوب داخل البيانات من دون خزنها على الميموري او عمل array في الميموري.
مازلت مشوش ؟
• المثال طريقة جيدة لتريك ماهو عمل المولد.
أولاً ، دعنا ننشئ بسرعة ملف generator.php الذي سنستخدمه خلال هذا المثال التعليمي. بعد إنشاء الملف ، نضيف الكود الصغير هذا.
<?php
function getRange ($max = 10) {
$array = [];
for ($i = 1; $i < $max; $i++) {
$array[] = $i;
}
return $array;
}
foreach (getRange(15) as $range) {
echo "Dataset {$range} <br>";
}
قم بتشغيل الملف . سيقوم بطباعه
Dataset 1
وصولاً الى
Dataset 15
ثم سيتوقف .
هذا الكود يبدو فعال بشكل جيد وسهل الاستعمال ولكن ماذا لو قمنا بعمل تغير بسيط عليه ؟
<?php
foreach (getRange(PHP_INT_MAX) as $range) {
echo "Dataset {$range} <br>";
}
الان اقصى كمية سيأخذها الفنشكن getRange هي PHP_INT_MAX
اذهب بسرعه وقم بأعاده تشغيل الملف ، يقوم قارئ الاخطار ( الكومبايلر ) بأعطائك:
Fetal error: Allowed Memory size of 134217728 Bytes ...
حسنًا ، هذا عار ، نفذت ذاكرة PHP. الحلول الممكنة التي تتبادر إلى الذهن تشمل الذهاب إلى php.ini وزيادة memory_limit. دعونا نسأل أنفسنا هذه الأسئلة ، هل هذا فعال حقًا؟ هل نريد نصًا واحدًا يستحوذ على ذاكرة الخادم بالكامل؟ الإجابات هي لا و الف لا. هذا غير فعال ، ولا نريد نصاً واحدًا يستهلك كل ذاكرتنا.
• استعمال المولدات ( Using Generators )
دعنا نقوم بأعاده كتابه الفنكشن مع تغيرات بسيطه.
<?php
function getRange ($max = 10): \Generator
{
for ($i = 1; $i < $max; $i++) {
yield $i;
}
}
foreach (getRange(PHP_INT_MAX) as $range) {
echo "Dataset {$range} <br>";
}
نعم اعلم شيء غريب تمت كتابته وهو yield. ماهو yield ؟
ببساطه : yield هي قلب المولد .
وتعني اثمر او انتج او ارجع بيانات.
تعمل yield كما return ولكن yield هنا تقوم بأرجاع البيانات من دون قتل الفنكشن اي الفنكشن لايتوقف عن العمل حتى انتهاء اللوب .
قم بتشغيل الكود اعلاه ستلاحظ ان البيانات اصبحت تنعرض على المتصفح ولكن ماذا تلاحظ ايضاً ؟
السرعه السرعه السرعه السرعه ، ارتفعت الى حدود السماء.
* يقوم الفنكشن الذي فيه مولد بأرجاع
Generator Object {}
* لايمكن استعمال yield الا داخل فنكشن والفنكشن هو مولد .
القلب يرتبط بالمولد والمولد يرتبط في القلب.
سهله صح؟
• لماذا نفعل هذا ( اي لماذا نستعمل المولدات ) ؟
نظراً لأنك احياناً ستحاول ان تطبع كميه كبيرة من البيانات من خزن قواعد البيانات على صفحتك الشخصيه او ربما تقوم بعرض log files !
وكذلك نحن لانريد ان يقوم فنكشن واحد بأستهالك كل ذاكرتنا ، وكذلك تذكر ان السرعه هي النقطه الاساسيه هنا.
• ارجاع المفاتيح ( Return Keys )
هنالك اوقات الامر لايتم من دون ارجاع مفتاح للتحقق من شيء معين في كودك .
<?php
function getRange ($max = 10): \Generator {
for ($i = 1; $i < $max; $i++) {
$value = $i * mt_rand();
yield $i => $value;
}
}
سنقوم بعمل foreach عليه كما في اي Array اعتياديه . <?php
foreach (getRange(PHP_INT_MAX) as $range => $value) {
echo "Dataset {$range} has {$value} value<br>";
}
• ارسال البيانات الى المولدات . المولد يأخذ منك البيانات ولكن من الجميل في الامر انه يمكنك ارسال بيانات اليه كذلك لعمل شروط او اي شيء يصدر في ذهنك.
دعنا نقوم بتعديل الفنكشن getRange مجدداً.
<?php
function getRange ($max = 10): \Generator
{
for ($i = 1; $i < $max; $i++) {
$injected = yield $i;
if ($injected === 'stop') return;
}
}
اعلم اعلم، احدكم سيخبرني هنالك خطأ في الفنشكن .
لأن متغير $injected يحتوي رقم فليس من الممكن ان === stop ولكن في المولدات كل شيء ممكن !
لأرسال البيانات الى المتغير ببساطه:
<?php
$generator = getRange(PHP_INT_MAX);
foreach ($generator as $range) {
if ($range === 10000) {
$generator->send('stop');
}
echo "Dataset {$range} <br>";
}
انظر الى $generator->send('stop');
كما اخبرتكم مسبقاً المولد يقوم بأرجاع Generator Object
الذي يسمح لنا بعمل بعض الخدع مثلاً هنا اخبرته ان يرسل كلمه stop الى الفنكشن .
والفنكشن سيستقبله وينفذ الامر
وكذلك بسرعه كبيره جداً ومن دون الخزن على الميموري !
اليس هذا جميلاً ؟ نعم هو كذلك.
* ملاحظه استعمال return داخل المولد سيقوم بقتل عمل الفنشكن .
• لاتسيء استعمال المولدات .
استعمال
PHP_INT_MAX
هو ببساطه كالمثل الذي يقول:
" بعوضه تسبح في بحر الموت "
لأن
PHP_INT_MAX = 2147483647
والذي هو:
ملياران ومائة وسبعة وأربعون مليونًا وأربعمائة وثلاثة وثمانون ألفًا وستمائة وسبعة وأربعون
اعجبتك المقاله؟
والفنكشن سيستقبله وينفذ الامر
if ($injected === 'stop') return;
}
ويقوم بعمل return التي ستقتل عمل الفنكشن عند العد الى الرقم 10000
يمكنك على سبيل المثال تغير الاوامر لتتناسب مع الوضع الذي انت فيه . وكذلك بسرعه كبيره جداً ومن دون الخزن على الميموري !
اليس هذا جميلاً ؟ نعم هو كذلك.
* ملاحظه استعمال return داخل المولد سيقوم بقتل عمل الفنشكن .
• لاتسيء استعمال المولدات .
استعمال
PHP_INT_MAX
هو ببساطه كالمثل الذي يقول:
" بعوضه تسبح في بحر الموت "
لأن
PHP_INT_MAX = 2147483647
والذي هو:
ملياران ومائة وسبعة وأربعون مليونًا وأربعمائة وثلاثة وثمانون ألفًا وستمائة وسبعة وأربعون
اعجبتك المقاله؟
هل تعلم ماهو خطأ dev/vda15
او خطأ vda عامةً.
الذي يظهر لك في بعض الاحيان عند سيرفرات اوبنتو ؟
في الحقيقه هذا الخطأ شائع جداً واغلب الحلول على الانترنيت لاتعطي الجواب الشافي والحل النهائي له .
ببساطه شديده.
هذا الخطأ احيانا يظهر عندما تقوم بتشغيل السيرفر يخبرك ان استعمال الخزن لديك 100%
وعند ارسال الامر
df -h
سيخبرك ان
/dev/vda15
يستعمل 100% من الذاكره الداخليه لسيرفرك.
وحتى عند عمل reboot للسيرفر سيبقى.
كيف يتم حل هذا الامر بشكل نهائي؟
ارسل الامر التالي.
find / -type f -size +100M -exec ls -lh {} \;
والذي سيخبرك اي المسارات التي تستهلك اكثر من 100MB من الذاكرة الداخليه لأن الباث الحقيقي لـ dev/vda15 هو مجهول فهو يتكون داخل المسار الذي يستهلك اكبر قدر من القرص الصلب بدون ان نعرف ماهو المسار الحقيقي الذي يستهلك حقاً هذه الكميه من الخزن ونقوم بحذفه .
تبدو مرتبك ولكن في الحقيقه الامر سهل جداً.
فقط ارسل الامر اعلاه وشاهد اي باث حقيقي يستهلك هذه الكميه من البيانات وقم بالدخول الى المسار الذي يظهر لك وحذفه.
او خطأ vda عامةً.
الذي يظهر لك في بعض الاحيان عند سيرفرات اوبنتو ؟
في الحقيقه هذا الخطأ شائع جداً واغلب الحلول على الانترنيت لاتعطي الجواب الشافي والحل النهائي له .
ببساطه شديده.
هذا الخطأ احيانا يظهر عندما تقوم بتشغيل السيرفر يخبرك ان استعمال الخزن لديك 100%
وعند ارسال الامر
df -h
سيخبرك ان
/dev/vda15
يستعمل 100% من الذاكره الداخليه لسيرفرك.
وحتى عند عمل reboot للسيرفر سيبقى.
كيف يتم حل هذا الامر بشكل نهائي؟
ارسل الامر التالي.
find / -type f -size +100M -exec ls -lh {} \;
والذي سيخبرك اي المسارات التي تستهلك اكثر من 100MB من الذاكرة الداخليه لأن الباث الحقيقي لـ dev/vda15 هو مجهول فهو يتكون داخل المسار الذي يستهلك اكبر قدر من القرص الصلب بدون ان نعرف ماهو المسار الحقيقي الذي يستهلك حقاً هذه الكميه من الخزن ونقوم بحذفه .
تبدو مرتبك ولكن في الحقيقه الامر سهل جداً.
فقط ارسل الامر اعلاه وشاهد اي باث حقيقي يستهلك هذه الكميه من البيانات وقم بالدخول الى المسار الذي يظهر لك وحذفه.
- رمز QR .
- خاص بمجموعتي على التليكرام .
- المجموعه مختصه بالنقاشات والمساعدات ببوتات التليكرام.
- ماذا تحتاج للدخول ؟
- تعلم اساسيات اي لغه تود الخوض بها على الاقل .
- لايجوز طرح الاسئله التي تتعلق بـ الـ syntax.
- الرجاء المجموعه مخصصه للمساعده فقط لذلك لاتدخل الى الخاص الا اذا وافق الشخص الثاني لأنك بذلك ستتلقى حظر من المجموعه.
- ويفضل طرح الاسئله داخل المجموعه حتى يستفاد الجميع. وشكراً .
- قم بمسح الرمز وانضم او من خلال رابط الدعوة:
- https://www.tg-me.com/+Nt1fneed3ys4NTBi
- خاص بمجموعتي على التليكرام .
- المجموعه مختصه بالنقاشات والمساعدات ببوتات التليكرام.
- ماذا تحتاج للدخول ؟
- تعلم اساسيات اي لغه تود الخوض بها على الاقل .
- لايجوز طرح الاسئله التي تتعلق بـ الـ syntax.
- الرجاء المجموعه مخصصه للمساعده فقط لذلك لاتدخل الى الخاص الا اذا وافق الشخص الثاني لأنك بذلك ستتلقى حظر من المجموعه.
- ويفضل طرح الاسئله داخل المجموعه حتى يستفاد الجميع. وشكراً .
- قم بمسح الرمز وانضم او من خلال رابط الدعوة:
- https://www.tg-me.com/+Nt1fneed3ys4NTBi
function validateDate($date, $format = 'Y-n-j')
{
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) === $date;
};
function Remain($birthday)
{
$cur_day = date('Y-m-d');
$cur_time_arr = explode('-', $cur_day);
$birthday_arr = explode('-', $birthday);
$cur_year_b_day = $cur_time_arr[0] . "-" . $birthday_arr[1] . "-" . $birthday_arr[2];
if (strtotime($cur_year_b_day) < time()) {
$cur_year_b_day = $cur_time_arr[0] + 1 . "-" . $birthday_arr[1] . "-" . $birthday_arr[2];
$diff = strtotime($cur_year_b_day) - time(); //time returns current time in seconds
$days = floor($diff / (60 * 60 * 24)); //seconds/minute*minutes/hour*hours/day)
$hours = round(($diff - $days * 60 * 60 * 24) / (60 * 60));
$min = date('i', $diff);
return "\n~ " . 'days :' . $days . " ~ hours : $hours ~ minutes : $min";
} else {
$diff = strtotime($cur_year_b_day) - time(); //time returns current time in seconds
$days = floor($diff / (60 * 60 * 24)); //seconds/minute*minutes/hour*hours/day)
$hours = round(($diff - $days * 60 * 60 * 24) / (60 * 60));
$min = date('i', $diff);
return "\n~ " . 'days :' . $days . " ~ hours : $hours ~ minutes : $min";
}
}
• 2 functions :
الاول يتحقق فقط اذا جانت الرساله تاريخ وتاريخ صحيح يعني موجود فعلاً بهذا الزمن ويرجع قيمه true.
يمكتك استعماله بالصورة التاليه:
if (
validateDate
(2030-2-2) == false ){
die('time does not exists');
}
ويمكنك كذلك تغير صيغه الفورمات من خلال وضعها بالصورة التاليه:
$format = 'Y-n-j' // داخل الفنكشن
اما الفنكشن الثاني:
• Remain();
• فهو ببساطه تمرر فيه تاريخ ميلادك يخبرك كم يوم وكم ساعه وحتى كم دقيقه تبقى على
مولدك.
echo Remain('2002-2-2');
الطريقه الصحيحه لأنشاء متغيرات بـ لغة php.
العديد من المرات شاهدت ملفات مكتوبة بلغة php .
يوجد خطأ مشترك في اغلب الملفات وهو؛
$var = $data;
المتغير هنا يحتوي على بيانات اسمها data.
انا لا اعلم ماهي .
ولكن هل هذه الطريقه الصحيحه لكتابه المتغير ؟
هل انت متأكد من متغير $data متوفر في كل الحالات؟
ما اعنيه بالحالات هو، عند فتح الملف او عمل طلب له والخ.. من العمليات التي تجريها له.
الكثير من المبرمجين يستهين بكلمة:
Warning;
او
Notice;
المهم ان الملف يعمل لديهم.
ولكن هذه الطريقة خاطئه دعني اوضح لك بعض الخدع التي من شأنها ان ترفع جوده الكود الخاص بك.
والتي تقلل بشكل جيد من استهلاك الميموري الخاص بك.
عندما يوجد متغير اريد تعريفه؛ وانا لست متأكد "هل هذا المتغير متوفر دائما ام لا" فمن الافضل ان اقوم بفعل هذه الطريقه؛
$var = isset($data) ? $var : NULL;
الان اخبرته ؛ اذا تواجد المتغير استعمله.
واذا لم يتواجد فأن متغير $var سيكون فارغ .
وبهذه الطريقه انا افرغت المتغير لم اعطه قيمه وكذلك لم اجعل ملفي php يستهلك الميموري لأظهار تحذير.
عندما يوجد لديك متغير تعتمد عليه بقيه المتغيرات، مثلاً ؛
$update = [1,2,3,'Data'];
لنفترض ان هذا المتغير يقوم بجلب اراي ( مصفوفه ) لايهم المكان الخاص بها سواء من احدى ملفاتك او من موقع او من سيرفر ثاني خاص بك.
عندما تكون بقيه المتغيرات تعتمد عليها مثلاً ؛
$number1 = $update[0];
فبهذه الطريقة كتابه الكود ، ستكون خاطئه اولاً قم بالتحقق من متغير $update بهذه الصورة؛
if (isset ($update) && is_array ($update) ) {
$number1 = $update[0];
}
بل ومن الافضل جعل المتغير داخل TRY-CATCH .
كذلك عند الانتهاء من المتغير وانت لاترى داعٍ من استعماله، قم بتفريغه بشكل اجباري .
$update = NULL;
قمت بتفريغه للحد من استهلاك الميموري.
احياناً تكون الـ 1MB من الميموري ، تهمك لذلك للحفاظ على الميموري اتبع هذه الخطوات ومن الخاطئ ظهور التحذيرات في ملفك.
ان كان لديك لوب دون توقف ، على السيرفر يقوم بعده وظائف كالاداره والخ.. لمده ٢٤ ساعه، يجب ان تراعي المتغيرات بشكل جيد ،
لماذا ؟
لأن اللوب ، المستمر ؛ المتغير فيه لن يتفرغ اطلاقاً ، الا اذا حل محله بيانات جديده، لذلك يرجى الانتباه لهذه النقطه،
مثلاً عندما تقوم بعمل جلب بيانات ، غالباً نستعمل ؛
$get = file_get_contents($filename);
هل تعلم لو ان الملف يحتوي على لوب مستمر سيبقى متغير $get يحتوي هذه البيانات ويستهلك مجال من الميموري ؟
لذلك يفضل مراعاة المتغيرات جيداً لأحراز افضل استعمال من السيرفر الخاص بك.
العديد من المرات شاهدت ملفات مكتوبة بلغة php .
يوجد خطأ مشترك في اغلب الملفات وهو؛
$var = $data;
المتغير هنا يحتوي على بيانات اسمها data.
انا لا اعلم ماهي .
ولكن هل هذه الطريقه الصحيحه لكتابه المتغير ؟
هل انت متأكد من متغير $data متوفر في كل الحالات؟
ما اعنيه بالحالات هو، عند فتح الملف او عمل طلب له والخ.. من العمليات التي تجريها له.
الكثير من المبرمجين يستهين بكلمة:
Warning;
او
Notice;
المهم ان الملف يعمل لديهم.
ولكن هذه الطريقة خاطئه دعني اوضح لك بعض الخدع التي من شأنها ان ترفع جوده الكود الخاص بك.
والتي تقلل بشكل جيد من استهلاك الميموري الخاص بك.
عندما يوجد متغير اريد تعريفه؛ وانا لست متأكد "هل هذا المتغير متوفر دائما ام لا" فمن الافضل ان اقوم بفعل هذه الطريقه؛
$var = isset($data) ? $var : NULL;
الان اخبرته ؛ اذا تواجد المتغير استعمله.
واذا لم يتواجد فأن متغير $var سيكون فارغ .
وبهذه الطريقه انا افرغت المتغير لم اعطه قيمه وكذلك لم اجعل ملفي php يستهلك الميموري لأظهار تحذير.
عندما يوجد لديك متغير تعتمد عليه بقيه المتغيرات، مثلاً ؛
$update = [1,2,3,'Data'];
لنفترض ان هذا المتغير يقوم بجلب اراي ( مصفوفه ) لايهم المكان الخاص بها سواء من احدى ملفاتك او من موقع او من سيرفر ثاني خاص بك.
عندما تكون بقيه المتغيرات تعتمد عليها مثلاً ؛
$number1 = $update[0];
فبهذه الطريقة كتابه الكود ، ستكون خاطئه اولاً قم بالتحقق من متغير $update بهذه الصورة؛
if (isset ($update) && is_array ($update) ) {
$number1 = $update[0];
}
بل ومن الافضل جعل المتغير داخل TRY-CATCH .
كذلك عند الانتهاء من المتغير وانت لاترى داعٍ من استعماله، قم بتفريغه بشكل اجباري .
$update = NULL;
قمت بتفريغه للحد من استهلاك الميموري.
احياناً تكون الـ 1MB من الميموري ، تهمك لذلك للحفاظ على الميموري اتبع هذه الخطوات ومن الخاطئ ظهور التحذيرات في ملفك.
ان كان لديك لوب دون توقف ، على السيرفر يقوم بعده وظائف كالاداره والخ.. لمده ٢٤ ساعه، يجب ان تراعي المتغيرات بشكل جيد ،
لماذا ؟
لأن اللوب ، المستمر ؛ المتغير فيه لن يتفرغ اطلاقاً ، الا اذا حل محله بيانات جديده، لذلك يرجى الانتباه لهذه النقطه،
مثلاً عندما تقوم بعمل جلب بيانات ، غالباً نستعمل ؛
$get = file_get_contents($filename);
هل تعلم لو ان الملف يحتوي على لوب مستمر سيبقى متغير $get يحتوي هذه البيانات ويستهلك مجال من الميموري ؟
لذلك يفضل مراعاة المتغيرات جيداً لأحراز افضل استعمال من السيرفر الخاص بك.
بوت تحميل من اليوتيوب، بأعلى جودة، يدعم حته تحميل الافلام" ⤵️.
~ @iserbot
~ @iserbot
الي عنده ايفون ويريد يسوي سكنر، تدخل للملاحظات، تختار اضافه ملاحظه ، وتختار علامه الكاميرا ، وتختار مسح مستند ضوئياً وتكدر تشاركه مع التليكرام وترسله براحتك."
MoHaMMeD SAMi ☬
yt-search(version0.1)iBadlz.php
yotube_searchVersion0.2(iBadlz).php
2 KB
• ملف بحث يوتيوب الاصدار V0.2.
• api ☑️.
• مسحوب من نفس موقع اليوتيوب.
• طريقة التشغيل:
• ترفعه على استضافتك .
• تختار view او تفتح مسار الملف من الدومين.
• في الرابط الاعلى الذي سيظهر لك ضع التالي :
• https://yoursite.com
• سيقوم بأرجاع نتيجة جيسون.
• لاتستطيع التعامل مع الجيسون؟
• شرحته هنا :
- https://youtu.be/trYFeXckbyw
قم بأهمال النسخه القديمه لن تعمل في اصدارات php الجديده بسبب اهمال Create_Function .
• الرجاء قم بأرسال اي مشكله تواجهها على التعليقات .
• api ☑️.
• مسحوب من نفس موقع اليوتيوب.
• طريقة التشغيل:
• ترفعه على استضافتك .
• تختار view او تفتح مسار الملف من الدومين.
• في الرابط الاعلى الذي سيظهر لك ضع التالي :
• https://yoursite.com
?search=text
.• سيقوم بأرجاع نتيجة جيسون.
• لاتستطيع التعامل مع الجيسون؟
• شرحته هنا :
- https://youtu.be/trYFeXckbyw
قم بأهمال النسخه القديمه لن تعمل في اصدارات php الجديده بسبب اهمال Create_Function .
• الرجاء قم بأرسال اي مشكله تواجهها على التعليقات .
في احد مؤتمرات قواعد البيانات عد الوصول الى نهاية المؤتمر ، تلقى احد المبرمجين سؤال مثير للاهتمام ، مستخدم لديه سيرفر يحتوي على 40,000 تيبل ، ويقول الاداء ليس جيداً ؟ ( حقاً؟ )
السبب في ذلك ان التطبيق يتطلب انشاء تيبل لكل مستخدم جديد ، ويحتوي على 10 صفوف بداخله.
المستخدم طرح السؤال الخطأ ؛ " هل سيتغير الاداء اذا قمت بالتغير من قواعد البيانات InnoDB الى MyISAM " ؟
سيلا ( احد المبرمجين ) اعطت الجواب الاول ، تحويل التيبلات الى MyISAM لن يحل المشكله ستتفاقم فقط ، المستخدم سيمتلك ٣ تيبلات بدل واحد ، قد يختنق أي نظام تشغيل بمثل هذا العدد من الملفات المركزة في حفنة من المتغيرات والفنكشنات.
جوابي (يتحدث عن نفسه ) ركز على المنطقيه ، لقد اوضحت انه في حاله استعمال 10 مصفوفات ، الى عشرة جداول واضافه عامود لمعرف المستخدم للوصول اليه لاحقاً وتصدير الـ 40,000 جدول (تيبل) الى 10 عندما اوضحت ان اعادة التنظيم هذه ستحسن الاداء بشكل كبير ،
لكنها ستتطلب تغيير التطبيق ، حاول المستخدم الاحتجاج وطلب بعض الحلول الفضية(حلول اعجازيه).
ثم قمت بتسليم السطر المثقوب: "إن عملك ينمو ، ومع نموه ، فإنك تضيف جدولًا
جديدًا لكل مستخدم جديد. إذا واصلت على هذا النحو ، سيكون هناك العديد من الجداول سينهار نظام التشغيل الخاص بك. قاعدة بياناتك هي محكوم عليها بالفشل.
يبدو الأمر كما لو أخبرك طبيبك أنه إذا لم تقلع عن التدخين ، فسوف تموت في غضون ستة أشهر. نفس الشيء بالنسبة لقاعدة البيانات الخاصة بك. إذا لم تتوقف عن إنشاء الجداول ، فإن قاعدة البيانات الخاصة بك ستموت بشكل مزعج. توقف عن التدخين ، الآن !
لقد ترك ذلك انطباعًا كبيرًا لدى الجمهور!
السبب في ذلك ان التطبيق يتطلب انشاء تيبل لكل مستخدم جديد ، ويحتوي على 10 صفوف بداخله.
المستخدم طرح السؤال الخطأ ؛ " هل سيتغير الاداء اذا قمت بالتغير من قواعد البيانات InnoDB الى MyISAM " ؟
سيلا ( احد المبرمجين ) اعطت الجواب الاول ، تحويل التيبلات الى MyISAM لن يحل المشكله ستتفاقم فقط ، المستخدم سيمتلك ٣ تيبلات بدل واحد ، قد يختنق أي نظام تشغيل بمثل هذا العدد من الملفات المركزة في حفنة من المتغيرات والفنكشنات.
جوابي (يتحدث عن نفسه ) ركز على المنطقيه ، لقد اوضحت انه في حاله استعمال 10 مصفوفات ، الى عشرة جداول واضافه عامود لمعرف المستخدم للوصول اليه لاحقاً وتصدير الـ 40,000 جدول (تيبل) الى 10 عندما اوضحت ان اعادة التنظيم هذه ستحسن الاداء بشكل كبير ،
لكنها ستتطلب تغيير التطبيق ، حاول المستخدم الاحتجاج وطلب بعض الحلول الفضية(حلول اعجازيه).
ثم قمت بتسليم السطر المثقوب: "إن عملك ينمو ، ومع نموه ، فإنك تضيف جدولًا
جديدًا لكل مستخدم جديد. إذا واصلت على هذا النحو ، سيكون هناك العديد من الجداول سينهار نظام التشغيل الخاص بك. قاعدة بياناتك هي محكوم عليها بالفشل.
يبدو الأمر كما لو أخبرك طبيبك أنه إذا لم تقلع عن التدخين ، فسوف تموت في غضون ستة أشهر. نفس الشيء بالنسبة لقاعدة البيانات الخاصة بك. إذا لم تتوقف عن إنشاء الجداول ، فإن قاعدة البيانات الخاصة بك ستموت بشكل مزعج. توقف عن التدخين ، الآن !
لقد ترك ذلك انطباعًا كبيرًا لدى الجمهور!
احد اهم تحديثات php8.0 ، التي صدرت هي null safety، حسناً دعونا نناقشها جيداً .
عندما تقوم بأنشاء متغير ، وهذا المتغير انت تقوم بجلبه من ملف اخر ، وانت لاتعلم هل سيحتوي بيانات ؟ ام سيكون null بمعنى فارغ؟
هذا الامر اصبح يسبب صداع حقيقي ، على سبيل المثال انا لدي هذه الجلسه.
$session
وهذه الجلسه تحتوي كائن يدعى user.
وهذا اليوزر يحتوي على كائن info.
قبل php8.0 كنت اقوم بعمل التالي؛
انا يجب ان اتحقق من كل الكائنات (objects ) داخل الكائن الاساسي $session .
يبدو الامر بسيطاً لك ولكن ماذا لو كان لديكً اكثر من ١٥ كائن داخل الكائن الرئيسي ؟ هل من المنطق التحقق منهم بالصورة اعلاه؟ ستقوم بكتابه الشروط خمسة عشر مرة !
ولكن تم اصلاح هذا في php8.0 وكذلك في دارت الاصدار الثاني وفلاتر الاصدار الثاني .
ببساطه:
هذا السطر اختصر علي الكود اعلاه .
ليست صعبه انه مجرد تحقق ولكنها حقاً كانت مزعجه وتسبب الصداع في الاصدارات القديمه.
عندما تقوم بأنشاء متغير ، وهذا المتغير انت تقوم بجلبه من ملف اخر ، وانت لاتعلم هل سيحتوي بيانات ؟ ام سيكون null بمعنى فارغ؟
هذا الامر اصبح يسبب صداع حقيقي ، على سبيل المثال انا لدي هذه الجلسه.
$session
وهذه الجلسه تحتوي كائن يدعى user.
وهذا اليوزر يحتوي على كائن info.
قبل php8.0 كنت اقوم بعمل التالي؛
if ($session !== Null ) {
$user = $session->user;
if ($user !== null){
$info = $user->info;
if ($info !== null){
// commands
}
}
}
انا يجب ان اتحقق من كل الكائنات (objects ) داخل الكائن الاساسي $session .
يبدو الامر بسيطاً لك ولكن ماذا لو كان لديكً اكثر من ١٥ كائن داخل الكائن الرئيسي ؟ هل من المنطق التحقق منهم بالصورة اعلاه؟ ستقوم بكتابه الشروط خمسة عشر مرة !
ولكن تم اصلاح هذا في php8.0 وكذلك في دارت الاصدار الثاني وفلاتر الاصدار الثاني .
ببساطه:
$data = $session?->user?->info?->data;
هذا السطر اختصر علي الكود اعلاه .
ليست صعبه انه مجرد تحقق ولكنها حقاً كانت مزعجه وتسبب الصداع في الاصدارات القديمه.
ماذا لو ؟ استعمل الحاسوب 2 تيرا من الرام ، كم صفحه يمكن ان يفتح من متصفح كروم ؟
https://youtu.be/7iwgyzX-76g
https://youtu.be/7iwgyzX-76g
تنصيب بوت التمويل الي نتشر ملفه، 💗
تنصيب :
php8.0 + mysql8 + apache2 + redis + domain connect
• https://youtu.be/iOoBN_qfVA0
تنصيب :
php8.0 + mysql8 + apache2 + redis + domain connect
• https://youtu.be/iOoBN_qfVA0
قناة نشر دورة حول php MadelineProto ،
• تستطيع فعل كل شيء على التليكرام بهذه الدورة فقط .
• المتطلبات قبل مشاهدة الدورة تم شرحها في اول مقطع .
• https://www.tg-me.com/joinchat-RhDIwX8Fc_YUjKz6
• تستطيع فعل كل شيء على التليكرام بهذه الدورة فقط .
• المتطلبات قبل مشاهدة الدورة تم شرحها في اول مقطع .
• https://www.tg-me.com/joinchat-RhDIwX8Fc_YUjKz6
افضل موقع بالكرة الارضيه لنقل البيانات من اي جهاز الى اي جهاز ثاني ، بس افتح الموقع بالجهازين وحدد الي تريده وبلش نقل.
انسى شي اسمه usb لو فلاش ميموري.
• https://snapdrop.net
ارتب شي شفته خلال كل سنين تصفحي لعالم الانترنيت بكل صراحه.
سرعة نقل مقاربه لـ airdrop الي يعرفونه.
انسى شي اسمه usb لو فلاش ميموري.
• https://snapdrop.net
ارتب شي شفته خلال كل سنين تصفحي لعالم الانترنيت بكل صراحه.
سرعة نقل مقاربه لـ airdrop الي يعرفونه.