Seite 1 von 2

Debug Meldung beim Update von 3.1.2-RC1-dev auf 3.1.2

Verfasst: 26.11.2014 13:38
von Kirk
Hallo
Beim Update von 3.1.2-RC1-dev auf 3.1.2 bekommeich im ACP folgende Debug Meldung:
[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/version_helper.php on line 262: call_user_func_array() expects parameter 2 to be array, string given
Das hier ist die besagte Zeile:

Code: Alles auswählen

throw new \RuntimeException(call_user_func_array(array($this->user, 'lang'), $exception->getMessage()));
Hier ein bischen mehr:

Code: Alles auswählen

    public function get_versions($force_update = false, $force_cache = false)
    {
        $cache_file = '_versioncheck_' . $this->host . $this->path . $this->file;

        $info = $this->cache->get($cache_file);

        if ($info === false && $force_cache)
        {
            throw new \RuntimeException($this->user->lang('VERSIONCHECK_FAIL'));
        }
        else if ($info === false || $force_update)
        {
            try {
                $info = $this->file_downloader->get($this->host, $this->path, $this->file);
            }
            catch (\RuntimeException $exception)
            {
                throw new \RuntimeException(call_user_func_array(array($this->user, 'lang'), $exception->getMessage()));
            }
            $error_string = $this->file_downloader->get_error_string();

            if (!empty($error_string))
            {
                throw new \RuntimeException($error_string);
            }

            $info = json_decode($info, true);
Bei diesem Update habe ich mir das komplette 3.1.2 von com runtergeladen und alle Dateien bis auf die config.php ersetzt.

Selbst wenn ich die Sprache auf en umstelle, bleibt es bei dieser Debug Meldung.

Edit:
Wenn ich das hier:

Code: Alles auswählen

throw new \RuntimeException(call_user_func_array(array($this->user, 'lang'), $exception->getMessage())); 
durch das ersetze:

Code: Alles auswählen

throw new \RuntimeException($this->user->lang('VERSIONCHECK_FAIL')); 
ist diese Debug Meldung weg.

Re: Debug Meldung beim Update von 3.1.2-RC1-dev auf 3.1.2

Verfasst: 26.11.2014 18:39
von HabNurNeFrage
Hi,

exakt die selbe Debug-Message eben während meines Updates mit dem deutschen Update-Paket von 3.1.1 nach 3.1.2.
Aufgrund der dadurch bereits gesendeten Header war der Dateidownload der Änderungen auch nicht möglich.
Per Remote-FTP lief das Update trotzdem und mit der Meldung durch.
Nun habe ich diese Debug-Meldung nach dem Update aber auch dauerhaft im ACP in den Reitern "Allgemein" und "System" wegen der Versions-Prüfung :cookie:

Zusatz-Info:
Die Versionsprüfung funktioniert aufgrund vom Provider gesperrter Socket Funktionen sowieso nicht, jedoch lief das ACP bisher ohne Debug-Meldung.

LG

PS: Welcher String wird denn in die Funktion geschickt, der ein Array sein soll? Kann man den String irgendwo in ein passendes Array umwandeln? :D

Re: Debug Meldung beim Update von 3.1.2-RC1-dev auf 3.1.2

Verfasst: 26.11.2014 18:53
von gn#36
Hm, entweder $exception->getMessage() ist ein String, dann gehört da sowas hin:

Code: Alles auswählen

    throw new \RuntimeException(call_user_func(array($this->user, 'lang'), isarray($exception->getMessage()) ? $exception->getMessage() : array($exception->getMessage())));  
Oder es kann auch ein Array sein, aber dann sollte es eher so ähnlich wie das hier aussehen (vielleicht nicht ganz so verschachtelt unbedingt):

Code: Alles auswählen

throw new \RuntimeException(call_user_func_array(array($this->user, 'lang'), isarray($exception->getMessage()) ? $exception->getMessage() : array($exception->getMessage())));


Allerdings wäre mir neu, dass lang überhaupt eine Methode des User Objekts ist, eigentlich kann das also sowieso nicht wirklich aufgerufen werden, es sei denn PHP Callbacks erlauben auch den einfachen Zugriff auf Arrays. Mir ist auch nicht klar was das an der Stelle soll, denn eigentlich sollte es auch ein einfaches

Code: Alles auswählen

 throw new \RuntimeException($this->user->lang[$exception->getMessage()]);
tun.

Ich halte das für einen Bug.

Re: Debug Meldung beim Update von 3.1.2-RC1-dev auf 3.1.2

Verfasst: 26.11.2014 23:25
von Elsensee
Ich nehme an, du meintest die Funktion is_array oder? :wink:
gn#36 hat geschrieben:Allerdings wäre mir neu, dass lang überhaupt eine Methode des User Objekts ist, eigentlich kann das also sowieso nicht wirklich aufgerufen werden, es sei denn PHP Callbacks erlauben auch den einfachen Zugriff auf Arrays. Mir ist auch nicht klar was das an der Stelle soll, denn eigentlich sollte es auch ein einfaches

Code: Alles auswählen

throw new \RuntimeException($this->user->lang[$exception->getMessage()]); 
tun.
Seit phpBB 3.1 ist lang auch eine Funktion des User-Objekts und ist insbesondere zur Anwendung der Plural-Regel erforderlich. :wink:

$exception->getMessage() liefert immer einen String zurück, weshalb es an entsprechender Stelle natürlich heißen muss:

Code: Alles auswählen

throw new \RuntimeException(call_user_func_array(array($this->user, 'lang'), array($exception->getMessage()))); 
Die Frage, die ich mir nun natürlich stelle, ist eine ähnliche wie deine, (nur halt mit der Funktion lang :D ):
Warum hat man nicht einfach das hier genommen?

Code: Alles auswählen

throw new \RuntimeException($this->user->lang($exception->getMessage())); 

Re: Debug Meldung beim Update von 3.1.2-RC1-dev auf 3.1.2

Verfasst: 26.11.2014 23:55
von HabNurNeFrage
Hi.
Elsensee hat geschrieben:Die Frage, die ich mir nun natürlich stelle, ist eine ähnliche wie deine, (nur halt mit der Funktion lang :D ):
Warum hat man nicht einfach das hier genommen?

Code: Alles auswählen

throw new \RuntimeException($this->user->lang($exception->getMessage())); 
PERFEKT 8)

Das sollte man dort schnellstens eintragen :D
Mit dieser Zeile weder beim Update noch hinterher Probleme...

LG

Re: Debug Meldung beim Update von 3.1.2-RC1-dev auf 3.1.2

Verfasst: 27.11.2014 00:01
von Talk19zehn
Wenn das Update aus Sicherheitsgründen auf 3.1.2 so wichtig ist, wie soll man denn nun vorgehen? Gibt´s ´ne Anleitung, wie die besagte Zeile tatsächlich zu ändern ist oder sollte man auf ein neuens Päckchen warten?


Edit:
HabNurNeFrage war ja wieder fix.... :D
Also vor dem Update die besagte Zeile mit dem Eintrag von Elsensee ändern?

Edit2:
Mir wurde nicht beim Sendevorgang angezeigt, dass in der Zwischenzeit ein neuer Beitrag gepostet wurde. Die vorherigen Angaben zur Ausführung einer Änderung der Einträge in jener Zeile, waren daher zunächst unklar, da zwei Vorschläge vorlagen.

Re: Debug Meldung beim Update von 3.1.2-RC1-dev auf 3.1.2

Verfasst: 27.11.2014 00:05
von HabNurNeFrage
Hi,

die Fehlermeldung enthält mit [ROOT]/phpbb/version_helper.php on line 262 bereits die Anleitung:

Öffnen ./phpbb/version_helper.php
und Zeile 262 => z.Zt. throw new \RuntimeException(call_user_func_array(array($this->user, 'lang'), $exception->getMessage()));
ersetzen durch throw new \RuntimeException($this->user->lang($exception->getMessage()));

Thats it.

LG

/** Edit wegen Edit */ :wink:
Beide Lösungen sind nahezu gleich.
Kirk verweist direkt auf die zugehörige Fehlermeldungsvariable, während Else :wink: eine weitere Klasse nach ihr suchen lässt.
Elsis Lösung sieht einfach nur wichtiger aus. Soll der Server doch rechnen. Dafür wiurde er ja gemacht :lol:

Re: Debug Meldung beim Update von 3.1.2-RC1-dev auf 3.1.2

Verfasst: 27.11.2014 00:51
von Elsensee
Habe ich dann mal gemeldet: PHPBB3-13393 :wink:

Re: Debug Meldung beim Update von 3.1.2-RC1-dev auf 3.1.2

Verfasst: 27.11.2014 00:56
von Gast234254
  1. Stellt sich mir die Frage, ob es auch den Anwender der offiziellen 3.1.1 Version betrifft zum Update der aktuellen Version 3.1.2?
    Denn bei Kirk handelte es sich um eine Entwickler-Version 3.1.2-RC1-dev. Bei meinem Update der Entwickler-Version von 3.1.2-RC1-dev ~ Build 2403 zu 3.1.3-RC1-dev ~ Build 2406 hatte ich keine Debug Meldungen.
  2. Stellt sich mir die anschließende Frage. Ob es an der Servereinstellungen liegen kann, das ich keine Debug Meldung erhalten habe?
  3. Noch eine letzte Frage, wurde ein Ticket erstellt?

Re: Debug Meldung beim Update von 3.1.2-RC1-dev auf 3.1.2

Verfasst: 27.11.2014 01:04
von HabNurNeFrage
Hi.

1a) bei mir trat es beim Update von official 3.1.1 zu official 3.1.2 auf
1b & 2) sofern die Versionsprüfung erfolgreich ist, also fsockopen aktiviert, kommt es gar nicht zum tragen

3) siehe Beitrag vor Deinem

LG