嗨,我刚刚将我的php测试脚本上传到在线vps服务器。该脚本用于解析大型XML文件(大约4M,7000Lines)。但我的IE浏览器显示下面的在线错误消息。
致命错误:第26行的/var/www/test/result/index.php中允许的内存大小为16777216字节(尝试分配77个字节)
我确信我已经成功测试了localhost上的php脚本。
是否需要在我的VPS上启用/修改配置?如php.ini或apache服务器的一些设置?我刚刚验证了我的VPS大约有200M的内存使用量。我该如何解决这个问题?
......
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;}
}
}
答案 0 :(得分:3)
您的PHP配置将PHP限制为仅16兆字节的内存。您需要修改php.ini中的memory_limit
配置指令以增加它。
在php.ini中查找如下所示的行:
memory_limit = 16M
...并更改为较大的值(16M
= 16兆字节,您可以将其增加到类似64M
的64兆字节,等等。如果找不到这样的行,请添加它。
如果您只想在每个脚本的基础上增加它,您也可以使用ini_set()
来更改该脚本的值。
答案 1 :(得分:2)
您还可以使用memory_get_peak_usage()找出程序的哪个部分正在占用您的记忆。
答案 2 :(得分:2)
使用SAX解析器而不是DOM解析器,并且不会耗尽内存。 DOM占用实际文档流的内存的8-10倍,而SAX具有合理的常量开销,与文档大小无关。
答案 3 :(得分:1)
ini_set("memory_limit","XXM");
请注意,有些服务器会阻止这种情况发生(虽然在VPS中这应该不是问题,但主要是网络托管问题)。
编辑:而不是“XX
”写下实际尺寸,例如128M
答案 4 :(得分:1)
确保您为:
指定了正确的可接受设置file_uploads
upload_max_filesize
max_input_time
memory_limit
max_execution_time
post_max_size
您可以调用phpinfo()
函数查找php.ini
文件的位置,它还会告诉您需要修改的以下设置的当前值。
您也可以使用ini_set
函数在脚本中设置其中的一些值。
查看:强>
<强> Howto optimize your PHP installation to handle large file uploads. 强>
答案 5 :(得分:1)
它很脏,但在某些情况下使用大型XML文件,通过正则表达式获取值会更快!如果它是格式良好的XML,应该没有问题!
伪代码:
preg_match('+<title>(.*)</title>+', $xml_content, $matches);
var_dump($matches);
答案 6 :(得分:0)
用于共享主机将此行添加到index.php
ini_set("memory_limit","128M");