אחת השגיאות הנפוצות ביותר בעבודה עם PHP היא מחסור בזכרון:
PHP Fatal Error: Allowed Memory Size Exhausted
הטעות נובעת מכך שהקוד טוען לזכרון יותר ממה שמוגדר לתהליך אחד בPHP.
להלן טבלה שמתרגמת את המספרים בקוד השגיאה למשהו מובן יותר:
- PHP: Fatal Error: Allowed Memory Size of 8388608 Bytes Exhausted – 8 MB
- PHP: Fatal Error: Allowed Memory Size of 16777216 Bytes Exhausted – 16 MB
- PHP: Fatal Error: Allowed Memory Size of 33554432 Bytes Exhausted – 32 MB
- PHP: Fatal Error: Allowed Memory Size of 67108864 Bytes Exhausted – 64 MB
- PHP: Fatal Error: Allowed Memory Size of 134217728 Bytes Exhausted – 128 MB
- PHP: Fatal Error: Allowed Memory Size of 268435456 Bytes Exhausted – 256 MB
- PHP: Fatal Error: Allowed Memory Size of 536870912 Bytes Exhausted – 512 MB
- PHP: Fatal Error: Allowed Memory Size of 1073741824 Bytes Exhausted – 1 GB
מה אפשר לעשות? הדרך הקלה היא כמובן להגדיל את הזכרון המוקצע לתהליך ברמת השרת. אם יש גישה לקובץ הPHP.INI אפשר לשנות שם את הפרמטרים בהתאם. לא תמיד אפשרי בשרת שיתופי. ולא רצוי להגדיל מאד את הערכים האלו בשרתי production. אפשרות בטוחה יותר היא להגדיל את הזכרון באופן זמני רק למשך הזמן שהקוד שלנו ירוץ. באופן הבא:
<?php
ini_set('memory_limit', '1024M'); // or you could use 1G
מומלץ במקביל לנסות להוריד את השימוש בזכרון בקוד:
- בקריאה מתוך קובץ, עדיף לקרוא שורה שורה במקום לקרוא את כל הקובץ בבת אחת לזכרון (fgets).
- עדכון גירסאת הPHP לגירסא מתקדמת וחסכונית יותר.
- הסרת קריאות לספריות שלא בשימוש.
שגיאה נפוצה נוספת:
Fatal error: Maximum execution time of
גם כאן ניתן להגדיר בקוד שינוי זמני:
ini_set('max_execution_time', '300');
(300 שניות = 5 דקות)