مجرد حل بسيط لمصادقة المستخدم داخل إطار عمل بسيط للغاية يعمل خارج الصندوق (ويأتي مع أداة تثبيت تلقائية)، باستخدام تنفيذ تجزئة/تمليح كلمة مرور bcrypt الرسمية المقاومة للمستقبل لـ PHP 5.5+، بالإضافة إلى بعض الميزات الرائعة التي من شأنها تسريع الوقت من الفكرة إلى أول تطبيق نموذجي قابل للاستخدام بشكل كبير. لا شيء أكثر. يركز هذا المشروع على البساطة المتشددين. كل شيء بسيط قدر الإمكان، ومصمم للمشاريع الصغيرة، وعمل الوكالة النموذجي والمسودات السريعة. إذا كنت ترغب في إنشاء تطبيقات مؤسسية ضخمة مع جميع الميزات التي تتمتع بها أطر العمل الحديثة، فقم بإلقاء نظرة على Laravel أو Symfony أو Yii، ولكن إذا كنت تريد فقط إنشاء شيء يعمل بسرعة، فقد يكون هذا البرنامج النصي مثيرًا للاهتمام بالنسبة لك.
تم استلهام بنية HUGE البسيطة قدر الإمكان من العديد من المحادثات الجماعية والشرائح والمقالات حول التطبيقات الضخمة التي - بشكل مفاجئ ومتعمد - تعود إلى أساسيات البرمجة، باستخدام البرمجة الإجرائية، والفئات الثابتة، والبنيات البسيطة للغاية، وليس الجافة تمامًا التعليمات البرمجية وما إلى ذلك مع الحفاظ على التعليمات البرمجية سهلة القراءة للغاية (StackOverflow، Wikipedia، SoundCloud).
بعض الكلمات الطنانة المثيرة للاهتمام في هذا السياق: KISS، YAGNI، Features Creep، الحد الأدنى من المنتج القابل للتطبيق.
للحفاظ على هذا المشروع مستقرًا وآمنًا ونظيفًا وفي الحد الأدنى، قررت تقليل تطوير HUGE إلى الحد الأدنى. لا تقلق، فهذا في الواقع أمر جيد: عادةً ما تعني الميزات الجديدة أخطاء جديدة، والكثير من الاختبارات، والإصلاحات، وعدم التوافق، وبالنسبة لبعض الأشخاص، حتى الضغط الشديد على التحديث. نظرًا لأن برنامج HUGE عبارة عن برنامج نصي بالغ الأهمية للأمان، فإن الميزات الجديدة ليست بنفس أهمية النواة المستقرة والآمنة، ولهذا السبب يستخدمه الأشخاص. هذا يعنى:
ولكي أكون صادقًا، فإن الحفاظ على إطار العمل مجانًا في أوقات فراغي النادرة ليس أيضًا ما أريد القيام به بشكل دائم. :)
أخيرًا ملاحظة صغيرة: لقد تطور عالم PHP بشكل كبير، فلدينا أطر عمل ممتازة ذات ميزات رائعة وفرق عمل محترفة كبيرة، ووثائق مكتوبة بشكل جيد جدًا ومجتمعات كبيرة، لذلك ببساطة لا يوجد سبب لبذل الكثير من العمل في إطار عمل آخر. بدلاً من ذلك، يرجى الالتزام بالأطر الشائعة، وسيكون لعملك تأثير أكبر بكثير وسيستخدمه عدد أكبر بكثير من الأشخاص!
شكرا للجميع حول هذا المشروع، أتمنى لكم وقتا رائعا! اكس او اكس او، كريس
بالعودة إلى عام 2010/2011، لم تكن هناك حلول تسجيل دخول مفيدة في عالم PHP، على الأقل ليس بالنسبة لغير الخبراء. لذلك ارتكبت أسوأ خطأ يرتكبه أي مطور شاب: محاولة بناء شيء ما بنفسي دون أن يكون لدي أي فكرة عن أساسيات الأمان. وما جعل الأمر أسوأ هو أن الويب كان (ولا يزال) مليئًا بالبرامج التعليمية المعطلة تمامًا حول بناء أنظمة مصادقة المستخدم، حتى أكبر الشركات في العالم ارتكبت هذا الخطأ تمامًا (نحن نتحدث عن SONY وLinkedIn وAdobe هنا)، و كما أن الكثير من الإطارات الرئيسية في جميع لغات البرمجة الكبيرة (!) تستخدم تقنيات حفظ كلمات مرور قديمة وغير آمنة تمامًا.
ومع ذلك، في عام 2012، نشر خبير الأمان أنتوني فيرارا مكتبة PHP صغيرة، مما يسمح بتجزئة كلمات المرور الآمنة والحديثة والصحيحة للغاية في PHP 5.3 و5.4، والتي يمكن استخدامها من قبل كل مطور دون أي ضغوط ودون أي معرفة بالجوانب الأمنية الداخلية. كان النص رائعًا جدًا لدرجة أنه تمت كتابته في جوهر PHP 5.5، وهو المعيار الفعلي هذه الأيام.
عندما ظهر ذلك، حاولت استخدام هذه المكتبة المجردة لبناء نظام تسجيل دخول جاهز للعمل بشكل كامل للعديد من المشاريع الخاصة والتجارية، ووضع الكود على GitHub. وجد الكثير من الأشخاص هذا مفيدًا، وساهموا في المشروع وأصلحوا الأخطاء، وقاموا بإنشاء شوكات، وإصدارات أصغر وأكبر. والنتيجة هي هذا المشروع.
يرجى ملاحظة: الآن، في عام 2015، تتمتع معظم الأطر الرئيسية بمنطق مصادقة مستخدم ممتاز مضمن افتراضيًا. ولم يكن هذا هو الحال منذ سنوات مضت. لذا، من وجهة نظر اليوم، قد يكون من الأفضل اختيار Laravel أو Yii أو Symfony للمشاريع الجادة. لكن لا تتردد في تجربة برنامج ضخم، حيث سيقوم برنامج التثبيت التلقائي بتشغيل عملية تثبيت كاملة للعمل خلال دقائق وبدون أي تكوين.
ولماذا اسم "ضخم"؟ إنه مزيج رائع بين TINY وMINI وMINI2 وMINI3، وهي بعض من مشاريعي القديمة الأخرى. أطر عمل صغيرة جدًا للتطوير السريع والبسيط للغاية لمواقع الويب البسيطة.
شاهد عرضًا توضيحيًا مباشرًا للإصدار 3.0 الأقدم هنا وphpinfo() الخاص بالخادم هنا.
هناك الكثير من العمل وراء هذا المشروع. قد أوفر لك مئات، وربما آلاف ساعات العمل (احسب ذلك في تكاليف المطور). لذا، عندما تكسب المال عن طريق استخدام خدمات ضخمة، كن عادلاً وأرجع شيئًا ما إلى المصادر المفتوحة. HUGE مجاني تمامًا للاستخدام الخاص والتجاري.
ادعم المشروع عن طريق استئجار خادم في DigitalOcean أو مجرد تقديم القهوة على موقع BuyMeACoffee.com. شكرًا! :)
لا تتردد أيضًا في المساهمة في هذا المشروع.
مرخص تحت معهد ماساتشوستس للتكنولوجيا. مجاني تمامًا للمشاريع الخاصة أو التجارية.
تأكد من أنك تعرف أساسيات البرمجة الشيئية وMVC، وأنك قادر على استخدام سطر الأوامر وأنك استخدمت Composer من قبل. هذا البرنامج النصي ليس للمبتدئين.
يو، أوتوماتيكي بالكامل. لماذا ؟ لأنني كنت أكره دائمًا قضاء أيام في محاولة معرفة كيفية تثبيت شيء ما. هذا سيوفر لك الكثير من الوقت والأعصاب. تبرع بالقهوة إذا كنت ترغب في ذلك.
إذا كنت تستخدم Vagrant لتطويرك، فببساطة
vagrant box add ubuntu/trusty64
vagrant up
في هذا المجلد.بعد 5 دقائق، سيكون لديك برنامج ضخم مثبت بالكامل داخل Ubuntu 14.04 LTS. ستتم مزامنة الرمز الكامل تلقائيًا مع المجلد الحالي. تم تعيين كلمة مرور جذر MySQL وكلمة مرور جذر PHPMyAdmin على 12345678 . بشكل افتراضي، 192.168.33.111 هو عنوان IP الخاص بجهازك الجديد.
تثبيت بسيط للغاية في خادم Ubuntu 14.04 LTS النموذجي الجديد:
قم بتنزيل البرنامج النصي للتثبيت
wget https://raw.githubusercontent.com/panique/huge/master/_one-click-installation/bootstrap.sh
اجعلها قابلة للتنفيذ
chmod +x bootstrap.sh
تشغيله! امنحها بعض الدقائق لأداء جميع المهام. ونعم، يمكنك أن تشكرني في وقت لاحق :)
sudo ./bootstrap.sh
Composer install
على المجلد الجذر للتطبيق لتثبيت التبعيات"البريد الإلكتروني لا يعمل" ؟ راجع استكشاف الأخطاء وإصلاحها أدناه. المهام
هذه مجرد إرشادات سريعة لإعداد بيئة التطوير بسهولة!
تأكد من تثبيت Apache وPHP 5.5+ وMySQL. البرنامج التعليمي هنا. سيعمل Nginx بالتأكيد أيضًا، ولكن لا تتوفر إرشادات التثبيت حتى الآن.
قم بتحرير vhost لجعل عناوين URL النظيفة ممكنة وتوجيه كل حركة المرور إلى المجلد/public لمشروعك:
sudo nano /etc/apache2/sites-available/000-default.conf
وجعل الملف يبدو
<VirtualHost *:80>
DocumentRoot "/var/www/html/public"
<Directory "/var/www/html/public">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
قم بتمكين mod_rewrite وأعد تشغيل Apache.
sudo a2enmod rewrite
service apache2 restart
تثبيت cur (مطلوب لاستخدام git)، وopensl (مطلوب للاستنساخ من GitHub، حيث أن github هو https فقط)، وPHP GD، وgraph lib (نقوم بإنشاء رموز التحقق والصور الرمزية)، وgit.
sudo apt-get -y install curl
sudo apt-get -y install php5-curl
sudo apt-get -y install openssl
sudo apt-get -y install php5-gd
sudo apt-get -y install git
git clone ضخم
sudo git clone https://github.com/panique/huge " /var/www/html "
تثبيت الملحن
curl -s https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
انتقل إلى مجلد المشروع، وقم بتحميل حزم Composer (--dev اختياري، أنت تعرف الصفقة)
cd /var/www/html
composer install --dev
تنفيذ عبارات SQL. عبر phpmyadmin أو عبر سطر الأوامر على سبيل المثال. 12345678 هو مثال لكلمة المرور. لاحظ أن هذا مكتوب بدون مسافة.
sudo mysql -h " localhost " -u " root " " -p12345678 " < " /var/www/html/application/_installation/01-create-database.sql "
sudo mysql -h " localhost " -u " root " " -p12345678 " < " /var/www/html/application/_installation/02-create-table-users.sql "
sudo mysql -h " localhost " -u " root " " -p12345678 " < " /var/www/html/application/_installation/03-create-table-notes.sql "
اجعل مجلد الصورة الرمزية قابلاً للكتابة (تأكد من أنه المسار الصحيح!)
sudo chown -R www-data " /var/www/html/public/avatars "
إذا لم ينجح هذا بالنسبة لك، فيمكنك تجربة الطريقة الصعبة عن طريق الإعداد بدلاً من ذلك
sudo chmod 0777 -R " /var/www/html/public/avatars "
قم بإزالة الملف التجريبي الافتراضي لـ Apache
sudo rm " /var/www/html/index.html "
قم بتحرير تكوين التطبيق في application/config/config.development.php وأدخل بيانات اعتماد قاعدة البيانات الخاصة بك.
الجزء الأخير (غير مطلوب للاختبار الأول): قم بتعيين بيانات اعتماد SMTP الخاصة بك في نفس الملف وقم بتعيين EMAIL_USE_SMTP على true، حتى تتمكن من إرسال رسائل البريد الإلكتروني المناسبة. يوصى بشدة باستخدام SMTP لإرسال البريد! لن يعمل الإرسال الأصلي عبر mail() الخاص بـ PHP في كل الحالات تقريبًا (حظر البريد العشوائي). أنا أستخدم SMTP2GO.
ثم تحقق من IP / المجال الخاص بالخادم الخاص بك. كل شيء يجب أن يعمل بشكل جيد.
هذا إعداد NGINX لم يتم اختباره. يرجى التعليق على التذكرة إذا كنت ترى مشاكل.
server {
# your listening port
listen 80;
# your server name
server_name example.com;
# your path to access log files
access_log /srv/www/example.com/logs/access.log;
error_log /srv/www/example.com/logs/error.log;
# your root
root /srv/www/example.com/public_html;
# huge
index index.php;
# huge
location / {
try_files $uri /index.php?url=$uri&$args;
}
# your PHP config
location ~ .php$ {
try_files $uri = 401;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
شكرًا جزيلاً لـ razuro على هذا الإعداد الجيد: ضع هذا داخل المجلد الجذر، ولكن لا تضع أي web.config في مجلدك العام.
<?xml version="1.0" encoding="UTF-8"?><configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Imported Rule 1" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="public/index.php?url={R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
ابحث عن التذكرة الأصلية هنا.
بشكل افتراضي، هناك مستخدمان تجريبيان، مستخدم عادي ومستخدم مسؤول. لمزيد من المعلومات حول ذلك، يرجى إلقاء نظرة على جزء دور المستخدم من كتلة التوثيق الصغيرة داخل هذا الملف التمهيدي.
المستخدم العادي: اسم المستخدم هو demo2
وكلمة المرور هي 12345678
. تم تنشيط المستخدم بالفعل. المستخدم المسؤول (يمكنه حذف وتعليق المستخدمين الآخرين): اسم المستخدم demo
، وكلمة المرور هي 12345678
. تم تنشيط المستخدم بالفعل.
هناك العديد من الملفات في المجلد الجذر للمشروع والتي قد تكون مزعجة:
README و CHANGELOG يشرحان أنفسهما.
هناك توثيق حقيقي قيد الإعداد. حتى ذلك الحين، يرجى إلقاء نظرة على الكود واستخدام ميزات إكمال الكود في IDE الخاص بك للحصول على فكرة عن كيفية عمل الأشياء، وهذا واضح تمامًا عندما تنظر إلى ملفات وحدة التحكم وملفات النماذج وكيفية عرض البيانات في ملفات العرض. نأسف بشدة لعدم وجود توثيق حتى الآن، ولكن الوقت نادر ونحن جميعًا نفعل ذلك مجانًا في أوقات فراغنا :)
يوجد حاليًا نوعان من المستخدمين: المستخدمون العاديون والمسؤولون. هناك نفس الشيء بالضبط، ولكن...
يمكن للمستخدمين الإداريين حذف وتعليق المستخدمين الآخرين، ولديهم زر إضافي "المسؤول" في التنقل. لدى المستخدمين الإداريين قيمة 7
داخل حقل جدول قاعدة البيانات user_account_type
. لا يمكنهم ترقية حساباتهم أو الرجوع إلى إصدار سابق منها (لأن هذا لن يكون منطقيًا).
لا يمتلك المستخدمون العاديون ميزات إدارية بالتأكيد. لكن يمكنهم ترقية حساباتهم أو الرجوع إلى إصدار سابق منها (جرب ذلك عبر /user/changeUserRole)، وهو في الأساس تطبيق فائق البساطة لمفهوم المستخدم الأساسي/المستخدم المميز. لدى المستخدمين العاديين قيمة 1
أو 2
داخل حقل جدول قاعدة البيانات user_account_type
. بشكل افتراضي، جميع المستخدمين المسجلين الجدد هم مستخدمون عاديون مع دور المستخدم 1 بالتأكيد.
راجع قسم "الاختبار مع المستخدمين التجريبيين" في هذا الملف التمهيدي لمزيد من المعلومات.
هناك أيضًا طلب سحب مثير للاهتمام للغاية لإضافة أدوار المستخدم وأذونات المستخدم، وهو غير مدمج في المشروع لأنه متقدم ومعقد للغاية. ولكن، قد يكون هذا هو بالضبط ما تحتاجه، لا تتردد في المحاولة.
لمنع هجمات CSRF، تقوم HUGE بذلك بالطريقة الأكثر شيوعًا، وذلك باستخدام رمز الأمان عندما يرسل المستخدم النماذج المهمة. هذا يعني: عندما تعرض PHP نموذجًا للمستخدم، يضع التطبيق "سلسلة عشوائية" داخل النموذج (كحقل إدخال مخفي)، يتم إنشاؤها عبر Csrf::makeToken() (application/core/Csrf.php)، والتي يحفظ أيضًا هذا الرمز المميز في الجلسة. عند إرسال النموذج، يتحقق التطبيق مما إذا كان طلب POST يحتوي بالضبط على رمز النموذج الموجود داخل الجلسة.
يتم حاليًا تنفيذ ميزة منع CSRF هذه في عملية نموذج تسجيل الدخول (انظر application/view/login/index.php ) وعملية نموذج تغيير اسم المستخدم (انظر application/view/user/editUsername.php )، ومعظم النماذج الأخرى ليست أمنية- حرجة ويجب أن تظل بسيطة قدر الإمكان.
لذا، للقيام بذلك باستخدام نموذج عادي، ببساطة: في النموذج الخاص بك، قبل زر الإرسال، ضع: <input type="hidden" name="csrf_token" value="<?= Csrf::makeToken(); ?>" />
بعد ذلك، في إجراء وحدة التحكم، تحقق من صحة رمز CSRF المقدم مع النموذج عن طريق القيام بما يلي:
// check if csrf token is valid
if (!Csrf::isTokenValid()) {
LoginModel::logout();
Redirect::home();
exit();
}
شكراً جزيلاً لعمر الجابري على تنفيذ ذلك!
نظرياً: نعم، لكن هذه الخاصية لم تنجح في اختباراتي. نظرًا لأنها ميزة خارجية، يرجى إلقاء نظرة على التذكرة المناسبة لمعرفة المزيد.
هناك بعض الميزات الرائعة أو أفكار الميزات التي أنشأها أشخاص رائعون، ولكن هذه الميزات ذات أهمية خاصة جدًا بحيث لا يمكن التطرق إليها في الإصدار الرئيسي من HUGE، ولكن قم بإلقاء نظرة على هذه التذاكر إذا كنت مهتمًا:
كانت فكرة هذا المشروع هي توفير تطبيق بسيط للغاية مع نظام مصادقة مستخدم كامل بداخله يعمل بشكل جيد ومستقر. نظرًا لطبيعة هذا البرنامج النصي المتعلقة بالأمان بشكل كبير، فإن أي تغييرات تعني الكثير من العمل، والكثير من الاختبارات، وحالات الالتقاط المتطورة وما إلى ذلك، وفي النهاية قضيت 90٪ من الوقت في اختبار وإصلاح الميزات الجديدة أو الميزات الجديدة المعطلة الأشياء، والقيام بذلك ليس حقًا ما يريد أي شخص القيام به مجانًا في أوقات الفراغ النادرة :)
للحفاظ على المشروع مستقرًا ونظيفًا وقابلاً للصيانة، أود أن أعلن عن "النهاية الأولية للحياة" لهذا المشروع، وهذا يعني:
أ. لن تحصل شركة HUGE على أي ميزات جديدة في المستقبل، ولكن... ب. سيتم إجراء إصلاحات الأخطاء والتصحيحات، ربما لسنوات
بينما كان برنامج HUGE قيد التطوير، كانت هناك 3 قواعد رئيسية ساعدتني (وربما ساعدني الآخرون) في كتابة كود بسيط ونظيف وعملي. قد يكون مفيدًا لك أيضًا:
كما هو مذكور في مقدمة هذا الملف التمهيدي، هناك أيضًا بعض المفاهيم القوية التي قد تساعدك عند تطوير أشياء رائعة: KISS، وYAGNI، وFeature Creep، والحد الأدنى من المنتج القابل للتطبيق.
لتجنب العمل غير الضروري لنا جميعًا، أود أن أوصي الجميع باستخدام برنامج HUGE لمشروع بسيط يحتاج فقط إلى الميزات الموجودة بالفعل، وإذا كنت حقًا بحاجة إلى بنية RESTful، وعمليات الترحيل، والتوجيه، والمصادقة الثنائية، وما إلى ذلك، فهذا أسهل وأنظف وأكثر أسرع في استخدام Laravel أو Symfony أو Zend.
ومع ذلك، إليك الميزات المحتملة التي اقترحها المجتمع، المأخوذة من الكثير من التذاكر. لا تتردد في تنفيذها في شوك المشروع الخاص بك:
كان هناك منتديان (!) لدعم الإصدارين 1 و2 من هذا المشروع (ضخم هو الإصدار 3)، وكلاهما تم تخريبهما من قبل أشخاص لم يقرؤوا حتى الملف التمهيدي و/أو إرشادات التثبيت. كان السؤال الأكثر طرحًا هو "البرنامج النصي لا يعمل، الرجاء المساعدة" دون تقديم أي معلومات مفيدة (مثل الكود أو إعداد الخادم أو حتى الإصدار المستخدم). أثناء كتابتي لهذه السطور، سألني أحدهم عبر Twitter "كيفية التثبيت بدون Composer". أنت تعرف ما أعنيه :) - 99% من الأسئلة لم تكن ضرورية لو كان الأشخاص قد قرأوا الإرشادات، أو أجروا الحد الأدنى من البحث بأنفسهم، أو توقفوا عن جعل الأمور معقدة بشكل غير ضروري. وحتى عند كتابة إجابات مفصلة، فإن معظمهم ما زالوا يفسدون الأمر، مما يؤدي إلى الصراخ والشكاوى (للدعم المجاني لبرنامج مجاني!). لقد كان من المحبط التعامل مع هذا كل يوم، خاصة عندما يعتبر الناس أنه من المسلم به تمامًا أنه من واجب مطوري المصادر المفتوحة تقديم دعم مفصل ومجاني وشخصي لكل طلب "مساعدة من فضلك".
لذلك قررت إيقاف أي دعم مجاني تمامًا. إذا كانت لديك أسئلة جادة حول المشكلات الحقيقية داخل البرنامج النصي، فيرجى استخدام ميزة مشكلات GitHub.
كلمات قاسية، ولكن بما أن كل مشروع إنترنت عام يتعرض للمضايقة والتخريب والتصيد هذه الأيام من قبل أشخاص غريبين جدًا، فمن الضروري: بعض القواعد البسيطة.
احترم أن هذا مجرد نص بسيط كتبه متطوعين بدون أجر في أوقات فراغهم. هذا ليس برنامج أعمال اشتريته بمبلغ 10.000 دولار. لا يوجد سبب للشكوى (!) من البرامج المجانية مفتوحة المصدر. إن الموقف ضد البرمجيات الحرة محبط للغاية هذه الأيام، فالناس يأخذون كل شيء كأمر مسلم به دون أن يدركوا العمل الذي يقف وراءه، وحقيقة أنهم يحصلون على برامج جادة مجانًا تمامًا، مما يوفر آلاف الدولارات. إذا كنت لا تحب ذلك، فلا تستخدمه. إذا كنت تريد ميزة ما، فحاول المشاركة في هذه العملية، وربما قم بإنشائها بنفسك وإضافتها إلى المشروع! كن لطيفًا ومحترمًا. النقد البناء هو بالتأكيد موضع ترحيب دائما!
لا تهاجم، لا تكره، لا ترسل بريدًا عشوائيًا، لا تخرب. من فضلك لا تطلب دعمًا شخصيًا مجانيًا، ولا تسأل عما إذا كان بإمكان شخص ما القيام بعملك نيابةً عنك. قبل أن تسأل شيئًا ما، تأكد من قراءة README، واتباع كل برنامج تعليمي، والتحقق مرة أخرى من الكود، وحاول حل المشكلة بنفسك.
سيحصل المتصيدون والأشخاص المزعجون للغاية على حظر / حظر دائم. لدى GitHub فريق قوي جدًا لمكافحة إساءة الاستخدام.
يرجى الالتزام فقط في فرع التطوير . سيحتوي الفرع الرئيسي دائمًا على الإصدار الثابت.
Scrutinizer (الفرع الرئيسي)، Scrutinizer (فرع التطوير)، Code Climate، Codacy، SensioLabs Insight.
نظرًا للعواقب المحتملة عند نشر خطأ ما في مشروع عام مفتوح المصدر، أرجو منك إرسال الأخطاء الكبيرة حقًا إلى عنوان بريدي الإلكتروني، وعدم نشرها هنا. إذا لم يكن الخطأ مثيرًا للاهتمام للمهاجمين: فلا تتردد في إنشاء مشكلة GitHub عادية.
راجع المشكلات النشطة هنا: https://github.com/panique/huge/issues?state=open
مشكلة مثيرة للاهتمام: عندما يزور أحد المستخدمين موقع الويب الخاص بك، سيطلب متصفح المستخدم أيضًا رمزًا مفضلاً واحدًا أو أكثر (!) (بأحجام مختلفة). إذا لم تكن هذه الملفات الثابتة موجودة، فسيبدأ تطبيقك في إنشاء استجابة 404 وصفحة 404 لكل ملف. وهذا يهدر الكثير من طاقة الخادم كما أنه عديم الفائدة، لذلك تأكد من أن لديك دائمًا أيقونات مفضلة أو تتعامل مع هذا من مستوى Apache/nginx.
يحاول HUGE التعامل مع هذا عن طريق إرسال صورة فارغة في رأس الملف view/_templates/header.php!
المزيد داخل هذه التذكرة: قم بإرجاع 404 الصحيح لفقدان favicon.ico والصور المفقودة وما إلى ذلك.
المزيد هنا على Stackflow: كيفية منع طلبات favicon.ico؟ أليس من السخافة أن يتطلب رمز مفضل صغير طلب HTTP آخر؟ كيفية جعل المفضلة تذهب إلى العفريت؟.
أنا أيضًا أقوم بالتدوين في Dev Metal .