Неустранимая ошибка: Допустимый размер памяти

HI, я загружаю свой скрипт тестирования php на онлайн-сервер vps только сейчас. Сценарий, используемый для анализа XML-файла большого размера (около 4M, 7000Lines). Но мой проводник IE показывает онлайн-сообщение об ошибке ниже.

Неустранимая ошибка: допустимый размер памяти 16777216 байт исчерпан (пытался выделить 77 байт) в /var/www/test/result/index.php в строке 26

Я уверен, что я уже успешно протестировал php-скрипт на локальном хосте.

Есть ли какая-либо конфигурация, которую нужно включить / изменить на моем VPS? Например, php.ini или некоторые настройки для сервера Apache? Я просто подтвердил, что для моего VPS доступно около 200 Мб памяти. Как я могу это исправить?

...... function startElementHandler ($parser,$name,$attrib){ global $usercount; global $userdata; global $state; // Line #26; //Debug //print "name is: ".$name."\n"; switch ($name) { case $name=="_ID" : { $userdata[$usercount]["first"] = $attrib["FIRST"]; $userdata[$usercount]["last"] = $attrib["LAST"]; $userdata[$usercount]["nick"] = $attrib["NICK"]; $userdata[$usercount]["title"] = $attrib["TITLE"]; break; } ...... default : {$state=$name;break;} } } 

Solutions Collecting From Web of "Неустранимая ошибка: Допустимый размер памяти"

Ваша конфигурация PHP ограничивает PHP только 16 мегабайтами памяти. Вам нужно изменить директиву конфигурации памяти_limit в php.ini, чтобы увеличить ее.

Найдите строку в php.ini, которая выглядит так:

 memory_limit = 16M 

… и перейти на большое значение ( 16M = 16 мегабайт, вы можете увеличить его до 64M для 64 мегабайт и т. д.). Если вы не можете найти такую ​​строку, добавьте ее.

Если вы предпочитаете увеличивать его только для каждого сценария, вы также можете использовать ini_set() для изменения значения только для этого скрипта.

Вы также можете использовать memory_get_peak_usage (), чтобы узнать, какая часть программы ест вашу память.

Используйте синтаксический анализатор SAX вместо DOM-парсера, и вы не исчерпаете память. DOM занимает в 8-10 раз больше памяти, чем фактический поток документов, тогда как SAX имеет разумные постоянные накладные расходы, независимо от размера документа.

 ini_set("memory_limit","XXM"); 

обратите внимание, что некоторые серверы не позволяют этому работать (хотя в VPS это не должно быть проблемой, это в основном проблема веб-хостинга).

edit: вместо « XX » введите фактический размер, например 128M

Убедитесь, что вы указали правильные допустимые настройки для:

  • file_uploads
  • upload_max_filesize
  • max_input_time
  • memory_limit
  • max_execution_time
  • post_max_size

Вы можете вызвать phpinfo() чтобы найти местоположение вашего файла php.ini , а также указать текущие значения для следующих параметров, которые необходимо изменить.

Вы можете использовать функцию ini_set для установки некоторых из этих значений из вашего скрипта.

ВИДЕТЬ:

Как оптимизировать вашу установку PHP для обработки больших загрузок файлов.

Он грязный, но в некоторых случаях с большими XML-файлами быстрее получать значения через регулярные выражения! И если это хорошо отформатированный XML, проблем не должно быть!

псевдокод:

 preg_match('+<title>(.*)</title>+', $xml_content, $matches); var_dump($matches); 

для общего хостинга поставьте эту строку вам index.php

 ini_set("memory_limit","128M");