[mapserver-users] Debugging PHP/Mapscript

Daniel Morissette morissette at dmsolutions.ca
Tue Jan 15 16:50:28 PST 2002


Stephen Woodbridge wrote:
> 
> I have finally gotten around to trying to debug the PHP3/Mapscript
> problem I was having. You said I should build PHP/Mapscript as a static
> php CGI executable so I can run it in gdb.
> 

Actually, I meant compile PHP as a CGI executable instead of as an
Apache DSO.  And then you still compile PHP MapScript the same way, as a
php_mapscript.so file that will be loaded by PHP at runtime.

Once you're all setup, you can debug a PHP script that crashes using the
'php' CGI executable in gdb with:

  $ gdb ./php
  ...
  (gdb) run /path/to/test.php
  ...

Here is the fun part: If you need to setup a breakpoint inside
php_mapscript.so then you have to:

 - First set a breakpoint in php_dl() 
 - start the program, when it reaches php_dl(), type "finish" to let 
   php_dl() finish its execution
 - debugger will stop again at the end of php_dl(), after 
   php_mapscript.so is loaded... then you can set breakpoints anywhere
   in php_mapscript.so and enjoy gdb!  :)
 - Make sure you disable all breakpoints before re-running the program
   or gdb will keep complaining about them

There may be ways to automate this in gdb but I never looked into that
any further... I welcome suggestions.


> All the documentation only talks about building it as a DSO module for
> apache. Can you send me a link or have someone add it to Wiki? I think
> this would be a great help to aid others that might want to work with
> PHP3 and Mapscript.
> 

You should be able to find detailed information at
http://www.php.net/manual/en/installation.php

I believe that PHP's default 'configure' behavior is to build a 'php'
CGI executable.  It's the --with-apxs and/or --with-apache PHP configure
options that enable PHP to be built as an Apache DSO.

So basically to build PHP as a CGI simply make sure that you don't
provide the --with-apxs or --with-apache switch to the PHP configure.
It is also good practice when building PHP as a CGI to include the
--enable-force-cgi-redirect switch for security reasons.

Then once you have a 'php' executable, copy it to your server's cgi-bin
directory and add to your httpd.conf:

  AddType  application/x-httpd-php3 .php3
  AddType  application/x-httpd-php3 .phtml
  AddType  application/x-httpd-php3 .php

  Action application/x-httpd-php3 /cgi-bin/php

The same works for PHP3 or PHP4 as a CGI.

Note: Make sure you don't have an old PHP DSO already preloaded in your
Apache... this is common with preinstalled Apache on RedHat systems for
instance.  If you're in that situation and don't feel like recompiling
Apache then you can bypass the module by removing the original AddType
lines and using another type for your PHP CGI AddType and Action
directives, e.g.

  AddType  application/x-httpd-php-cgi .php3
  AddType  application/x-httpd-php-cgi .phtml
  AddType  application/x-httpd-php-cgi .php

  Action application/x-httpd-php-cgi /cgi-bin/php


> Also have you guys posted documentation on how to build Mapscript for
> PHP4 and MapServer 3.5? on Wiki?
> 

Nothing special to say there... MapServer's configure takes care of it
all on most platforms... here are some detailed steps (hopefully I
didn't forget anything):

1- Compile and install PHP as a CGI as described above

2- Run configure in your mapserver dir. with the --with-php switch:
   ./configure --with-php=/path/to/php-src-that-you-just-compiled ...

3- run 'make', that will automagically build mapserv, etc. 
    ... and php_mapscript.so in mapserver/mapscript/php3

4- Edit your php.ini and make sure extensions_dir is set to point to a
   valid location (e.g. /usr/local/lib/php4)

5- Copy php_mapscript.so to your extensions_dir

6- Make sure all libs used in your MapServer build are included in your
runtime library path.  See the PHP MapScript install FAQ about this
common problem:
http://mapserver.gis.umn.edu/doc/phpmapscript-install-howto.html#d41e543

7- You're ready to use dl("php_mapscript.so"); to load and use PHP
MapScript in your PHP apps.


See also the PHPMapScript-install-HOWTO for more info:"
http://mapserver.gis.umn.edu/doc/phpmapscript-install-howto.html

I hope that helps...

P.S. I have added a copy of this message in the Wiki at
http://mapserver.gis.umn.edu/cgi-bin/wiki.pl?PHPBuildDebugLinux

-- 
------------------------------------------------------------
 Daniel Morissette               morissette at dmsolutions.ca
 DM Solutions Group              http://www.dmsolutions.ca/
------------------------------------------------------------
  Don't put for tomorrow what you can do today, because if 
      you enjoy it today you can do it again tomorrow.



More information about the MapServer-users mailing list