[2009-07-24] Debug – nesmyslné znaky (PHP 5.2)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jan Jakeš
Člen | 177
+
0
-

Stáhl jsem nejnovější revizi pro PHP 5.2 a místo vykreslení krásné laděnky se mi zobrazí obrazovka plná nesmyslných znaků. Stává se mi to i u příkladů z distribuce. Dělá vám to taky nebo je chyba u mě? (Ve verzi pro PHP 5.3 je vše OK).

ic
Člen | 430
+
0
-

No mě teda 464 jede bez problémů a to včetně laděnky (na ostrém webu), každopádně to vypadá že je někde špatně nastavené kódování.

Jan Jakeš
Člen | 177
+
0
-

To rozhodně. Zkoušel jsem v /etc/apache2/conf.d/charset nastavit napevno AddDefaultCharset UTF-8, ale nic se nezměnilo.

Jan Jakeš
Člen | 177
+
0
-

Aha. Tak je to zřejmě chyba Firefoxu. V Chrome všechno běží, jak má. Zobrazit > Znaková sada mám nastaveno na UTF-8 a nepomáhá. Nevíte někdo, kde jinde by mohla být chyba?

buff
Člen | 63
+
0
-

Nevím. Dělá mi to taky. Zatím jsem to neřešil, ale mám neověřené podezření, že je to tím, že se pošle špatný MIME typ v hlavičce a Chrome si to sám detekuje, zatímco Firefox tomu věří. Máš Windows nebo Linux? Mně to dělá pod Linuxem.

Jan Jakeš
Člen | 177
+
0
-

Linux, konkrétně Ubuntu. Je fakt, že MIME typ by v tom možná mohl hrát roli…

Ondřej Mirtes
Člen | 1536
+
0
-

Jak nastavit správný MIME typ? V BasePresenteru či v DefaultPresenteru dejte do metody beforeRender toto:

Environment::getHttpResponse()->setContentType('text/html','utf-8');

Dále zkontrolujte, jestli máte uvedené utf-8 v meta tagu v HTML hlavičce:

<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
Slavista
Člen | 11
+
0
-

Taky jsem to zaregistroval. Nevím… zdá se, že to dělá jen u některých chyb, např. při BadRequestException #404, při chybějící šabloně. U jiných se Laděnka zobrazí.

Server vrací 500 Internal Server Error a na stránku se nahrne nezpracovaná komprimovaná stránka.

Hlavička:
HTTP/1.x 500 Internal Server Error
Date: Thu, 30 Jul 2009 17:37:14 GMT
Server: Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.1 with Suhosin-Patch
X-Powered-By: Nette Framework
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=1cbcc8fa5bee10984d676200de905767; path=/; httponly
Set-Cookie: nette-browser=0.809931669574; path=/; httponly
X-Wf-Protocol-dibi: http://meta.wildfirehq.org/Protocol/JsonStream/0.2
X-Wf-dibi-Plugin-1: http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.2.0
X-Wf-dibi-Structure-1: http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1
Content-Encoding: , gzip
Vary: Accept-Encoding
Content-Length: 9378
Connection: close
Content-Type: text/html

Pomůže ve FF v about:config nastavit network.http.accept-encoding jen na deflate.

Jan Jakeš
Člen | 177
+
0
-

LastHunter: Ale tady jde o výpis z laděnky. To co radíš by souviselo například s mým vlastním výstupem…

Slavista: To sice pomůže, ale zničí ti to většinu ostatních webů :)

Slavista
Člen | 11
+
0
-

To Juan: Jak zničí? Nic takového nepozoruji. Po reloadu všechny weby jedou, jen se nepoužívá gzip komprese.

Samozřejmě přiznávám, že je to jen obezlička, která mně pomáhá, než se zjistí, v čem skutečně čert vězí. Možná u tebe vězí ještě v něčem jiném, proto ty další problémy.

Jan Jakeš
Člen | 177
+
0
-

