Денвер сообщает о нехватке оперативной памяти?

Как увеличить доступную память для скрипта PHP при записи содержимого CSV-файла в массив из 200 000 строк, когда возникает ошибка "Allowed memory size exhausted"?
  • 10 августа 2024 г. 16:53
Ответы на вопрос 2
Для увеличения доступной памяти для скрипта PHP при обработке больших CSV-файлов можно выполнить следующие действия:

1. Увеличить значение параметра memory_limit в файле php.ini. Найдите этот файл на вашем сервере и откройте его в текстовом редакторе. Найдите строку, содержащую параметр memory_limit, и увеличьте значение этого параметра. Например, установите значение memory_limit = 256M или даже 512M, в зависимости от объема доступной памяти на вашем сервере.

2. Использовать функцию ini_set() в самом PHP-скрипте для установки значения memory_limit. Например, добавьте следующий код в начало вашего скрипта:
   ```php
   ini_set('memory_limit', '256M');
   ```

3. Попробуйте использовать специальные библиотеки PHP для работы с большими CSV-файлами, например, PHPExcel или PHP Spreadsheet. Эти библиотеки позволяют обрабатывать большие файлы по частям, минимизируя использование оперативной памяти.

4. Разбейте обработку CSV-файла на части и обрабатывайте их поочередно, чтобы избежать загрузки всего файла целиком в оперативную память.

5. Оптимизируйте ваш код, чтобы избежать использования избыточной памяти. Например, используйте unset() для освобождения памяти после завершения работы с переменными.

Следуя этим советам, вы сможете увеличить доступную память для скрипта PHP и избежать ошибки "Allowed memory size exhausted" при обработке больших CSV-файлов.
По поводу data44.csv и прочего. 

Обычно разработчики не прогружают файлы целиком в memory. Это опасно.
Файл имеет право во много раз превышать оперативу по размеру. И даже если
тебе кажется что файл (влезет) на глазок, то будучи сериализованным в PHP
array он может иметь накладные расходы.

Для альтернативы var_dump попробуй распечатать его по строкам

while (($data = fgetcsv($file, 15, ";")) !== false) {
    print($data);
}
Похожие вопросы