Shapefile PostgreSQL PHP – How to Store Shapefile in PostgreSQL Database as a Table Using PHP

command linePHPpostgresqlshapefile

I want to create a table from a shapefile in PostgreSQL. To do that, I can run this command in cmd:

shp2pgsql -s 4326 -W LATIN1 E:\Any\THA_adm public.test123 | psql -h localhost -d DATA -U postgres -w 123;

This works, but I want to run it from PHP. How can I do that, I tried PHP functions:

  1. shell_exec()
  2. exec()
  3. system()

but did not work. Is there any other way to create a table from shape in PHP or run this command?

Best Answer

I experienced exactly the same problem (command works in cmd but nothing when called via PHP). What helped me a lot was to retrieve the error message (by adding: 2>&1'& $output). MY command looked something like:

?php
exec("\"C:\Program Files\PostgreSQL\9.6\bin\shp2pgsql.exe\" -s 28992 -I -W 
latin1 D:\somefolder\someshape.shp someschema.example_shape | psql -U postgres -h localhost -d somedbname 2>&1", $output);
foreach ($output as $key => $value)
{echo $value;}
?>

It returned "'psql' is not recognized as an internal or external command,operable program or batch file." My fix was to define the full path of the psql executable in the command like this:

<?php
exec("\"C:\Program Files\PostgreSQL\9.6\bin\shp2pgsql.exe\" -s 28992 -I -W 
latin1 D:\somefolder\someshape.shp someschema.example_shape | \"C:\Program 
Files\PostgreSQL\9.6\bin\psql.exe\" -U postgres -h localhost -d somedbname");
?>
Related Question