أفضل طريقة للحصول على كلمة عشوائية لبرنامج نصي captcha في PHP

StackOverflow https://stackoverflow.com/questions/1216010

  •  06-07-2019
  •  | 
  •  

سؤال

أنا أعمل على برنامج نصي جديد لرمز التحقق وهو على وشك الانتهاء باستثناء أنني أرغب في الحصول على قائمة بالكلمات على سبيل المثال، لنفترض أن لدي قائمة مكونة من 300 كلمة مكونة من 5 أحرف أود استخدامها لنص صورة رمز التحقق.

ما هي أفضل طريقة للأداء على موقع ذو حركة مرور عالية للتعامل مع هذه القائمة؟

قراءة الكلمات من ملف نصي على كل تحميل
تخزين في صفيف
آخر؟

هل كانت مفيدة؟

المحلول

وباستخدام قائمة ثابتة من الكلمات يمكن أن تجعل كلمة التحقق الخاص ضعيفا لأنه يحد من عدد من الاختلافات إلى <م> ن فقط! / (<م> ن - <م> ك )! خيارات. مع ن = 300 كلمة و<م> ك = 2 كلمات مختلفة لكل كلمة التحقق سيكون فقط 89700 خيارات مهما طال الزمن الكلمات هي.

إذا كنت تستخدم سلسلة من أربعة أحرف عشوائية (من الألف إلى الياء) كنت الحصول على مزيد من الخيارات (بالضبط <م> ن ^ <م> ك = 26 ^ 4 = 456976).

نصائح أخرى

إذا كنت ترغب فقط 300 مائة كلمة للاختيار من بينها، كنت مجرد وضع كل منهم في صفيف في php مدونة على التوالي، وسحب واحد عشوائيا. ومن شأن ذلك أن يكون أفضل أداء.

أفضل خيار للأداء

  1. سيكون من الأفضل وضع قائمة بالأرقام العشوائية في الذاكرة (APC أو Memcache => google/stackoverflow search for APC أو Memcache) للحصول على أفضل أداء، لأن إدخال القرص هو ما سيجعل موقعك بطيئًا في معظم الأوقات.لهذا يجب أن يكون لديك صندوق به ذاكرة كافية (>= 128 ميجابايت) ويمكنك تثبيت البرنامج (APC/Memcache).إذا كنت تريد أداءً جيدًا على موقع ذو حركة مرور عالية، فيجب أن تكون على استعداد للدفع مقابل ذلك !!!

  2. إذا كنت تستخدم مزود استضافة مشتركًا (لكنك لن تحصل على أفضل أداء)، فمن الأفضل وضع الكلمات في مصفوفة في نفس الملف، لأن كل عبارة طلب ستجلب الملف من القرص.

إرجاع كلمة عشوائية

كما قال لاكي، يمكنك جلب رقم عشوائي، من خلال استدعاء دالة راند بسيطة

return ($words[rand(0, count($words)-1);

حيث $words هو المصفوفة التي تحتوي على كل الكلمات.

استضافة VPS

هذه بعض استضافة VPS الرخيصة التي وجدتها باستخدام Google، ولكن أعتقد أنه يجب عليك إجراء المزيد من البحث للعثور على أفضل استضافة VPS لموقعك عالي الأداء.

وبدلا من 300 كلمة، يمكنك ببساطة توليد رقم عشوائي وعرض ذلك. لا حاجة للحصول على قائمة، أو تحميل قائمة، أو إدارة القائمة، ....

كم عدد عمليات تسجيل الدخول في الثانية لا تحتاج إلى التعامل؟ هذا لا يبدو وكأنه المكان المناسب لقضاء بعض الوقت في التحسين. مجرد عن أي طريقة تجد ينبغي أن تكون كلمة عشوائية على ما يرام، خاصة إذا قائمة كلامك هو فقط 300 كلمة.

وكنت أبدأ مع على بسيطة ملف النص، كلمة واحدة في كل سطر، ومجرد القيام بشيء بسيط مثل

$words = file("wordlist.txt");
return ($words[rand(0, count($word)-1);

ووإلا إذا ثبت حقا أن يكون عنق الزجاجة وأود أن تغييره للقيام fseek العشوائي () أو بعض أخرى "عالية الأداء" خدعة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top