1

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?

1

So the answer was "by using exec() as in an example showed in the answer to question https://stackoverflow.com/questions/18259089/execute-gdal-translate-in-php-using-exec".

  • This link doesn't work, what's the answer please ? – Geo-x Jan 10 '17 at 10:57
  • Don't remember. Check the links on that deleted page. – user30184 Jan 10 '17 at 11:03
  • How can I do that ? GSE say : "This question was removed from Stack Overflow for reasons of moderation." – Geo-x Jan 10 '17 at 11:12
  • I see there "Here are some similar questions that might be relevant" and a bunch of links. – user30184 Jan 10 '17 at 11:14
  • 2
    Perfect, I used this answer : stackoverflow.com/questions/17914402/… – Geo-x Jan 10 '17 at 13:52
2

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");
?>
0

As I wrote in this answer, a native PHP alternative to using evil eval() and shp2pgsql utility would be my PHP Shapefile library, that can read and write any ESRI Shapefile natively in PHP.

It is a free, open source, native PHP library, does not require any third party dependency and is actively maintained.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.