[postgis-users] postgis & php

Graham Stewart graham at mobilefoundry.net
Tue Apr 4 12:22:40 PDT 2006


Nelson,

It looks like pgsql2shp is trying to access the database as the user
that your webserver runs as. You'll either need to change your postgres
configuration to create a user called www or perhaps change the code to
use the -u and -P flags to specify an alternate postgres login.

Graham

Nelson Guda wrote:
> Paul,
> I've tried out your code on my local computer, and I am getting this
> error...
> "../shapes/Sirenidae/psql: FATAL: role "www" does not exist psql:
> FATAL: role "www" does not exist psql: FATAL: role "www" does not
> exist psql: FATAL: role "www" does not exist"
>
> I'm not sure what is going wrong.  I figured out the path for files on
> my computer, they are relative to the php file.  So I assume that the
> path names on a webhost would also be relative to the php file.
>
> thanks again,
> nelson
>
>
>
> On Apr 3, 2006, at 11:39 PM, Paul Scott wrote:
>
>> Hi Nelsong,
>>
>> This code looks vaguely familiar :) although really dated, it will still
>> work...
>>
>> On Mon, 2006-04-03 at 14:52 -0500, Nelson Guda wrote:
>>
>>> I found a set of php classes on the web that include a function for
>>> shp2pgsql, but I cannot seem to get it working.  I'll copy those
>>> functions below.  I don't understand what I might need to change to
>>> make this work.  Can anyone help me out with this?
>>>
>> check out http://avoir.uwc.ac.za/projects/postgis in the CVS section for
>> a more updated version. That being said, lets fix up your problem...
>>
>>
>>> //function to insert shapefiles (ESRI) into PostGIS DB
>>> function create_sql($filename,$dbname)
>>> {
>>>     //create the tablename from the filename (replace the .shp with
>>> shp)
>>>     $tablename1 = str_replace('.','',$filename);
>>>     //Remove last three chars from table name ('shp' is discarded)
>>>     $tablename = substr($tablename1,0,-3);
>>>     //Give the log file a name by tacking .log onto the table name
>>>     $logfile = $tablename.".log";
>>>     //execute the shell script that does all the real work (thanks
>>> refractions.net)
>>>     $ret = shell_exec("/usr/local/pgsql/bin/shp2pgsql $filename
>>> $tablename|/usr/local/pgsql/bin/psql -d $dbname 2>&1");
>>>     echo $ret; //debug only (displays the results)
>>>     //open a file handle for binary safe write - this creates a
>>> logfile...Use it or leave it, just an extra
>>>     $handle = fopen($logfile,'w');
>>>     //Write the log data to a file
>>>     fwrite($handle, $ret);
>>>     //close the file handle
>>>     fclose($handle);
>>> }
>>
>> This function basically does all the magic, but should be a private
>> function. Which leaves us with the function below:
>>>
>>> function shp2pgsql($filename,$dbname)
>>> {
>>> //loop through all the shapefiles and perform the function on them
>>> foreach (glob("*.shp") as $filename)
>>> {
>>>    //display the file size and name that we are currently working on
>>>    //echo "$filename size " . filesize($filename) . "<br><br>\n";
>>>    //do the sql-ize and insert the data, also write a log
>>>    create_sql($filename,$dbname);
>>> }//end foreach
>>> }//end function
>>>
>> Here the function will take a directory and go through the entire
>> directory and convert all shapefiles to postgis sql statements. It can
>> also execute the sql...
>>
>> A couple of things you should look out for though:
>>
>> 1. Make sure that your webserver user has access to the database (in my
>> case its www-data.
>>
>> 2. Make sure that your shapefiles are readable by PHP/Web user.
>>
>> Then all should be OK.
>>
>> HTH
>>
>> --Paul
>>
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at postgis.refractions.net
>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>   




More information about the postgis-users mailing list