raster2pgsql mittels php ausführen

Hallo zusammen!
Ich habe ein geotiff Rasterbild, das ich über ein php Script in eine PostgreSQL (9.2) Datenbank mit Postgis(2.0.3) Erweiterung importieren will. Die Datenbank läuft auf einem Windows Server 2008 System auf welchem ms4w 3.0.6 (PHP 5.4.3, Apache 2.2) installiert ist.

Mein php Code sieht folgendermaßen aus:

include ("db.php"); 
$path="C:\\Programme\\PostgreSQL\\9.2\\bin"; 
shell_exec("$path\\raster2pgsql -s 4326 -C -M –a C:\\foo.tiff -F public.rasterfoo | psql –d database –h localhost –p 5432 –U postgres");

Wenn ich diesen Code ausführe passiert rein gar nichts, der Browser lädt so lange, bis die max_execution_time von php erreicht ist. Dabei werden keinerlei Fehler ausgegeben, auch nicht im Apache error Logfile. Wenn ich anstelle des durchlaufenden Pipe commands “|” den in der windows Commandozeile verwendeten geteilten “¦” verwende, erscheint ein Eintrag im error log: “ERROR: Unable to read raster file: \x96a\r”.

Ich habe schon einiges probiert (Schreib-/Lesezugriff auf den gesamten Ordnern, normale Slashes im Pfad, anstelle von shell_exec system(), exec() verwendet, das Rasterbild in den bin Ordner von PostgreSQL kopiert usw.) aber ich bekomme es nicht zum Laufen…

Von der Windows Kommandozeile aus funktioniert alles bestens und das Raster wird ohne Probleme in die Datenbank importiert.

Hat irgendjemand irgendwelche Ideen oder Tipps woran das liegen könnte?

Schöne Grüße

Peter

max_execution_time erhöhen.

Von der Windows Kommandozeile aus funktioniert alles bestens und das Raster wird ohne Probleme in die Datenbank importiert.

Lösung gefunden.

Andreas

Hey!

Die max_execution_time liegt zur Zeit bei etwa 10 Minuten, ich glaub nicht, das es etwas bringt, diese noch zu erhöhen. Das Rasterbild ist zudem nur so 13KB groß und sollte in 10min eigentlich in die Datenbank importiert werden können, zumal es direkt über die Windows Kommandozeile ca. 3 Sekunden dauert. Es scheint so, als wenn irgendwas den Zugriff blockieren/abbrechen würde…

Bin leider auf den Import von php aus angewiesen, da sich der Dateiname des Rasterbildes immer ändert und ich immer das aktuellste Bild importieren will.

Schöne Grüße

Darf denn der User, unter den der Indianer da läuft, einfach so zum User postgres werden bzw. sich als dieser ausgeben? Steht was im Log von PG?

Davon abgesehen: windoze als Host für Apache, PHP und PG, nun ja, …

Bin mir dessen eh bewusst, dass windows nicht die optimale Lösung ist :confused:

Bezüglich des Users: Also im pg_log File steht nichts drinnen…

Schöne Grüße

Naja wenn dann würde ich im Apache Log mal schauen. Der will ja Postgres werden. :wink: Oder aber im Windows Security Log… Vielleicht darf aber auch der Apache einfach die Datei nicht lesen. Wobei du dann aber relativ schnell einen OS Error 5 (Zugriff verweigert) bekommen solltest…

cu tb

Also im windows security log steht auch nichts drinnen und im Apache log steht “ERROR: Unable to read raster file: \x96a\r”, aber nur wenn ich einen broken bar als pipe verwende (siehe Post oben).

Schöne Grüße

Falls jemand mal das gleiche Problem mit der Verwendung von raster2pgsql mittels php unter windows hat, poste ich kurz meinen workaround, der zumindest bei mir funktioniert :wink:

Da ich die Ursache für das Problem nicht gefunden habe, habe ich mir nun einfach mit folgendem Befehl den import als SQL file rausgespielt:

exec("C:/Programme/PostgreSQL/9.2/bin/raster2pgsql -s 4326 -C -F -a $bildpfad public.rasterfoo > raster.sql");

Dieses sql File hole ich mir anschließend mit php’s

file_get_contents('raster.sql');

und führe es mit pg_query aus und fertig :smiley:

Schöne Grüße