Bílá stránky při použití Tracy

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

Zdravím,

projel jsem všechny diskuze které se týkali „Tracy (Laděnky)“ a zároveň mého problému. Nenašel jsem však žádnou správnou odpověď (plno diskuzí bylo hodně starých).

Zobrazí se mi bílá stránka pokud udělám nějakou chybu jako např.

<?php
	echo "Ahoj"
?>

Nemám zde středník. Měla by mi vyskočit Tracy, bohužel se tak ale nestane a mám jen bílou stránku.

Zkoušel jsem jsem vše možné (od mazání tempu, nastavování práv tak jak mají být aj.)

Tracy si v projektu načítám manuálně přes

<?php
	require_once(__DIR__ . '/include/tracy-pack/tracy.php');
	use Tracy\Debugger;
	Debugger::enable(Debugger::DEVELOPMENT, __DIR__ . "/logs");
?>

V případě že chybu oddělám, klasicky se mi zobrazí Debug Panel ve spodní části a všechno je moc fajn. V případě chyby vše zmizí a vrací 500:

Connection:close
Content-Type:text/html
Date:Mon, 17 Nov 2014 14:18:30 GMT
Server:Apache/2.2.22 (Ubuntu)
Vary:Accept-Encoding
X-Powered-By:PHP/5.3.10–1ubuntu3.11

X-Powered-By by měl být v případě funkčnosti jako X-Powered-By:Nette Framework

Nejslibnější řešení na tuto situace se mi zdálo že by byl problém v Apache v některém z modulů. Jistej si tím vůbec nejsem a pokud někdo todle řešil a vyřešil, dejte mi prosím vědět. Děkuji

Editoval Blizard (17. 11. 2014 15:23)

Milo
Nette Core | 1283
+
+2
-

Protože más syntaktickou chybu v souboru s inicializací Tracy, soubor se ani nespustí, tj. Tracy se nespustí. To nemá řešení, prostě soubor, který startuje Tracy, musí být syntakticky OK.

Editoval Milo (17. 11. 2014 16:50)

Blizard
Člen | 45
+
0
-

Milo napsal(a):

Protože más syntaktickou chybu v souboru s inicializací Tracy, soubor se ani nespustí, tj. Tracy se nespustí. To nemá řešení, prostě soubor, který startuje Tracy, musí být syntakticky OK.

Dobře, ale jakým způsobem mám teda docílit toho, aby se Tracy při nalezení syntaktické chyby spustila? Někde ji přece inicializovat musím.

Šaman
Člen | 2635
+
0
-

Zkus rozdělit skript na více souborů. Zaváděcí, asi index.php, jen načte Tracy, případně nějakou konfiguraci apod. a potom includuje výkonný soubor s vlastním kódem. Pak by v tom kódu už Tracy měla chyby hlásit.

Jan Tvrdík
Nette guru | 2595
+
0
-

Ono hlavně syntaktické chyby by Tracy neměla vůbec řešit. Na to je mnohem lepší použít statickou analýzu (např. v IDE nebo v rámci CI).

Blizard
Člen | 45
+
0
-

Šaman napsal(a):

Zkus rozdělit skript na více souborů. Zaváděcí, asi index.php, jen načte Tracy, případně nějakou konfiguraci apod. a potom includuje výkonný soubor s vlastním kódem. Pak by v tom kódu už Tracy měla chyby hlásit.

Zkusil jsem to rozdělit a je znatelný rozdíl. Tentokrát už server neodesílá vůbec nic.

V jednom souboru načítám Tracy a do tohoto souboru vkládám další kde je chyba. Opět pokud vkládaný soubor s chybou zakomentuji tak se Tracy zobrazí, v případě odkomentování vůbec nic.

<?php


	require_once(__DIR__ . '/include/tracy-pack/tracy.php'); use Tracy\Debugger;

	Debugger::enable(Debugger::DEVELOPMENT, __DIR__ . "/logs");


	include("_ladenka-obsah.php");
?>

Editoval Blizard (17. 11. 2014 18:36)

Blizard
Člen | 45
+
0
-

Jan Tvrdík napsal(a):

Ono hlavně syntaktické chyby by Tracy neměla vůbec řešit. Na to je mnohem lepší použít statickou analýzu (např. v IDE nebo v rámci CI).

To chápu, použil jsem tento příklad pro jednodušší znázornění a řešení problému.

Šaman
Člen | 2635
+
0
-

Zkusil jsem to a funguje to. Syntaktické chyby v souboru, ve kterém se inicializuje Tracy, být nesmí, ale v includovaném souboru ano. (V app.php odmaž středník).

P.S. Pokud vynechám středník na řádku, kde includuji app.php, tak mi vyskočí php chyba „Parse error: syntax error, unexpected end of file in …\index.php on line 5“. Otázka tedy je, proč tobě vyskoči pětistovka. Zkontroluj si, že máš v php nastavené:
error_reporting = E_ALL | E_STRICT
display_errors = On

Editoval Šaman (17. 11. 2014 19:18)

Blizard
Člen | 45
+
0
-

Šaman napsal(a):

Zkusil jsem to a funguje to. Syntaktické chyby v souboru, ve kterém se inicializuje Tracy být nesmí, ale v includovaném souboru ano. (V app.php odmaž středník).

Zkoušel jsi místo

<?php
require_once(__DIR__ . '/vendor/autoload.php');
?>

dát přímo cestu pouze k Tracy? Bez Autoloadu. Použil jsem tvůj příklad a stále stejný výsledek.

