Bílá stránky při použití Tracy
- Blizard
- Člen | 45
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)
- Blizard
- Člen | 45
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.
- Jan Tvrdík
- Nette guru | 2595
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
Š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)
- Šaman
- Člen | 2659
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
Š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.
- Blizard
- Člen | 45
Š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
@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
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
@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
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
aerror_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
- Blizard
- Člen | 45
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 | 2659
@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
Š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.