<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>xlab &#187; debugowanie</title>
	<atom:link href="http://xlab.pl/tag/debugowanie/feed/" rel="self" type="application/rss+xml" />
	<link>http://xlab.pl</link>
	<description>XSolve laboratory - dzielimy się tym co wiemy...</description>
	<lastBuildDate>Mon, 09 Jan 2012 15:29:06 +0000</lastBuildDate>
	<language>pl</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Piekło die();</title>
		<link>http://xlab.pl/pieklo-die/</link>
		<comments>http://xlab.pl/pieklo-die/#comments</comments>
		<pubDate>Sat, 28 Nov 2009 23:40:50 +0000</pubDate>
		<dc:creator>Krzysztof Wawoczny</dc:creator>
				<category><![CDATA[Programowanie PHP]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[debugowanie]]></category>
		<category><![CDATA[FirePHP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.xlab.pl/?p=676</guid>
		<description><![CDATA[Natchnęło mnie dziś do pomyślenia jak uchronić się przed niebezpieczeństwami związanymi z stosowaniem die() w kodzie&#8230;tak wiem że była o tym parę razy mowa, że to zło w najczystszej postaci,  że najlepiej korzystać z xdebug, a najlepiej nigdy nie korzystać z die() w kodzie. Wszystko ma jednak swoje wady i zalety – o ile w [...]]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm">Natchnęło mnie dziś do pomyślenia jak uchronić się przed niebezpieczeństwami związanymi z stosowaniem die()  w kodzie&#8230;tak wiem że była o tym parę razy mowa, że to zło w najczystszej postaci,  że najlepiej korzystać z xdebug, a najlepiej nigdy nie korzystać z die() w kodzie.</p>
<p style="margin-bottom: 0cm">Wszystko ma jednak swoje wady i zalety – o ile w pracy xdebuga mogę sobie skonfigurować pod netbeansa to w domu nie korzystam z tego IDE (połączenie przez OpenVPN i dość częste skanowanie projektu jest nader uciążliwe). Dlatego zaczerpnąłem nieco mocy googla i po kilku testach przedstawiam: <strong> FirePHP</strong>.</p>
<p><!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm"><strong>FirePHP</strong> to całkiem zgrabny logger dla PHP wykorzystujący <strong>Firebuga</strong> – ku mojemu zdziwieniu jest to całkiem niezły plugin, do jego działania wystarczy mieć zainstalowaną wtyczkę Firebug z włączoną zakładką sieć i konsola. Instalując FirePHP trzeba jeszcze pamiętać o zaciągnięciu biblioteki FirePHPCore, którą rozpakowujemy do katalogu roota (w moim przypadku to katalog web w symfony).  FirePHP pokaże się jako niebieski robal (widoczny na poniższym zrzucie).</p>
<p style="margin-bottom: 0cm">Mając to wszystko jesteśmy niemal gotowi by bezpiecznie debugować skrypty. Do skryptu dołączamy:</p>
<pre class="php">require_once('FirePHPCore/FirePHP.class.php');</pre>
<p><!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm">Teraz już poprzez wywołanie w postaci:</p>
<p style="margin-bottom: 0cm">
<pre class="php">$firephp = FirePHP::getInstance(true);
$firephp-&gt;log($var, 'nieobowiazkowy opis dla loga');</pre>
<p><!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm">Zobaczymy w zakładce konsola Firebuga wartość zmiennej $var poprzedzoną opisem podanym jako drugi parametr funkcji log.<br />
Dla własnej wygody napisałem krótką funkcję ustawiającą podstawowe parametry debugowania:</p>
<p style="margin-bottom: 0cm">
<pre class="php">/**
* Function is used for debuging this scrypt, in prod environment change
* $firephp-&gt;setEnabled(true); to false.
*
* @param object $var
* @param string $desc[optional]
*/
public function keep($var, $desc = null)
{
  $options = array(
  'maxObjectDepth' =&gt; 10,
  'maxArrayDepth' =&gt; 20,
  'useNativeJsonEncode' =&gt; true,
  'includeLineNumbers' =&gt; true);

  $firephp = FirePHP::getInstance(true);
  $firephp-&gt;setEnabled(true);
  $firephp-&gt;setOptions($options);
  $firephp-&gt;log($var, $desc);
}</pre>
<p><!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm">Ważne aby pamiętać iż dla własnego bezpieczeństwa należy w środowisku produkcyjnym ustawić setEnabled na false.</p>
<p style="margin-bottom: 0cm">Posłużę się Jobeetem, zatem moja funkcja index wygląda tak:</p>
<p style="margin-bottom: 0cm">
<pre class="php">public function executeIndex(sfWebRequest $request)
{
  $vars = 0;
  $this-&gt;categories = Doctrine::getTable('JobeetCategory')-&gt;getWithJobs();
  $this-&gt;keep($vars, "at line: ".__LINE__);
  $vars = 12;
  $this-&gt;keep($vars, "at line: ".__LINE__);
}</pre>
<p><!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm">drugi parametr funkcji keep służy mi jako informacja pozwalająca szybko odnaleźć miejsce z wywołaniem logera. Wynik logowania prezentuje się następująco:</p>
<p style="margin-bottom: 0cm;text-align: center"><a rel="attachment wp-att-677" href="http://www.xlab.pl/2009/11/pieklo-die/attachment/1/"><img class="size-medium wp-image-677 aligncenter" src="http://www.xlab.pl/wp-content/uploads/2009/11/1-300x172.jpg" alt="Debugowanie z użyciem FirePHP" width="300" height="172" /></a></p>
<p><!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm">Ciekawsze wyniki można uzyskać deklarując przykładową tablicę z danymi – najeżdżając kursorem myszy na wynik debugowania tablicy ukaże się okienko jak na poniższym zrzucie – możemy tutaj nieco dokładniej przyjrzeć się zwróconym wartościom.</p>
<p style="margin-bottom: 0cm;text-align: center"><a rel="attachment wp-att-688" href="http://www.xlab.pl/2009/11/pieklo-die/attachment/2/"><img class="size-medium wp-image-688 aligncenter" src="http://www.xlab.pl/wp-content/uploads/2009/11/2-300x172.jpg" alt="Debugowanie z FirePHP 2" width="300" height="172" /></a></p>
<p><!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm">Na koniec chciałbym zauważyć, że odświeżenie strony nie zawsze powoduje odświeżenie wyników debugowania, prowadzi to wręcz do ich utraty – należy wówczas kliknąć w Firebugu opcję Off a następnie On dzięki czemu zobaczymy aktualne dane.</p>
<p style="margin-bottom: 0cm">Zachęcam do korzystania z FirePHP i testowania jego pozostałych funkcjonalności.</p>
<p style="margin-bottom: 0cm"><a href="http://www.firephp.org/HQ/Use.htm">http://www.firephp.org/HQ/Use.htm</a></p>
]]></content:encoded>
			<wfw:commentRss>http://xlab.pl/pieklo-die/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

