FAQ - Häufig gestellte Fragen

Allgemein

Dienste und in welchen Anwendungen sie genutzt werden

F: Ich würde gerne wissen, in welchen Anwendungen ein bestimmter WMS Dienst eingebaut ist. Gibt es einen Weg das herauszufinden?

A: Bis wir die Information an der Oberfläche anbieten, hilft Ihnen folgendes SQL Statement:

SELECT mb_core_application.* from mb_core_application, mb_core_layerset, mb_core_sourceinstance, mb_wms_wmsinstance, mb_wms_wmssource, mb_core_source
where
-- Anwendungen und ihre Layersets
mb_core_application.id = mb_core_layerset.application_id and
-- Layersets und ihre Instanzen
mb_core_layerset.id = mb_core_sourceinstance.layerset and
-- Layerset-Instanzen und die WMS-Instanz
mb_core_sourceinstance.id = mb_wms_wmsinstance.id and
-- WMS-Instanz und WMS-Source
mb_wms_wmsinstance.wmssource = mb_wms_wmssource.id and
-- WMS-Source und MB3-Core Source
mb_wms_wmssource.id = mb_core_source.id and
mb_core_source.id = <id_of_the_wms>;

Als ID <id_of_the_wms> geben Sie die Nummer ein, die auf der Seite der Datenquellen dem jeweiligen WMS zugeordnet ist.

app.php und app_dev.php: Wozu sind diese da?

Siehe die Details zur Konfiguration von Mapbender, im Kapitel Produktions- und Entwicklerumgebung und Caches: app.php und app_dev.php.

Sie nutzen normalerweise die app.php Datei. Erst wenn Sie noch selbst etwas entwickeln (an den Twig-Dateien, CSS oder JS-Dateien) oder zu Debugzwecken, nutzen Sie die app_dev.php.

Was ist der Cache und wann muss ich ihn löschen?

Auch für diese Frage, siehe die Details zur Konfiguration von Mapbender, im Kapitel Produktions- und Entwicklerumgebung und Caches: app.php und app_dev.php.

Sie löschen die Inhalte vom mapbender/app/cache/ Ordner, nicht den cache-Ordner selbst. Also das prod und - falls vorhanden - das dev Verzeichnis.

Performance

Arbeiten mit größeren WMS Diensten

F: Beim Laden von größeren WMS (z.B. mehr als 100 Layer) in eine Anwendung werden in der Konfiguration der Layerset-Instance nur Teile der Layer übernommen und angezeigt. Die WMS Instance kann auch nicht abgespeichert werden. Warum?

A: Mittels des PHP-Parameters max-input_vars kann die Zahl der Eingabe Variablen erhöht werden. Der Standardwert liegt (je nach PHP Version) bei 1000. Die Zahl der Eingabe Variablen ist bei einem WMS mit vielen Layern sehr hoch, vergleichbar mit der Anzahl der Auswahlmöglichkeiten innerhalb des WMS-Instance Dialogs. Setzen Sie in dem Fall den Parameter hoch, beispielsweise auf 2000. Die Zahl hängt direkt mit der Anzahl der Layer im WMS zusammen.

;; 1000 (default) oder höher
max_input_vars = 1000

Meine Anwendung kann nicht kopiert werden

F: Ich habe eine komplexe Anwendung und möchte sie kopieren. Das schlägt fehl.

A: Eine mögliche Ursache ist, dass PHP nicht das Arbeiten mit großen Dateien (YAML-Export/Import, etc.) erlaubt. Das tritt v.a. bei Fast-CGI auf. Dafür dient der PHP Parameter MaxRequestLen, den Sie in der Konfiguration von FCGI anpassen können.

# mod_fcgi.conf (Windows)
# set value to 2 MB
MaxRequestLen = 2000000

# fcgid.conf (Linux)
# set value to 2 MB
MaxRequestLen 2000000

Analog dazu können Sie die PHP-Werte in der php.ini überprüfen:

max_execution_time = 240
memory_limit = 1024M
upload_max_filesize = 2M

Entwicklung und manuelle Updates von Modulen

F: Wie kann ich einen speziellen Branch des Mapbender Moduls auschecken und testen? Wie bekomme ich das wieder rückgängig? Hilft mir Composer dabei?

A: Möglichkeit 1: In das Verzeichnis application/mapbender gehen und den speziellen Branch auschecken. Danach wieder den aktuellen Branch auschecken. Leeren Sie das Cache Verzeichnis zwischendurch (app/cache für Symfony 2, var/cache für das kommende Symfony 3))

