[TYPO3-german] Fwd: Extension Manager Problem
Gerald Draxler
master_hax at gmx.net
Thu Jul 5 10:23:35 CEST 2012
Hallo Steffen.
Die genaue Änderung war in der Datei class.typo3ajax.php in der Methode renderAsJSON().
Dort gibt es die Code-Zeile (im Standard-Code):
$content = json_encode($this->content);
Diese Zeile haben wir erstetzt mit
$content = __json_encode($this->content);
Somit wird die zuvor gepostete Methode aufgerufen und dann klappt das wieder. Das Problem liegt also an der nativen PHP (5.3.14) Methode json_encode().
Hoffe das beantwortet deine Frage!
lg
-------- Original-Nachricht --------
> Datum: Thu, 05 Jul 2012 08:25:00 +0200
> Von: Steffen Gebert <steffen.gebert at typo3.org>
> An: typo3-german at lists.typo3.org
> Betreff: Re: [TYPO3-german] Fwd: Extension Manager Problem
> Ja, Core-Hacking ist natürlich schlecht.
>
> Was hast du an der Methode geändert?
>
> Kind regards
> Steffen
>
> --
> Steffen Gebert
> TYPO3 v4 Core Team Member
> TYPO3 Server Administration Team Member
>
> TYPO3 .... inspiring people to share!
> Get involved: http://typo3.org
>
> I work for TYPO3 solely in my spare time. If you think that
> my work helps you running your business, you are invited to
> send me a donation via PayPal to this email address. Thanks
>
>
> Am 7/5/12 7:26 AM, schrieb Gerald Draxler:
> > Hallo Steffen.
> >
> > Haben einen Workaround für dieses Problem gefunden.
> >
> > Haben in der class.typo3ajax.php die Methode __json_encode() mit dieser
> hier ersetzt.
> >
> > function __json_encode( $data ) {
> > if( is_array($data) || is_object($data) ) {
> > $islist = is_array($data) && ( empty($data) || array_keys($data)
> === range(0,count($data)-1) );
> >
> > if( $islist ) {
> > $json = '[' . implode(',', array_map('__json_encode', $data) ) .
> ']';
> > } else {
> > $items = Array();
> > foreach( $data as $key => $value ) {
> > $items[] = __json_encode("$key") . ':' . __json_encode($value);
> > }
> > $json = '{' . implode(',', $items) . '}';
> > }
> > } elseif( is_string($data) ) {
> > # Escape non-printable or Non-ASCII characters.
> > # I also put the \\ character first, as suggested in comments on
> the 'addclashes' page.
> > $string = '"' . addcslashes($data, "\\\"\n\r\t/" . chr(8) .
> chr(12)) . '"';
> > $json = '';
> > $len = strlen($string);
> > # Convert UTF-8 to Hexadecimal Codepoints.
> > for( $i = 0; $i < $len; $i++ ) {
> > $char = $string[$i];
> > $c1 = ord($char);
> >
> > # Single byte;
> > if( $c1 <128 ) {
> > $json .= ($c1 > 31) ? $char : sprintf("\\u%04x", $c1);
> > continue;
> > }
> >
> > # Double byte
> > $c2 = ord($string[++$i]);
> > if ( ($c1 & 32) === 0 ) {
> > $json .= sprintf("\\u%04x", ($c1 - 192) * 64 + $c2 - 128);
> > continue;
> > }
> >
> > # Triple
> > $c3 = ord($string[++$i]);
> > if( ($c1 & 16) === 0 ) {
> > $json .= sprintf("\\u%04x", (($c1 - 224) <<12) + (($c2 - 128)
> << 6) + ($c3 - 128));
> > continue;
> > }
> >
> > # Quadruple
> > $c4 = ord($string[++$i]);
> > if( ($c1 & 8 ) === 0 ) {
> > $u = (($c1 & 15) << 2) + (($c2>>4) & 3) - 1;
> >
> > $w1 = (54<<10) + ($u<<6) + (($c2 & 15) << 2) + (($c3>>4) & 3);
> > $w2 = (55<<10) + (($c3 & 15)<<6) + ($c4-128);
> > $json .= sprintf("\\u%04x\\u%04x", $w1, $w2);
> > }
> > }
> > } else {
> > # int, floats, bools, null
> > $json = strtolower(var_export( $data, true ));
> > }
> > return $json;
> > }
> >
> > Jetzt klappt es wieder. Ist zwar nicht die beste Lösung, weil wir bei
> jedem Typo3 update jetzt auch schauen müssen, ob der Extension Manager noch
> funktioniert.
> >
> > Vielleicht fällt dir etwas besseres ein!
> >
> > lg Gerald
> >
> >
> > -------- Original-Nachricht --------
> >> Datum: Wed, 04 Jul 2012 09:23:35 +0200
> >> Von: Steffen Gebert <steffen.gebert at typo3.org>
> >> An: typo3-german at lists.typo3.org
> >> Betreff: Re: [TYPO3-german] Fwd: Extension Manager Problem
> >
> >> Hallo Gerald,
> >>
> >> kannst du darauf mal ein json_encode() machen und schaun, wo es
> >> abgeschnitten wird?
> >>
> >> Kind regards
> >> Steffen
> >>
> >> --
> >> Steffen Gebert
> >> TYPO3 v4 Core Team Member
> >> TYPO3 Server Administration Team Member
> >>
> >> TYPO3 .... inspiring people to share!
> >> Get involved: http://typo3.org
> >>
> >> I work for TYPO3 solely in my spare time. If you think that
> >> my work helps you running your business, you are invited to
> >> send me a donation via PayPal to this email address. Thanks
> >>
> >>
> >> Am 6/28/12 9:42 AM, schrieb Gerald Draxler:
> >>> Hallo Steffen.
> >>> Erstmal vielen Dank für deine Hilfe!
> >>>
> >>> $TYPO3_CONF_VARS['BE']['forceCharset'] = 'utf-8';
> >>> $TYPO3_CONF_VARS['SYS']['setDBinit'] = 'SET NAMES utf8;';
> >>>
> >>> wenn ich $this->content ausgebe bekomme ich beim Aufruf der
> verfügbaren
> >> Extensions folgendes array zurück:
> >>>
> >>> Array
> >>> (
> >>> [0] => Array
> >>> (
> >>> [tid] => 7
> >>> [action] => ExtDirect
> >>> [method] => setState
> >>> [type] => rpc
> >>> [result] => Array
> >>> (
> >>> [success] => 1
> >>> [params] => stdClass Object
> >>> (
> >>> [scope] => stdClass Object
> >>> (
> >>> [events] => stdClass Object
> >>> (
> >>> [savefailure] => 1
> >>> [savesuccess] => 1
> >>> [readfailure] => 1
> >>> [readsuccess] => 1
> >>> [statechange] => 1
> >>> )
> >>>
> >>> [state] => stdClass Object
> >>> (
> >>> [mainTab] => stdClass
> >> Object
> >>> (
> >>> [activeTab] => 1
> >>> )
> >>>
> >>> [LocalList] => stdClass
> >> Object
> >>> (
> >>> [columns] =>
> Array
> >>> (
> >>> [0] =>
> >> stdClass Object
> >>> (
> >>>
> >> [id] => 0
> >>>
> >> [width] => 20
> >>>
> >> [sortable] => 1
> >>> )
> >>>
> >>> [1] =>
> >> stdClass Object
> >>> (
> >>>
> >> [id] => 1
> >>>
> >> [width] => 47
> >>>
> >> [sortable] => 1
> >>> )
> >>>
> >>> [2] =>
> >> stdClass Object
> >>> (
> >>>
> >> [id] => 2
> >>>
> >> [width] => 744
> >>>
> >> [sortable] => 1
> >>> )
> >>>
> >>> [3] =>
> >> stdClass Object
> >>> (
> >>>
> >> [id] => 3
> >>>
> >> [width] => 397
> >>>
> >> [sortable] => 1
> >>> )
> >>>
> >>> [4] =>
> >> stdClass Object
> >>> (
> >>>
> >> [id] => 4
> >>>
> >> [width] => 347
> >>>
> >> [hidden] => 1
> >>>
> >> [sortable] => 1
> >>> )
> >>>
> >>> [5] =>
> >> stdClass Object
> >>> (
> >>>
> >> [id] => 5
> >>>
> >> [width] => 596
> >>>
> >> [hidden] => 1
> >>>
> >> [sortable] => 1
> >>> )
> >>>
> >>> [6] =>
> >> stdClass Object
> >>> (
> >>>
> >> [id] => 6
> >>>
> >> [width] => 248
> >>>
> >> [hidden] => 1
> >>>
> >> [sortable] => 1
> >>> )
> >>>
> >>> [7] =>
> >> stdClass Object
> >>> (
> >>>
> >> [id] => 7
> >>>
> >> [width] => 100
> >>>
> >> [sortable] => 1
> >>> )
> >>>
> >>> )
> >>>
> >>> [sort] =>
> stdClass
> >> Object
> >>> (
> >>> [field]
> =>
> >> title
> >>>
> [direction]
> >> => DESC
> >>> )
> >>>
> >>> [group] =>
> category
> >>> [filters] =>
> >> stdClass Object
> >>> (
> >>> )
> >>>
> >>> )
> >>>
> >>> [em-languagegrid] =>
> >> stdClass Object
> >>> (
> >>> [columns] =>
> Array
> >>> (
> >>> [0] =>
> >> stdClass Object
> >>> (
> >>>
> >> [id] => checker
> >>>
> >> [width] => 20
> >>> )
> >>>
> >>> [1] =>
> >> stdClass Object
> >>> (
> >>>
> >> [id] => lang-label
> >>>
> >> [width] => 103
> >>>
> >> [sortable] => 1
> >>> )
> >>>
> >>> [2] =>
> >> stdClass Object
> >>> (
> >>>
> >> [id] => lang-key
> >>>
> >> [width] => 103
> >>>
> >> [sortable] => 1
> >>> )
> >>>
> >>> )
> >>>
> >>> [sort] =>
> stdClass
> >> Object
> >>> (
> >>> [field]
> =>
> >> label
> >>>
> [direction]
> >> => ASC
> >>> )
> >>>
> >>> )
> >>>
> >>> )
> >>>
> >>> [delay] => 750
> >>> [dirty] =>
> >>> [started] => 1
> >>> [autoStart] => 1
> >>> [autoRead] =>
> >>> [key] =>
> moduleData.tools_em.States
> >>> [logFailure] =>
> >>> [logSuccess] =>
> >>> [queue] => Array
> >>> (
> >>> [0] => stdClass Object
> >>> (
> >>> [name] =>
> mainTab
> >>> [value] =>
> stdClass
> >> Object
> >>> (
> >>>
> [activeTab]
> >> => 0
> >>> )
> >>>
> >>> )
> >>>
> >>> )
> >>>
> >>> [saveBaseParams] => stdClass
> Object
> >>> (
> >>> )
> >>>
> >>> [readBaseParams] => stdClass
> Object
> >>> (
> >>> )
> >>>
> >>> [paramNames] => stdClass Object
> >>> (
> >>> [key] => key
> >>> [name] => name
> >>> [value] => value
> >>> [data] => data
> >>> )
> >>>
> >>> [dt] => stdClass Object
> >>> (
> >>> )
> >>>
> >>> )
> >>>
> >>> [queue] => Array
> >>> (
> >>> [0] => stdClass Object
> >>> (
> >>> [name] => mainTab
> >>> [value] => stdClass
> Object
> >>> (
> >>> [activeTab] => 0
> >>> )
> >>>
> >>> )
> >>>
> >>> )
> >>>
> >>> [params] => stdClass Object
> >>> (
> >>> [key] =>
> moduleData.tools_em.States
> >>> [data] =>
> >> [{"name":"mainTab","value":{"activeTab":0}}]
> >>> )
> >>>
> >>> )
> >>>
> >>> )
> >>>
> >>> [debug] =>
> >>> )
> >>>
> >>> )
> >>>
> >>>
> >>> -------- Original-Nachricht --------
> >>>> Datum: Thu, 28 Jun 2012 08:53:28 +0200
> >>>> Von: Steffen Gebert <steffen.gebert at typo3.org>
> >>>> An: typo3-german at lists.typo3.org
> >>>> Betreff: Re: [TYPO3-german] Fwd: Extension Manager Problem
> >>>
> >>>> -----BEGIN PGP SIGNED MESSAGE-----
> >>>> Hash: SHA1
> >>>>
> >>>> Hallo Gerald,
> >>>>
> >>>> okay, die Stelle hatte ich mir schon angeschaut. Nur der
> Rückgabewert
> >>>> wird da eben nicht weiter geprüft, aber das Ergebnis scheint jetzt
> >>>> tatsächlich anders zu sein.
> >>>>
> >>>>> protected function renderAsJSON() {
> >>>>> // If the backend does not run in UTF-8 then we need to convert it
> >> to
> >>>> unicode as
> >>>>> // the json_encode method will return empty otherwise
> >>>>> if ($this->charset != $this->requestCharset) {
> >>>>> $GLOBALS['LANG']->csConvObj->convArray($this->content,
> >> $this->charset,
> >>>> $this->requestCharset);
> >>>>> }
> >>>>>
> >>>>> $content = json_encode($this->content);
> >>>>
> >>>> Ich würde mal vermuten, dass dein System nicht korrekt konifguiert
> >> ist.
> >>>> Was hast du für $TYPO3_CONF_VARS['BE']['forceCharset'] sowie bei
> >> DBinit?
> >>>>
> >>>> Du könntest auch mal den Wert von $this->content direkt ausgeben
> >> lassen
> >>>> (und dann zB über Firebug die Ausgabe des AJAX-calls begutachten).
> >> Dann
> >>>> wüssten wir jedenfalls, woher der falsch kodierte Inhalt kommt.
> >>>>
> >>>> Kind regards
> >>>> Steffen
> >>>>
> >>>> - --
> >>>> Steffen Gebert
> >>>> TYPO3 v4 Core Team Member
> >>>> TYPO3 Server Administration Team Member
> >>>>
> >>>> TYPO3 .... inspiring people to share!
> >>>> Get involved: http://typo3.org
> >>>>
> >>>> I work for TYPO3 solely in my spare time. If you think that
> >>>> my work helps you running your business, you are invited to
> >>>> send me a donation via PayPal to this email address. Thanks
> >>>>
> >>>> On 28.06.12 08:35, Gerald Draxler wrote:
> >>>>> Hier das gesamte Feedback von unserem Hoster:
> >>>>>
> >>>>> "wir konnten den Fehler auf ein Versionsupdate von PHP 5.3.13 auf
> >> 5.3.14
> >>>> zurückführen, das am Freitag vorgenommen wurde.
> >>>>>
> >>>>> Ein Trace Ihrer PHP-Prozesse liefert:
> >>>>>
> >>>>> write(4, "o\1\0\0\3INSERT INTO sys_log
> >>>>> (userid,type,action,error,details_nr,details,IP,tstamp,workspace)
> >> VALUES
> >>>>> ('5','5','0','1','0','Core: Error handler (BE): PHP Warning:
> >>>> json_encode() [<a
> >>>>> href=\\'function.json-encode\\'>function.json-encode</a>]: Invalid
> >> UTF-8
> >>>> sequence in argument in
> >>>> /usr/www/users/standm/typo3/classes/class.typo3ajax.php
> >>>>> line 275','80.150.215.98','1340635563','0')", 371) = 371 read(4,
> >>>> "\t\0\0\1\0\1\374%\2\2\0\0\0", 16384) = 13
> >>>>>
> >>>>> Hier wird folgende Fehlermeldung ins Typo3 Datenbank-Log
> geschrieben:
> >>>>> Core: Error handler (BE): PHP Warning: json_encode() [<a
> >>>>> href=\\'function.json-encode\\'>function.json-encode</a>]: Invalid
> >> UTF-8
> >>>> sequence in argument in
> >>>> /usr/www/users/standm/typo3/classes/class.typo3ajax.php
> >>>>> line 275
> >>>>>
> >>>>> Dieser Fehler hängt höchstwahrscheinlich mit folgender Änderung
> >>>> zusammen, die das PHP Entwicklerteam in Version 5.3.14 vorgenommen
> hat:
> >>>>>
> >>>>> - JSON: Fixed bug #61537 (json_encode() incorrectly
> truncates/discards
> >>>>> information)
> >>>>>
> >>>>> Changelog einzusehen unter: http://www.php.net/ChangeLog-5.php
> >>>>> Link zum entsprechenden PHP-Bugreport: http://bugs.php.net/61537
> >>>>>
> >>>>> Im Klartext heißt das, dass die PHP-Funktion json_encode() bei
> >>>> fehlerhaftem Input nun NULL statt false zurückliefert, dies bringt
> >> offenbar Ihren
> >>>> Erweiterungsmanager durcheinander - an die entsprechende Funktion
> wurde
> >>>> bereits vor dem Update wohl fehlerhaft codierter UTF-8 Input
> >> übergeben, die
> >>>> Funktion überging dies aber (inkorrekter Weise), indem Sie einfach
> >> NULL
> >>>> zurücklieferte - nun wird aber false zurückgegeben und ein
> >> Typo3-Fehler
> >>>> ausgelöst.
> >>>>>
> >>>>> Korrekter Weg, dies zu lösen wäre aus unserer Sicht, den
> >> fehlerhaften
> >>>> Input zu vermeiden, stellt sich die Frage, woher dieser Input stammt,
> >>>> vermutlich aus Ihrer Datenbank - ohne die Typo3-Sourcen zu debuggen
> >> können wir
> >>>> dies aber nicht feststellen."
> >>>>>
> >>>>>
> >>>>> Sie haben von der Tabelle sys_log den Fehler entnommen und dieser
> wir
> >>>> eingetragen (wie schon weiter unten erwähnt), wenn der
> >> Extension-Manager
> >>>> aufgerufen wird.
> >>>>>
> >>>>> Beste Grüße
> >>>>>
> >>>>>
> >>>>> -------- Original-Nachricht --------
> >>>>>> Datum: Wed, 27 Jun 2012 17:10:56 +0200
> >>>>>> Von: Steffen Gebert <steffen.gebert at typo3.org>
> >>>>>> An: typo3-german at lists.typo3.org
> >>>>>> Betreff: Re: [TYPO3-german] Fwd: Extension Manager Problem
> >>>>>
> >>>>> Ja, soweit hab ich das schon verstanden, nur versteh ich noch nicht,
> >> wo
> >>>>> die fehlerhafte Stelle im Code sein soll.
> >>>>>
> >>>>> Kind regards
> >>>>> Steffen
> >>>>>
> >>>> _______________________________________________
> >>>> TYPO3-german mailing list
> >>>> TYPO3-german at lists.typo3.org
> >>>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
> >>>>
> >>>> -----BEGIN PGP SIGNATURE-----
> >>>> Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
> >>>> Comment: GPGTools - http://gpgtools.org
> >>>> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
> >>>>
> >>>> iQEcBAEBAgAGBQJP6/9oAAoJEIskG/rSlyw4Nv0IAKb2lrYGFit6nJ0ktsSgVyUm
> >>>> 1tAezaSxTonLLyJEeXtqAOJgFOCHwg/dxOsMjRaGtnqad18C3PHntjY65xq9My/1
> >>>> PYCL6T6MLdDt41L96cPu1sBp+cTcsVjkr9Pca/0X/D3LTn8VneBa47x3KVWIr+G4
> >>>> /trBu05mhfa2N6bX4VPHkxrT3i8y4bNdKwG4Yh5BRfes8h4JrwRUifEhzsa4T+KO
> >>>> 1Al+9hApjcvk05Z2k+x/iB9g25/gDOa5OBUJB5c46L1PT2JzgZDJRHAbrLS34cWt
> >>>> VUttCRalW7LyXMGBFpBcnwDgwpVgIU+UB3+RxDJqoZallAA+mOCC+Lfivhbc5sg=
> >>>> =ZY24
> >>>> -----END PGP SIGNATURE-----
> >>>> _______________________________________________
> >>>> TYPO3-german mailing list
> >>>> TYPO3-german at lists.typo3.org
> >>>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
> >>
> >> _______________________________________________
> >> TYPO3-german mailing list
> >> TYPO3-german at lists.typo3.org
> >> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
>
> _______________________________________________
> TYPO3-german mailing list
> TYPO3-german at lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
More information about the TYPO3-german
mailing list