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?

TomazicM
27.3k25 gold badges33 silver badges43 bronze badges
asked Jun 1, 2014 at 6:56
5
  • Why did exec() not work? What was the error? Did you do something similar than in here stackoverflow.com/questions/18259089/…? Commented Jun 1, 2014 at 10:42
  • Finally its works, Don't know what was the problem Commented Jun 1, 2014 at 11:25
  • Nice. I copy my comment as an answer then. Commented Jun 1, 2014 at 11:25
  • exec() works if used like in this answer stackoverflow.com/questions/18259089/… Commented Jun 1, 2014 at 11:29
  • actually exec() worked, I don't know what was the problem :) Commented Jun 1, 2014 at 11:40

3 Answers 3

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\PostgreSQL9円.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\PostgreSQL9円.6\bin\shp2pgsql.exe\" -s 28992 -I -W 
latin1 D:\somefolder\someshape.shp someschema.example_shape | \"C:\Program 
Files\PostgreSQL9円.6\bin\psql.exe\" -U postgres -h localhost -d somedbname");
?>
answered May 17, 2018 at 22:59
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".

answered Jun 1, 2014 at 12:35
5
  • This link doesn't work, what's the answer please ? Commented Jan 10, 2017 at 10:57
  • Don't remember. Check the links on that deleted page. Commented Jan 10, 2017 at 11:03
  • How can I do that ? GSE say : "This question was removed from Stack Overflow for reasons of moderation." Commented Jan 10, 2017 at 11:12
  • I see there "Here are some similar questions that might be relevant" and a bunch of links. Commented Jan 10, 2017 at 11:14
  • 2
    Perfect, I used this answer : stackoverflow.com/questions/17914402/… Commented Jan 10, 2017 at 13:52
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.

answered Aug 30, 2019 at 16:15

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.