Möglichkeit 2: Im Composer: “mapbender/mapbender”: “dev-fix/meinfix” eintragen und ein Composer Update ausführen. Dabei werden aber auch alle anderen Vendor-Pakete aktualisiert (für Developer ist das OK). Rückgängig wieder mit der Angabe des vorherigen Branches. Dazu nochmal in appliaction/mapbender gehen und den Branch mit der Hand auschecken.

Installation

Attempted to call function “imagecreatefrompng”

F: Ich bekomme einen Fehler beim Drucken. Ich habe in das Log geschaut (app/logs/prod.log) und da steht so ungefähr folgendes drin.

CRITICAL - Uncaught PHP Exception Symfony\Component\Debug\Exception\UndefinedFunctionException:
"Attempted to call function "imagecreatefrompng"
from namespace "Mapbender\PrintBundle\Component"."
at /srv/mapbender-starter/application/mapbender/src/Mapbender/PrintBundle/Component/PrintService.php line 310

A: Bitte stellen Sie sicher, dass Sie die php5-gd Bibliothek installiert haben.

Deprecation Notices bei composer oder bootstrap Script

F: Ich bekomme beim Ausführen von bootstrap bzw. von composer Update eine Deprecation Warnung:

Deprecation Notice: The callback ComposerBootstrap::checkConfiguration declared at
/srv//mapbender-starter/application/src/ComposerBootstrap.php accepts a Composer\Script\CommandEvent
but post-update-cmd events use a Composer\Script\Event instance.
Please adjust your type hint accordingly, see https://getcomposer.org/doc/articles/scripts.md#event-classes
in phar:///srv/mapbender-starter/composer.phar/src/Composer/EventDispatcher/EventDispatcher.php:290

A: Das ist abhängig von der PHP Version, auf der Sie diese Kommandos aufrufen und taucht bei PHP Versionen < 7 auf.

Oracle

Einstellungen für die Oracle Datenbank - Punkt und Komma

F: Ich bekomme bei Oracle einen Fehler, wenn ich doctrine:schema:create ausführe. Warum? Hier ist meine Fehlermeldung:

[Doctrine\DBAL\Exception\DriverException]
An exception occurred while executing
'CREATE TABLE mb_wms_wmsinstance (id NUMBER(10) NOT NULL,
                                  [...]
                                  PRIMARY KEY(id))':
ORA-01722: Ungültige Zahl

A: Wahrscheinlich kommt Oracle nicht mit den Dezimaltrennern zurecht und erwartet ein Komma, statt einem Punkt (also 1,25 statt 1.25). Das kann man mit folgendem Statement am Ende der config.yml einrichten (Cache danach leeren).

services:
  oracle.session.listener:
    class: Doctrine\DBAL\Event\Listeners\OracleSessionInit
    tags:
      - { name: doctrine.event_listener, event: postConnect }

Es handelt sich dabei um die Verknüpfung zu einer Service-Klasse, die von Doctrine bereitgestellt wird. Die setzt nach der Verbindung zur Datenbank Session-Variablen (ALTER SESSION), so dass PHP und Oracle zusammenarbeiten können.

Ursachen können sein: Ländereinstellungen des Betriebssystems sein (z.B. Windows), Einstellungen des Oracle-Clients, Einstellungen während der Installation von Oracle.

Mehr Informationen auf der Doctrine Seite: http://www.doctrine-project.org/api/dbal/2.0/class-Doctrine.DBAL.Event.Listeners.OracleSessionInit.html

Welche Rechte benötigt der Mapbender User auf der Oracle-Datenbank?

  • Create Sequence
  • Create Session
  • Create Table
  • Create Trigger
  • Create View

Der Zugriff auf Oracle-Datenbanken ist langsam

F: Beim Zugriff auf Oracle-Datenbanken reagiert Mapbender teilweise recht langsam, Abfragen dauern länger als gewöhnlich. Was kann ich anpassen?

A: Es gibt zwei Parameter in der php.ini, mit der die Zugriffe auf die Oracle Datenbanken verbessert werden können: oci8.max_persistent und oci8.default_prefetch. Passen Sie diese an.

oci8.max_persistent = 15
oci8.default_prefetch = 100000

Des weiteren stellen Sie in der config.yml in der jeweiligen Datenbank-Verbindung den persistent Parameter auf true.

persistent=true