Php помилка fatal error
Взяв хостинг найдешевший на unihost.com, залив онлайн гру - все працювало з 128МБ ОЗУ. Потім при зверненні до php файлу, який відповідає за зв'язок з БД MySQL отримав помилку:
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 43 bytes) in /var/www/user/data/www/site.ru/GameEngine/Database/db_MYSQL.php on line 2986 (Сьогодні перейшов на хостинг з 256Мб , не допомогло ;-( )
Як вирішити проблему? Чи варто переходити на хостинг з 384Мб ОЗУ?
Ось функція в якій відбувається помилка:
Як нескладно здогадатися, веб додаток витрачає всю пам'ять, доступну на віртуальному сервері. Подивившись на наведений вами код, стає ясно, що помилка відбувається при спробі перенести результат запиту до таблиці БД в оперативну пам'ять на сервері. Очевидно, вибірка зачіпає величезну кількість записів (сумарний обсяг інформації в яких = 268435456/1024/1024 = 256Мб.). Є кілька виходів: обмежувати кількість порушених запитом записів з таблиці (LIMIT, WHERE і т.д) або ж завести сервер з великим запасом ОЗУ. Переважно перший варіант, т.к в майбутньому ви убезпечите себе від виникнення подібної проблеми. Та й взагалі, потрібно стежити за подібними речами ..
Тут ось, наприклад, один тільки номер рядка лякає:
Такі гігантські скрипти слід розбивати на кілька файлів, щоб хоча б самому в ньому потім не заплутатися ..
відповідь дан 28 Листопада '13 о 12:01
Якщо у вас виникає така проблема, то можна зробити наступне:
Спробувати самостійно змінити це значення, додавши в саме початку index.php (рассположенних в корені сайту) такі рядки:
або ж поклавши в корінь сайту файл .htaccess такого змісту:
Якщо ж такий файл вже є в корені сайту - просто додайте в нього наведену вище рядок.
- Якщо це не допомогло - зверніться до адміністратора хостингу і попросіть збільшити кількість доступної пам'яті для PHP.
відповідь дан 28 Листопада '13 о 12:03