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;} } }
Ваша конфигурация 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");