Šaman
Člen | 2635
+
0
-

Já ten svůj příspěvek mezitím doplnil. :)

Editoval Šaman (17. 11. 2014 19:18)

Blizard
Člen | 45
+
0
-

Šaman napsal(a):

Já ten svůj příspěvek mezitím doplnil. :)

Upraveno na:

<?php
	ini_set("display_errors", 1);
	error_reporting(E_ALL | E_STRICT);
	require_once(__DIR__ . '/include/tracy-pack/tracy.php'); use Tracy\Debugger;
	Debugger::enable(Debugger::DEVELOPMENT, __DIR__ . "/logs");
	include(__DIR__  . "/_ladenka-obsah.php");
?>

V případě oddělání středníku u načítání obsahu vrátí pětikilo, v případě doplnění nevrátí vůbec nic.. Když poskytnu phpinfo, myslíš že bys v tom něco viděl?

Editoval Blizard (17. 11. 2014 20:01)

Azathoth
Člen | 495
+
0
-

@Blizard myslím, že @Šaman psal: Syntaktické chyby v souboru, ve kterém se inicializuje Tracy, být nesmí, ale v includovaném souboru ano.

Tedy, pokud máš v tomto souboru, který nám ukazuješ, syntaktickou chybu, tak se Tracy správně nenačte. Zkus mít tenhle soubor bezchybně a udělat chybu až _ladenka-obsah.php.

Blizard
Člen | 45
+
0
-

Azathoth napsal(a):

@Blizard myslím, že @Šaman psal: Syntaktické chyby v souboru, ve kterém se inicializuje Tracy, být nesmí, ale v includovaném souboru ano.

Tedy, pokud máš v tomto souboru, který nám ukazuješ, syntaktickou chybu, tak se Tracy správně nenačte. Zkus mít tenhle soubor bezchybně a udělat chybu až _ladenka-obsah.php.

Možná to vypadá že jsem uplně mimo, ale během těchto rad zkouším všechny možnosti a o příspěvek výše jsem se zmínil o tom, že to buď skončí chybou 500 (pokud je chyba u laděnky) nebo server nevrátí vůbec nic (je chyba v načítaném souboru).

Milo
Nette Core | 1283
+
0
-

@Blizard Je úplně jedno, jestli děláš ini_set() pro zobrazení chyb, nebo načteš Tracy. Jakmile máš v tom souboru syntaktickou chybu, soubor neprojde compile-time fází a do run-time se ani nedostane. Žádný kód se nespustí. Tak to funguje v PHP.

Pokud Ti jde jen o vývojové prostředí, nastav si v php.ini direktivy display_errors a error_reporting. Tracy se sice nenačte, ale uvidíš chybu. A jakýkoliv jiný error už ukáže Tracy.

Blizard
Člen | 45
+
0
-

Milo napsal(a):

@Blizard Je úplně jedno, jestli děláš ini_set() pro zobrazení chyb, nebo načteš Tracy. Jakmile máš v tom souboru syntaktickou chybu, soubor neprojde compile-time fází a do run-time se ani nedostane. Žádný kód se nespustí. Tak to funguje v PHP.

Pokud Ti jde jen o vývojové prostředí, nastav si v php.ini direktivy display_errors a error_reporting. Tracy se sice nenačte, ale uvidíš chybu. A jakýkoliv jiný error už ukáže Tracy.

Poprosil bych tě o nějakou chybu kterou tam mám dát (kod do vkladaneho souboru). Napíšu zpět jestli to pomohlo a tracy alespon něco ukazuje nebo nikoliv. Děkuju

Azathoth
Člen | 495
+
+1
-

Zkus třeba

$myAwesomeArray = array("one", "two");
echo ($myAwesomeArray[50]);
Blizard
Člen | 45
+
0
-

Azathoth napsal(a):

Zkus třeba

$myAwesomeArray = array("one", "two");
echo ($myAwesomeArray[50]);

Todle funguje. Dole v baru mi vypíše špatný index. Každopádně se mi to i tak nějak nezdá. V jiných projektech v případě, že jsem měl cokoliv špatně (syntaktickou nebo sémantickou chybu) tak mi to laděnka vždy odchytila a vypsala podrobný přehled o tom, kde se to nachází a o co se jedná. Chybu mi to vždy uložilo do logu (nyní se žádné chyby nezapisují)…

Šaman
Člen | 2635
+
0
-

@Blizard: V nastavení serveru se moc nevyznám. Ale Tracy odchytává PHP chyby. Jestli ti ani bez Tracy nevyskočí PHP chyba, tak to není záležitost Nette.
Začni od toho. Aby místo chyby 500 vyskočila ta ošklivá, nenaformátovaná php hláška o chybě. Imho, pak ti bude běhat i Tracy.

Editoval Šaman (17. 11. 2014 21:04)

Blizard
Člen | 45
+
0
-

Šaman napsal(a):

@Blizard: V nastavení serveru se moc nevyznám. Ale Tracy odchytává PHP chyby. Jestli ti ani bez Tracy nevyskočí PHP chyba, tak to není záležitost Nette.
Začni od toho. Aby místo chyby 500 vyskočila ta ošklivá, nenaformátovaná php hláška o chybě. Imho, pak ti bude běhat i Tracy.

Na todle stačilo povolit error reporting a povolit chyby. Jak jsem psal před chvílí výše, laděnka jde, ale pouze u některých typů chyb.. Děkuji za pomoc.