[mapserver-users] Debugging PHP/Mapscript

Stephen Woodbridge woodbri at swoodbridge.com
Tue Jan 15 20:05:46 EST 2002


Daniel,

Thank you for you help, this has been very instructive. I will also add
it to Wiki for future reference.

I just tried the php3/examples/test_draw_map.phtml file on my demo.map
which is working with 3.5 and it ran fine? So I am now wondering if the
problem may not lie in the gmap75 stuff. I will check the map file to
make sure it has the lastest 3.5 changes applied to it.

Many thanks for you support.

-Steve

Daniel Morissette wrote:
> 
> 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