Mustafa Suleiman

249 نقاط السمعة
16.8 ألف مشاهدات المحتوى
عضو منذ
الشهادة مجانية في السنة الأولى فقط بالفعل. https://suar.me/Qqjeo تستطيع تثبيت شهادة Let's Encrypt بشكل مجاني، ابحث على اليوتيوب عن How to Install Free SSL Certificate on Namecheap
ما هي تلك الاستضافة وما هي الباقة الخاصة بك؟
لا يسير الأمر هكذا، الأمر يبدأ بتحديد سوق العمل الذي تريد العمل به ثم تفقد المطلوب به بالنسبة لمستوى خبرة معين.
لا حاجة إلى ذلك، من المفترض أنه يوجد شهادة SSL مجانية من خلال Let's Encrypt تقدمها أغلب الاستضافات حاليًا، تفقد من الدعم هل يوجد ذلك أم لا، فأنت لست بحاجة إلى شهادة مدفوعة والميزات الخاصة بها. وعامًة إن لم يتوفر ذلك تستطيع أنت تركيب الشهادة بنفسك أو بمساعدة الدعم إن كان ذلك متاح، وستجد شرح هنا: https://academy.hsoub.com/devops/servers/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AE%D8%AF%D9%85%D8%A9-let%E2%80%99s-encrypt-r352/ https://academy.hsoub.com/apps/web/wordpress/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D9%84%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-https-%D9%88-ssl-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r685/ https://academy.hsoub.com/devops/servers/%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-%D8%B4%D9%87%D8%A7%D8%AF%D8%A9-ssl-%D9%85%D8%AC%D8%A7%D9%86%D9%8A%D8%A9-%D8%B9%D8%A8%D8%B1-%D8%AE%D8%AF%D9%85%D8%A9-lets-encrypt-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r151/
إن كان الهدف هو تعلم مجال الويب إذن عليك تعلم جافاسكريبت فهي الأساس في ذلك المجال، ومن خلالها تستطيع التوسع لتعلم الواجهة الخلفية وبناء تطبيقات هواتف وأمور أخرى، ثم ستحتاج إلى تعلم مكتبة خاصة بالواجهة الأمامية مثل React وإطار Next.js المبني عليها. لذا عليك تحديد ما هو المجال الذي تريد تعلمه؟ أما إن كنت تريد تعلم أساسيات البرمجة ولديك وقت كافي للتعلم، فعليك إذن بلغة ذات مستوى منخفض أكثر مثل C++ لكن البعض يجدها صعبة في حال لم يكن لديك
ما تريده هو تعلم المطلوب في سوق العمل لديك لكن بناءًا على دراية مبنية على بحث وتفحص للوظائف التي تتطلب مستوى Junior فإن بحثت عن مجال Back-end أو Full-stack أو Front-End أو بحثت بإطار معين مثل لارافل و .NET. فستجد وظائف معروضة على مواقع مثل Indeed و LinkedIn ومواقع التوظيف الأخرى في بلدك، على أساس المطلوب في السوق تتعلم المهارات المطلوبة وليس العكس. وللعلم استهداف الشركات الصغيرة ليس بالأمر الجيد تفقد ما يتم طلبه من شركات جيدة لها وزن. عامًة
بالنسبة للهاتف ستحتاج إلى الطلب من المستخدمين السماح بإرسال إشعارات فورية push notifications لإبلاغ المستخدمين بالرسائل الجديدة أو الأنشطة المهمة. لكن عليك إدارة الإشعارات لكي لا تصبح مزعجة وأيضًا الإشعار بالأمور الهامة وفي أوقات محددة من اليوم يكون فيها المستخدمين في أوقات فراغهم. أيضًا إضافة ألعاب أو تحديات صغيرة لإبقاء المستخدمين مشغولين ومهتمين، أو تقديم نقاط أو مكافآت للمستخدمين الذين يبقون في الموقع لفترة أطول أو يشاركون بشكل أكبر، بالإضافة إلى ميزة مثل الشارات وقائمة أفضل الأعضاء وهكذا. بجانب توفير
السؤال غير واضح، ما هي اللغات والتقنيات المستخدمة في مشروعك؟ هل هي ووردبريس؟ ستحتاج إلى إضافة إذن للترجمة وستجد تفصيل شامل هنا: https://academy.hsoub.com/apps/web/wordpress/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D9%84%D8%AA%D8%B9%D8%B1%D9%8A%D8%A8-%D9%82%D9%88%D8%A7%D9%84%D8%A8-%D9%88%D8%A5%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r820/ إما إن كان الموقع يعتمد على جافاسكريبت، ستحتاج إذن لمكتبة مثل i18next وستجد تفصيل هنا: https://academy.hsoub.com/questions/27257-%D8%AA%D8%AD%D9%88%D9%8A%D9%84-%D8%A7%D9%84%D9%85%D9%88%D9%82%D8%B9-%D9%85%D9%86-%D8%B9%D8%B1%D8%A8%D9%8A-%D9%84%D9%84%D8%A5%D9%86%D8%AC%D9%84%D9%8A%D8%B2%D9%8A%D8%9F/?do=findComment&comment=84253
حاليًا لتصبح مطور React عليك تعلم Next.js وأيضًا تعلم Typescript فتلك هي المهارات المطلوبة في سوق العمل، لا يكفي أن تتعلم React فقط حاليًا. ومن خلال Next.js التي تعتمد على React ستجد أن عملية إنشاء الواجهة الخلفية سهلة ويتم إدارتها من قبل Next.js حيث يتم إنشاء الـ API's والربط مع قاعدة البيانات والأمر ليس بالصعب، تعلم الأساسيات التي تكفيك فقط بخصوص الواجهة الخلفية. ولا تقلق في الشركات في حال قمت بالتخصص في الواجهة الأمامية فقط وليس Full-stack فهناك مطور واجهة
فترة سنة هي فترة كبيرة، لذا أنت بحاجة إلى مراجعة نفس الدروس مرة أخرى بمشاهدتها بسرعة أعلى مثل 1.5 أو 2، ثم التوقف على الأمور التي أنت بحاجة إلى مراجعتها، ويجب التطبيق العملي أعد إنشاء نفس المشاريع مرة أخرى وذلك سيساعدك على استرجاع الكثير. الأمر ممل بالفعل، لكن المشكلة في البرمجة إن انقطعت فترة كبيرة في بدايات تعلمك فستنسى الكثير من الأشياء وخاصًة الأساسية منها، لذا أنت بحاجة إلى المراجعة من البداية والممارسة العملية على ما تعلمته وليس المشاهدة فقط
بشكل بديهي في البداية ستحتاج إلى تعلم بايثون والتعمق في اللغة نفسها وبناء مشاريع من خلالها قبل استخدام أي مكتبة أو إطار، وخاصًة تعلم الـ OOP. بعد ذلك عليك تعلم إطار أو مكتبة خاصة بتطوير الـ GUI أي واجهة المستخدم لتطبيقات سطح المكتب، ومنها: Tkinter وهي مكتبة قياسية مع بايثون، أي مدمجة في بايثون لكنها ليست متقدمة. PyQt أو PySide توفر أدوات غنية لتطوير واجهات مستخدم متقدمة. Kivy و wxPython مناسبة لتطوير تطبيقات تعمل على منصات متعددة. تعلم الأساسيات من
ذلك ممكن، الفكرة هي الإعتماد على موازن تحميل Load Balancer أو خوادم بروكسي عكسية Reverse Proxy Servers لتوجيه الطلبات إلى السيرفرات المختلفة حسب المسار في الرابط. فموازن التحميل يقوم بتوزيع الطلبات على الخوادم المختلفة من خلال قواعد تحددها، وتتوفر أدوات مثل NGINX أو HAProxy كموازن تحميل. بحيث تقوم بإعداد موازن التحميل لتوجيه الطلبات إلى السيرفرات المختلفة حسب المسار: الطلبات إلى a.com/m تذهب إلى سيرفر المجلة. الطلبات إلى a.com/q تذهب إلى سيرفر المتجر. الطلبات إلى a.com تذهب إلى السيرفر الرئيسي. أو
هل قمت بتعديل القيم التالية في ملف php.ini؟: upload_max_filesize = 2G post_max_size = 2G max_execution_time = 300 max_input_time = 300 أيضًا إعدادات .htaccess في حال تستخدم Apache: php_value upload_max_filesize 2G php_value post_max_size 2G php_value max_execution_time 300 php_value max_input_time 300 أما في حال استخدام خادم Nginx، فعليك تعديل إعدادات nginx.conf: client_max_body_size 2G; ثم قم بتعديل ملف wp-config.phpلإضافة القيم التالية إذا لم تكن مضافة: @ini_set('upload_max_filesize', '2G'); @ini_set('post_max_size', '2G'); @ini_set('max_execution_time', '300'); @ini_set('max_input_time', '300');
هل تظهر لديك عند تسجيل الدخول بحسابك كـ Admin؟ أم لا تظهر على الإطلاق. وهل عند تصفح الموقع من جهاز آخر تظهر الصفحة؟ حاول تعطيل الكاش أثناء عملية التطوير ثم تشغيله بعد الإنتهاء. بعد تعديل القالب بواسطة Elementor عليك النشر بالضغط على Publish، ثم من إعدادات ووردبريس، اختر المظهر appearance ثم تخصيص customize ثم اضغط على home page settings ثم اختر statice page ثم من القائمة المنسدلة Home page اختر اسم الصفحة التي تريد تعيينها للصفحة الرئيسية.
هل قمت بتكوين تفاصيل خادم SMTP بشكل صحيح؟ وهم: مضيف SMTP منفذ SMTP اسم المستخدم وكلمة المرور نوع التشفير (TLS/SSL) أيضًا تستطيع ضبط SMTPDebug بقيمة 2 للحصول على تفاصيل أكثر عن الخطأ. للتوضيح تلك هي الإعدادات التي يجب عليك ضبطها: $mail = new PHPMailer\PHPMailer\PHPMailer(); $mail->isSMTP(); $mail->SMTPDebug = 2; $mail->Host = 'smtp.host.com'; $mail->SMTPAuth = true; $mail->Username = 'username'; $mail->Password = 'password'; $mail->SMTPSecure = PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS; // أو PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_SMTPS $mail->Port = 587; // أو 465 لـ SSL، أو 25 لغير المشفر $mail->setFrom('from@gmail.com', 'Mailer');
ٌقم بتطبيق rate limiter مع ميكانيزم cache في الذاكرة in-memory. أي استخدم متغيرًا في الذاكرة لتخزين آخر وقت رفع صورة لكل مستخدم وقبل السماح للمستخدم برفع صورة جديدة، تحقق مما إن كان قد مر وقت كافٍ (مثل دقيقة واحدة) منذ آخر عملية رفع. أي نقوم بإنشاء متغير خارج الدالة كالتالي: const userLastUploadTime = {}; ثم داخل دالة الرفع نقوم بتخزين الوقت وأيضًا التحقق من مرور وقت معين مثل دقيقة: const currentTime = Date.now(); const lastUploadTime = userLastUploadTime[userId] || 0; if
من خلال PHPMailer عليك توليد توكن عند تسجيل الحساب من قبل المستخدم، وتخزين التوكن بجانب الإيميل الخاص به في قاعدة البيانات. ثم إرسال بريد تحقق إلى إيميل المستخدم به رابط يحتوي على ذلك التوكن، وعند الضغط عليه يتم التحقق من الإيميل. وإليك توضيح: require 'PHPMailer/PHPMailer.php'; $mail = new PHPMailer\PHPMailer\PHPMailer(true); $mail->setFrom('your_email@example.com', 'Your Name'); $mail->addAddress($user_email, $user_name); $mail->Subject = 'Verify Your Email Address'; $token = bin2hex(random_bytes(16)); // عليك كتابة كود لحفظ التوكن في قاعدة البيانات $verify_link = 'https://example.com/verify-email?token=' . $token; $mail->Body = 'Please
بخصوص PHP عليك الإعتماد على استضافات حديثة وليس الاستضافات القديمة، حيث يوجد لديك التالي فيما يخص توفير باقات مجانية: https://www.infinityfree.com/ https://fly.io/ https://vercel.com/ و Vercel للمشاريع الصغيرة فقط فهي غير مهيئة لمشاريع PHP بشكل خاص.
في البداية كلما زاد عدد المواضيع والمشاركات والملفات المرفقة، زادت صعوبة النقل، وربما لديك تختلف بنية قاعدة بيانات vBulletin عن WordPress، مما يتطلب تحويل البيانات وتنظيمها. وفي حال كان منتدى vBulletin يحتوي على ميزات إضافية مثل الإضافات أو التعديلات المخصصة، فقد تحتاج إلى إيجاد بدائل لها في WordPress. لذا ستحتاج إلى تصدير قاعدة البيانات إلى ملف CSV أو XML من خلال PHPmyadmin ثم استيرادها من خلال إضافة مثل Import any XML or CSV File to WordPress حيث ستمكنك من إختيار
وما الحاجة إلى تلك الاستضافة، تستطيع الإعتماد على الاستضافات التالية وبها خطة مجانية وهي أفضل بمراحل: https://pages.cloudflare.com https://vercel.com/ https://www.netlify.com/
للتخصيص أكثر ستحتاج إلى كتابة أكواد PHP، أي يجب تعلم أساسيات PHP لفعل ما تريد.
الأمر غير واضح من الصورة، اضغط على CTRL + SHIFT + J لفتح الكونسول بالمتصفح ورؤية الأخطاء التي تسبب عدم ظهور الصور.
حاول تعريف حالة في العميل لتتبع حالة الاتصال، مثل isConnected، وتحديث الحالة بناءًا على الأحداث connect و disconnect. وبدلاً من استخدام setTimeout لإعادة تحميل الصفحة مباشرة، قم بتعيين عدد محدد من محاولات إعادة الاتصال قبل إظهار رسالة الفشل وتحديث الصفحة. وإن كانت محاولات إعادة الاتصال تفشل، قم بتأخير إعادة تحميل الصفحة لبضع ثوانٍ لإعطاء المستخدم وقتًا لرؤية رسالة الفشل، وقبل تنفيذ location.reload(), تحقق من حالة isConnected للتأكد من أن الاتصال لم يُستعاد بالفعل. والإعتماد على الأحداث connect_error, connect_timeout, و error
هناك إضافة توفر ذلك منها mbstring وIntl لكن يجب تفعيلهم في PHP لكي تتمكن من استخدامهم. واستخدام دالة transliterate من mbstring كالتالي: <?php mb_internal_encoding('UTF-8'); echo transliterate('كلام عربي', 'ar-latin'); ?> أو دالة transliterate من Intl كالتالي: $text = 'كلام عربي'; $transliterated_text = transliterate($text, 'Any-Latin; Latin-ASCII; [^a-zA-Z]* remove'); echo $transliterated_text; // Output: kalam arabi أو استخدام مكتبة خارجية مثل ar-php https://github.com/khaled-alshamaa/ar-php او الإعتماد على دالة برمجية مُخصصة تؤدي تلك الوظيفة كالتالي: function arabic_to_latin($text) { $mapping = array( 'أ' => 'a', 'إ' =>
لتنفيذ ما تريد عليك بوضع الأداء الجيد في الإعتبار. فبدلاً من استخدام $("#lonline > div") لاختيار جميع عناصر الـ div داخل #lonline، استخدم استعلام CSS أكثر كفاءة مثل $("#lonline > div:nth-child(n+51)") لتحديد العناصر التي تبدأ من العنصر رقم 51. ثم استخدام دالة each لتطبيق الحذف على كل عنصر في xdel، لأن xdel سيعود لنا بكائن. <!DOCTYPE html> <html lang="ar"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>حذف عناصر div</title> <style> #lonline { display: flex; flex-wrap: wrap; } #lonline