PHP-MapScript Memory Exhaustion Error - SOLVED

John Gorkos johng at AMDSWIRELESS.COM
Mon Jul 11 15:29:58 PDT 2005


Much thanks to the following mapserver list members for their help:
Matthew Roberson
Romolo Mandfredini
Tim Schaub
Heather Banks
Umberto Nocoletti

The solution was not necessarily mapserver related, but PHP-based.  In 
the /etc/php.ini file there is a line that by default is set to:
memory_limit = 8M      ; Maximum amount of memory a script may consume (8MB)

By changing that to 32M (well within the capability of a 2GB RAM server), the 
error went away.

Thanks to those that helped, with all kinds of suggestions.

John Gorkos

On Friday 08 July 2005 01:50 pm, John Gorkos wrote:
> Gurus-
>   I am writing a PHP-MapScript script which pulls a list of points from a
> DB, and plots them on the map using multiple styles per point.  The styles
> are dynamically altered in the script to basically draw a small bar graph
> with 7 bars at each map point, to reflect various health parameters of some
> remote equipment.
>  I have mad this work in perl.  Under PHP, I am allowed to add two styles
> per point, but when I add the third, I get this:
> Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to
> allocate 75 bytes) in /var/www/html/foo.phtml
>
> The code snippet which produces this is as follows:
> $image=$map->draw();
>
> $meterLayer = $map->getLayerByName("Endpoints");
> $meterClass0 = $meterLayer->getClass(0);
> $rs= mssql_query ($sql, $con);
>
> $red = array(255,255,255,225,0,150,0);
> $green = array(255,0,255,0,200,100,0);
> $blue = array(255,0,0,150,150,50,255);
>
> while ( $row = mssql_fetch_row($rs)) {
>   for ( $i=0; $i<3; $i++ ) {
>     $meterStyle[$i] = $meterClass0->getStyle($i);
>     $meterStyle[$i]->outlinecolor->setRGB($red[$i],$green[$i],$blue[$i]);
>     $meterStyle[$i]->color->setRGB($red[$i],$green[$i],$blue[$i]);
>     $meterStyle[$i]->set('offsetx',$i*3);
>     $meterStyle[$i]->set('offsety',0);
>   }
>   $point = ms_newPointObj();
>   $point->setXY((-1)*$row[1],$row[0]);
>   $point->draw($map,$meterLayer,$image,0,$row[2]);
> }
>
> $image_url=$image->saveWebImage();
>
> If the "3" in the for loop above is set to 2 or 1, it works fine, but I
> need it to be an 8, which obviously fails.  More code available on request.
>
> I am using Mapserver 2.6, PHP 5.0.4.  The machine is 64-bit Mandrake Linux
> installation on dual Xeons with 2GB of physical ram, yadda yadda.  It's a
> healthy machine, and has run this same type of code under 2.6beta3 with
> Perl Mapscript.  However, I formatted the box to switch from SuSE to
> Mandrake, and forgot to copy the perl script over before I formatted the /
> partition (insert lots of comments about backups, etc),so I'm rewriting in
> PHP since I was shamed into learning in on the #mapserver irc channel.
>
> Anyone have any thoughts on where I'm wrong, or is this a bug?
>
> John Gorkos
> AMDS Wireless, LLC



More information about the MapServer-users mailing list