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.
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?
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.
Naja wenn dann würde ich im Apache Log mal schauen. Der will ja Postgres werden. 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…
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).
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
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