ما هو الحد الأعلى لطول السلسلة في PHP؟
Query:
هل يمكنك تسليط الضوء على حدود سعة تخزين السلسلة في PHP؟ لقد حاولت قياسه ولكني غير متأكد مما إذا كانت ذاكرة النظام (2 جيجابايت) كافية للاختبار. هل هناك سقف محدد مسبقا؟ ما هي الإجراءات التي تحدث عندما تتجاوز سلسلة ما هذا الحد - تسلسل أم خطأ؟
الاستجابة:
وفقًا لوثائق PHP.net، تم إلغاء قيود طول السلسلة في PHP 7.0.0 للبنيات 64 بت. بالنسبة للإصدارات 32 بت والإصدارات السابقة، يمكن أن يصل الحد الأقصى لحجم السلاسل إلى 2 جيجابايت (2147483647 بايت).
في PHP 5.x، كانت السلاسل مقيدة بـ 231-1 بايت لأن تتبع التعليمات البرمجية الداخلية طولها في عدد صحيح موقّع 32 بت.
إضافي الاعتبارات:
يمكنك تحميل محتويات الملف بالكامل باستخدام وظائف مثل file_get_contents(). ومع ذلك، فإن تخصيص الذاكرة الإجمالي لبرنامج PHP النصي لجميع المتغيرات يحد من طول متغيرات السلسلة الفردية.
توجيه حد الذاكرة:
يقوم توجيه Memory_limit في ملف التكوين php.ini بتعيين هذا حد. الافتراضي هو 128 ميجابايت في PHP 5.2 و8 ميجابايت في الإصدارات السابقة.
إذا لم يتم تعيين Memory_limit في php.ini، فسيتم تعيينه افتراضيًا على القيمة المترجمة في PHP الثنائي، والتي يمكن تعديلها عن طريق إعادة ترجمة PHP باستخدام افتراضي مخصص .
يؤدي تعيين Memory_limit إلى -1 في php.ini إلى تعطيل التحقق ويسمح للبرنامج النصي الخاص بك باستخدام أكبر قدر من الذاكرة التي يخصصها نظام التشغيل. (لا يزال يخضع لقيود عملية وقيود خاصة بالنظام).
مثال اختبار:
يوضح الكود التالي كيفية اختبار استخدام الذاكرة وحدود تخصيص السلسلة:
// Limit memory usage to 1MB
ini_set('memory_limit', 1024*1024);
// Basic operation uses about 768KB
printf("memory: %d\n", memory_get_usage(true));
$str = str_repeat('a', 255*1024);
echo "Allocated string of 255KB\n";
// All 1MB of memory has been allocated
printf("memory: %d\n", memory_get_usage(true));
// Exceeding the limit causes a fatal error
$str = str_repeat('a', 256*1024);
echo "Allocated string of 256KB\n";
printf("memory: %d\n", memory_get_usage(true));
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3