Slavista: No zkus takto spustit třeba iGoogle, Google Calendar, Google Picasa, Facebook a uvidíš :) Rozsypeš si tím stránky, které kompresi využívají…

Hynek
Člen | 9
+
0
-

Tenhle problém jsem taky řešil při přechodu z 0.8 na 0.9.
Nakonec mě pomohlo tuším zakomentování Debug::enable(); v bootstrapu. Pak už laděnka běžela jak má.
V change logu jsem viděl nějaké změny ohledne debugu, ale nečetl jsem si je, tak jsem to přisuzoval tomu.

Jinak jsem taky na Ubuntu@firefox

Editoval Hynek (30. 7. 2009 21:31)

Jan Jakeš
Člen | 177
+
0
-

Tím pouze vypneš laděnku. Uznávám, že těch nesmyslných znaků se tím zbavíš, ale to není to, co hledám :D

Jan Jakeš
Člen | 177
+
0
-

Tak jsem trochu pátral a problém způsobuje tento řádek:

header('Content-Encoding:', TRUE); // override gzhandler

Napadá mě… Nemělo by to stejnou funkci, kdyby tam byl poslán nějaký „nesmysl“ – tzn. něco jiného, než gzip, deflate, atd.? Myslím tím něco jako:

header('Content-Encoding: nejaky_nesmysl', TRUE); // override gzhandler

To už by zkousl i Firefox…

David Grudl
Nette Core | 8228
+
0
-

Pomohlo by header(‚Content-Encoding: identity‘) ?

Slavista
Člen | 11
+
0
-

Pomohlo by header(‚Content-Encoding: identity‘) ?

Mně pomohlo.

romansklenar
Člen | 655
+
0
-

Nemám to jak vyzkoušet, protože chyba se u mě neprojevuje – proto se zeptám: Je třeba hlavičku i nahrazovat? header('Content-Encoding: identity') nebo header('Content-Encoding: identity', TRUE) ?

Slavista
Člen | 11
+
0
-

header(‚Content-Encoding: identity‘)

header(‚Content-Encoding: identity‘, TRUE)

V obou výše uvedených případech je to bez problémů. Stejně tak i když celý řádek zakomentuji.

Při header('Content-Encoding: ', TRUE) vidím v hlavičce rozdíl jen v čárce navíc:
rozsypaný čaj = Content-encoding: , gzip

Hynek
Člen | 9
+
0
-

Juan napsal(a):

Tím pouze vypneš laděnku. Uznávám, že těch nesmyslných znaků se tím zbavíš, ale to není to, co hledám :D

Pravda no, jsem si říkal že je ta laděnka v nové verzi nějaká divná. Po zakomentování debugu na mě při fatal errorech vyskakovala furt červená stránka, tak mě ani nenapadlo, že jsem ji vypnul. Myslel jsem si že se nově zapíná v development módu sama.

Jinak nastavení content-encoding na identity mě taky pomohlo .

Jan Jakeš
Člen | 177
+
0
-

romansklenar: Oba zápisy header('Content-Encoding: identity') i header('Content-Encoding: identity', TRUE) přepisují hlavičku. Kdyby si chtěl údaj pouze do hlavičky přidat, muselo by tam být explicitně uvedeno FALSE. Hodnota TRUE je tam implicitně, takže se uvádět nemusí.

EDIT: Jinak zdá se, že takto s identity to funguje bez problémů.

Editoval Juan (31. 7. 2009 14:49)

romansklenar
Člen | 655
+
0
-

Opraveno.

Jan Jakeš
Člen | 177
+
0
-

Super!

OT: Jakým způsobem se generují stáhnutelné revize do sekce Download? To musí nějak spustit David? Já jen, že poslední dvě revize ke stáhnutí nejsou…

romansklenar
Člen | 655
+
0
-

Jojo přesně tak, musí to David prohnat skriptem, který to přegeneruje pro různé verze a odešle na FTP a kdoví co ještě. Prý až nadejde ten čas, že se Nette bude psát v SVN pod PHP 5.3, tak snad bude součástí skript, který si může každý spustit u sebe.