Vom: 05.04.2012

Pimcore mit Hoster United Domains

Um Pimcore beim Hoster United Domains installieren zu können müssen ein paar Hürden überwunden werden. Erstes Problem ist, dass die Datenbank nicht auf UTF-8 eingestellt ist - was sich mit einem selbst installieren phpMyAdmin oder Navicat aber leicht beheben lässt. Zudem ist aus Sicherheitsgründen bei UD der Einsatz der Funktionen set_time_limit() und ini_get_all() gesperrt, was das Installieren bzw. Betreiben von Pimcore verhindert. Hier müssen zwei kleine Workarounds gebastelt werden: In pimcore/modules/install/controllers/IndexController.php:
        $maxExecutionTime = 300;
        @ini_set("max_execution_time", $maxExecutionTime);
        set_time_limit($maxExecutionTime);
Hier muss vor das set_time_limit ein "@" um die Ausgabe der Warning zu unterdrücken:
        $maxExecutionTime = 300;
        @ini_set("max_execution_time", $maxExecutionTime);
        @set_time_limit($maxExecutionTime);
Ähnliche Änderungen sind, je nach Version von Pimcore, auch in pimcore/lib/Pimcore.php in Methode setSystemRequirements() notwendig:
        @set_time_limit($maxExecutionTime);
Wenn das Aufrufen nur mit einem ERR_CONTENT_DECODING_FAILED order ähnlichem seitens des Browsers quittiert wird, sollte man das Encoding abstellen, da ein Fehler oder eine Warning passiert, bevor tatsächlich encodeter Inhalt ausgeliefert wird. Dieser Inhalt kann dann nicht decoded werden (da ja nicht encoded) und der Browser wirft einen Fehler. Leider kann das Abschalten nicht konfiguriert werden, also muss man auch kurzzeitig per Sourcecode-Änderung ran:
    public static function outputBufferEnd ($data) {

        $contentEncoding = null;
        if( strpos($_SERVER["HTTP_ACCEPT_ENCODING"], 'x-gzip') !== false ) {
            $contentEncoding = 'x-gzip';
        } else if( strpos($_SERVER["HTTP_ACCEPT_ENCODING"],'gzip') !== false ) {
            $contentEncoding = 'gzip';
        }

	// Dies ist die Änderung, die nach dem Debugging wieder entfernt werden sollte:
        $contentEncoding = null;
Als nächstes muss noch im bei Pimcore beigelegten Zend Framework was geändert werden. Dadurch, das ini_get_all() deaktiviert ist, muss man der Klasse Zend_Session explizit sagen, welche ini-Einträge ausgelesen werden sollen:
    public static function getOptions($optionName = null)
    {
        $options = array();
        foreach (ini_get_all('session') as $sysOptionName => $sysOptionValues) {
            $options[substr($sysOptionName, 8)] = $sysOptionValues['local_value'];
        }
muss geändert werden zu (beispielsweise):
    public static function getOptions($optionName = null)
    {
        $options = array();
				$ini = array("session.auto_start","session.bug_compat_42","session.bug_compat_warn","session.cache_expire","session.cache_limiter","session.cookie_domain",
						"session.cookie_httponly","session.cookie_lifetime","session.cookie_path","session.cookie_secure","session.entropy_file",
						"session.entropy_length","session.gc_divisor","session.gc_maxlifetime","session.gc_probability","session.hash_bits_per_character",
						"session.hash_function","session.name","session.referer_check","session.save_handler","session.save_path","session.serialize_handler",
						"session.use_cookies","session.use_only_cookies","session.use_trans_sid");

				foreach ($ini as $sysOptionName) {
					$sysOptionValues = ini_get($sysOptionName);
					$options[substr($sysOptionName, 8)] = $sysOptionValues['local_value'];
				}
Wir haben diese Werte auf einem lokalen Server pragmatisch durch durch php_info() ermittelt - ob das für alle Zeiten so richtig bleiben wird muss gegebenenfalls jeder für sich selbst herausfinden. Edit vom 29.04.2013: - Encoding-Debugging eingebaut - max-exeution-time in Pimcore.php berücksichtigen