<?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>Red-Pill Blog &#187; PHP</title>
	<atom:link href="http://blog.red-pill.cz/category/programovani/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.red-pill.cz</link>
	<description>Blog o internetu, programování a jiných věcech…</description>
	<lastBuildDate>Thu, 29 Apr 2010 13:20:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ip2long() na 32bit systémech</title>
		<link>http://blog.red-pill.cz/2010/02/08/ip2long-na-32bit-systemech/</link>
		<comments>http://blog.red-pill.cz/2010/02/08/ip2long-na-32bit-systemech/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 14:22:31 +0000</pubDate>
		<dc:creator>petr.kratina</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programování]]></category>

		<guid isPermaLink="false">http://blog.red-pill.cz/?p=325</guid>
		<description><![CDATA[
<p>Funkce na převod IP adresy do číselného tvaru (ideální na ukládání a
práci s rozsahy IP v DB) se nechová korektně na 32bit systémech. Ačkoli
název napovídá, že vrací longint, na 32bitech vrací obyčejný int32,
takze přeteče a začne vracet zápornou hodnotu, postupy jak to vyřešit
jsou dva:</p>

<p>$ip = ip2long(‚194.108­.129.194‘);</p>

<p>if ($ip &lt; 0) {     $ip += 4294967296; }</p>

<p>nebo</p>

<p>$prt = explode(‚.‘, ‚194.108.129.194‘);</p>

<p>$ip = 16777216*$prt[0] […]</p>

<!-- by Texy2! -->]]></description>
			<content:encoded><![CDATA[
<p>Funkce na převod IP adresy do číselného tvaru (ideální na ukládání a
práci s rozsahy IP v DB) se nechová korektně na 32bit systémech. Ačkoli
název napovídá, že vrací longint, na 32bitech vrací obyčejný int32,
takze přeteče a začne vracet zápornou hodnotu, postupy jak to vyřešit jsou
dva:<br />
<br />
<code>$ip = ip2long(‚194.108­.129.194‘);<br />
<br />
if ($ip &lt; 0) {<br />
    $ip += 4294967296;<br />
}</code></p>

<p>nebo</p>

<p><code>$prt = explode(‚.‘, ‚194.108.129.194‘);<br />
<br />
$ip = 16777216*$prt[0] + 65536*$prt[1] + 256*$prt[2] + $prt[3];</code></p>

<!-- by Texy2! -->]]></content:encoded>
			<wfw:commentRss>http://blog.red-pill.cz/2010/02/08/ip2long-na-32bit-systemech/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Screencast &#8211; Zend Tool</title>
		<link>http://blog.red-pill.cz/2009/11/17/zend-screencast-zend-tool/</link>
		<comments>http://blog.red-pill.cz/2009/11/17/zend-screencast-zend-tool/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 22:04:58 +0000</pubDate>
		<dc:creator>tomas.fejfar</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programování]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[screencast]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://blog.red-pill.cz/?p=315</guid>
		<description><![CDATA[
<p>S Martinem Hujerem jsme natočili netradiční screencast o Zend_Tool.
Najdete ho na webu českého Zend Framework fóra. Budu rád, když se
podělíte o náměty a připomínky v komentářích.</p>

<p>O tom, že zvuk je dost potichu víme a pracujem na tom. Ale kvuli kvalitě
se v tomhle screencastu nedá dát o moc víc nahlas. Takže příště.</p>

<!-- by Texy2! -->]]></description>
			<content:encoded><![CDATA[
<p>S <a href="http://www.hujer.org">Martinem Hujerem</a> jsme natočili
netradiční screencast o Zend_Tool. Najdete ho na <a
href="http://www.zendframework.cz/navody/zend_tool-instalace-a-pouziti-screencast/">webu
českého Zend Framework fóra</a>. Budu rád, když se podělíte o náměty a
připomínky v komentářích.</p>

<p>O tom, že zvuk je dost potichu víme a pracujem na tom. Ale kvuli kvalitě
se v tomhle screencastu nedá dát o moc víc nahlas. Takže příště.</p>

<!-- by Texy2! -->]]></content:encoded>
			<wfw:commentRss>http://blog.red-pill.cz/2009/11/17/zend-screencast-zend-tool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upload velkých souborů v IIS7 a PHP</title>
		<link>http://blog.red-pill.cz/2009/09/17/upload-velkych-souboru-v-iis7-a-php/</link>
		<comments>http://blog.red-pill.cz/2009/09/17/upload-velkych-souboru-v-iis7-a-php/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 11:28:09 +0000</pubDate>
		<dc:creator>petr.kratina</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programování]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.red-pill.cz/?p=294</guid>
		<description><![CDATA[
<p>Pokud potřebujete v PHP povolit upload velkých souborů, jistě víte, že
stačí v php.ini přenastavit hodnoty post_max_si­ze a upload_max_filesize
(nevím jak pro apache, pro IIS7 jsou nutné obě hodnoty, stejně tak je třeba
do formuláře, který data odesílá vložit alespoň jeden standardní post
element – třeba hidden, jinak php nedostane ani uploadovaný soubor). Toto
řešení vám bude bez problémů fungovat lokálně, ale ne, jakmile
přesunete web […]</p>

<!-- by Texy2! -->]]></description>
			<content:encoded><![CDATA[
<p>Pokud potřebujete v PHP povolit upload velkých souborů, jistě víte, že
stačí v <strong>php.ini</strong> přenastavit
hodnoty <strong>post_max_si­ze</strong> a
<strong>upload_max_fi­lesize</strong> (nevím jak pro apache, pro IIS7 jsou
nutné obě hodnoty, stejně tak je třeba do formuláře, který data odesílá
vložit alespoň jeden standardní post element – třeba hidden, jinak php
nedostane ani uploadovaný soubor). Toto řešení vám bude bez problémů
fungovat lokálně, ale ne, jakmile přesunete web na reálný server, tam na
vás při uploadu většího souboru vyskočí anonymní chybová hláška:</p>

<p><code>Unspecified error (<em>0×80004005</em>)</code></p>

<p>žádná větší konkretizace, než že se jedná o chybu při spouštění
fast-cgi modulu php vás už nečeká. Dlouho jsem hledal v čem vůbec
problém vězí a jaké je jeho řešení, nakonec jsem příčinu našel a to
ve standardních limitech FastCGI.</p>
<span id="more-294"></span>
<p>IIS7 obsahuje jeden drobný, nepěkná věc – totiž modulům hlídá
maximální čas vykonávání, ale hlídá ho i ve chvíli, kdy teprve
přicházejí request data. A protože většina uživatelů není schopná
odesílat soubory rychlostí páteřní linky, překročí časový limit a php
je násilně ukončeno ještě dříve, než se spustí vykonávání vašeho
skriptu.</p>

<p>Řešením je úprava konfigurace IIS a nastavení časových limitů
ručně – to bohužel nelze provést přes grafické rozhraní, ale
modifikací konfiguračního XML souboru:</p>

<p><code>c:\windows\sys­tem32\inetsrv\con­fig\applicati­onHost.config</code></p>

<p>(budete potřebovat administrátorská práva, takže ve Windows Vista /
2008 je třeba editor spustit jako správce)</p>

<p>tam naleznete řádek:</p>

<p><code>&lt;application fullPath=„C:\PHP5\p­hp-cgi.exe“ /&gt;</code></p>

<p>nebo jemu velmi podobný a upravíte jej na následující:</p>

<p><code>&lt;application fullPath=„C:\PHP5\p­hp-cgi.exe“
requestTimeou­t=„3600“ /&gt;</code></p>

<p>tím nastavíte limit na zpracování požadavku na jednu hodinu. Teď už
stačí jen restartovat IIS, aby se nová nastavení načetla.</p>

<p>Pokud potřebujete nastavit i čas běhu skriptu, případně zvýšit
frontu požadavků na jednu instanci php, je tu přo vás rozšířené
nastavení:</p>

<p><code>&lt;application fullPath=„C:\PHP5\p­hp-cgi.exe“
activityTimeou­t=„3600“ requestTimeou­t=„3600“
instanceMaxRe­quests=„10000“&gt;                
&lt;environmentVa­riables&gt;                    
&lt;environmentVa­riable name=„PHP_FCGI­_MAX_REQUESTS“ value=„10000“
/&gt;                 &lt;/environmentVa­riables&gt;
            &lt;/application&gt;</code> jen je třeba nezapomenout
maximální počet požadavků sdělit i PHP pomocí oné environment
variable.</p>

<!-- by Texy2! -->]]></content:encoded>
			<wfw:commentRss>http://blog.red-pill.cz/2009/09/17/upload-velkych-souboru-v-iis7-a-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Memcache, Zend Framework a Windows &#8230;</title>
		<link>http://blog.red-pill.cz/2009/06/26/memcache-zend-framework-a-windows/</link>
		<comments>http://blog.red-pill.cz/2009/06/26/memcache-zend-framework-a-windows/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 14:37:52 +0000</pubDate>
		<dc:creator>petr.kratina</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programování]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.red-pill.cz/?p=266</guid>
		<description><![CDATA[
<p>Možná jste při vývoji cachované aplikace v Zend Frameworku narazili
na chybu:</p>

<p>Fatal error: Call to undefined method Memcache::addSer­ver()</p>

<p>Pokud je odpověď ano, mám pro vás jednoduchý postup po nápravu.</p>

<p>Chyba je v tom, že nový ZF je závislý na nejnovějším buildu
php_memcache.dll, ten ale není přiložen v distribuci Zend Serveru pro
Windows. Stačí si tedy stáhnou non-thread safe verzi pecl knihoven pro
Windows ze stánek php:</p>

<p><a
href="http://museum.php.net/">http://museum.php.net/</a>…ts-Win32.zip</p>

<p>A přepsat DLL […]</p>

<!-- by Texy2! -->]]></description>
			<content:encoded><![CDATA[
<p>Možná jste při vývoji cachované aplikace v Zend Frameworku narazili
na chybu:</p>

<p><code>Fatal error: Call to undefined method
Memcache::addSer­ver()</code></p>

<p>Pokud je odpověď ano, mám pro vás jednoduchý postup po nápravu.</p>

<p>Chyba je v tom, že nový ZF je závislý na nejnovějším buildu
php_memcache.dll, ten ale není přiložen v distribuci Zend Serveru pro
Windows. Stačí si tedy stáhnou non-thread safe verzi pecl knihoven pro
Windows ze stánek php:</p>

<p><a
href="http://museum.php.net/php5/pecl-5.2.6-nts-Win32.zip">http://museum.php.net/…ts-Win32.zip</a></p>

<p>A přepsat DLL knihovnu v adresáři:</p>

<p><code>c:\Program Files\Zend\Zen­dServer\lib\phpex­t\</code></p>

<p>Voila! Aplikace běží!</p>

<!-- by Texy2! -->]]></content:encoded>
			<wfw:commentRss>http://blog.red-pill.cz/2009/06/26/memcache-zend-framework-a-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nefunkční partials v ZF po upgradu na 1.7.5</title>
		<link>http://blog.red-pill.cz/2009/02/20/nefunkcni-partials-v-zf-po-upgradu-na-175/</link>
		<comments>http://blog.red-pill.cz/2009/02/20/nefunkcni-partials-v-zf-po-upgradu-na-175/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 13:51:29 +0000</pubDate>
		<dc:creator>tomas.fejfar</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://blog.red-pill.cz/?p=132</guid>
		<description><![CDATA[<p>&#8220;Requested scripts may not include parent directory traversal (&#8221;../&#8221;, &#8220;..\&#8221; notation)&#8221;<br />
Tahle práva mě dnes překvapila při ladění shopu. Používal jsem na jednom serveru spoustu věcí na ZENDu, tak jsem si nechal dát ZF do include_path, abych nemusel pokaždé tahat FTPčkem těch10MB (nemam shell access). A ejhle, oni mi upgradovali na 1.7.5 a co se nestalo [...]</p>
]]></description>
			<content:encoded><![CDATA[<blockquote><p>&#8220;Requested scripts may not include parent directory traversal (&#8221;../&#8221;, &#8220;..\&#8221; notation)&#8221;</p></blockquote>
<p>Tahle práva mě dnes překvapila při ladění shopu. Používal jsem na jednom serveru spoustu věcí na ZENDu, tak jsem si nechal dát ZF do include_path, abych nemusel pokaždé tahat FTPčkem těch10MB (nemam shell access). A ejhle, oni mi upgradovali na 1.7.5 a co se nestalo <img src='http://blog.red-pill.cz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Tahle chyba nastává, když vkládáte view s cestou např.: &#8220;../partials/muj-partial.phtml&#8221; <img src='http://blog.red-pill.cz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Řešení naštěstí existuje</p>
<blockquote><p><span style="color: #0000ff;">$view</span>-&gt;<span style="color: #006600;">setLfiProtection</span><span style="color: #66cc66;">(</span><span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">)</span>;</p></blockquote>
<p>Po chvíli zlobení a nadávání jsem vygooglil tento článek:<br />
<a href="http://weierophinney.net/matthew/archives/206-Zend-Framework-1.7.5-Released-Important-Note-Regarding-Zend_View.html">Zend Framework 1.7.5 Released &#8211; Important Note Regarding Zend_View</a><br />
<a href="http://framework.zend.com/manual/en/zend.view.migration.html">53.6.1. Migrating from versions prior to 1.7.5</a> v manuálu Zend Frameworku</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.red-pill.cz/2009/02/20/nefunkcni-partials-v-zf-po-upgradu-na-175/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Upload souborů v PHP na IIS7</title>
		<link>http://blog.red-pill.cz/2009/01/27/upload-souboru-v-php-na-iis7/</link>
		<comments>http://blog.red-pill.cz/2009/01/27/upload-souboru-v-php-na-iis7/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 15:46:20 +0000</pubDate>
		<dc:creator>petr.kratina</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.red-pill.cz/2009/01/27/upload-souboru-v-php-na-iis7/</guid>
		<description><![CDATA[
<p>Pokud používáte PHP na IIS7 (ať už na vývoj pod Windows Vista nebo na
server pod Windows Server 2008) možná jste se setkali s problémem se kterým
jsem se do nedávna potýkal i já. Při uploadu souboru pomocí HTTP
formuláře jste měli problém při jeho používání. Pokud použijete
například move_uploaded_file, výsledný soubor bude sice čitelný pomocí
PHP, ale běžný uživatel ba ani webserver […]</p>

<!-- by Texy2! -->]]></description>
			<content:encoded><![CDATA[
<p style="text-align: justify;">Pokud používáte PHP na IIS7 (ať už na
vývoj pod Windows Vista nebo na server pod Windows Server 2008) možná jste se
setkali s problémem se kterým jsem se do nedávna potýkal i já. Při
uploadu souboru pomocí HTTP formuláře jste měli problém při jeho
používání. Pokud použijete například <b>move_uploaded_fi­le</b>,
výsledný soubor bude sice čitelný pomocí PHP, ale běžný uživatel ba ani
webserver na něj nebude mít práva. Pokud se na dočasný soubor dotážete
pomocí funkce <b>is_readable</b>, vrátí vždy <b>false</b>.</p>

<h3>Včem je problém?</h3>

<p style="text-align: justify;">V PHP, jako obvykle :o) PHP totiž standardně
použije pro upload adresář c:\windows\temp, který má ale v nových Windows
podstatně zesílené nastavení zabezpečení a díky špatně napsaným
funkcím v PHP se tato bezpečnostní nastavení přenášejí dál.</p>

<h3>Co s tím?</h3>

<p style="text-align: justify;">Řešení je více než jednoduché, osobně za
nejlepší považuji vytvoření nového adresáře s přístupovými právy
pro NETWORK SERVICE (např. c:\temp\uploads) a jeho nastavení v php.ini a
restartování IIS.</p>

<p style="text-align: justify;">Na problémy php aplikací pod windows si pomalu
ale jistě začínám zvykat, ale doufám že s tím jak se bude IIS7 a FastCGI
PHP rozšiřovat, bude i větší tlak na vývojáře PHP a ti budou nuceni
začít pracovat s filesystémem Windows korektně, tam je totiž největší
slabina PHP na Windows.</p>

<!-- by Texy2! -->]]></content:encoded>
			<wfw:commentRss>http://blog.red-pill.cz/2009/01/27/upload-souboru-v-php-na-iis7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rozšiřování funkčnosti rodičovské třídy pomocí hooks</title>
		<link>http://blog.red-pill.cz/2009/01/18/rozsirovani-funkcnosti-rodicovske-tridy/</link>
		<comments>http://blog.red-pill.cz/2009/01/18/rozsirovani-funkcnosti-rodicovske-tridy/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 14:34:17 +0000</pubDate>
		<dc:creator>tomas.fejfar</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Nezařazené]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programování]]></category>
		<category><![CDATA[Třídy]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://blog.red-pill.cz/2009/01/18/rozsirovani-funkcnosti-rodicovske-tridy/</guid>
		<description><![CDATA[
<!-- by Texy2! -->]]></description>
			<content:encoded><![CDATA[
<p>K napsání tohoto příspěvku mě inspirovala práce na jednom projektu
v Zend Frameworku, který je opravdu dobře napsaný z hlediska dědičnosti
atp. Někdo bude mít možná pocit, že tu znovuobjevuji kolo, ale někomu to
třeba pomůže. Pokud vás zajímá co jsou to <strong>hooks</strong>, tak
čtěte dále.</p>
<span id="more-103"></span>
<h2>Problém</h2>

<p>Rodičovský controller má v sobě většinu funkcionality. Takže třeba
pro update stačí načíst data, do proměnné controlleru dát form a zavolat
<em>parent::update()</em>. Všechno šlape jako hodinky do chvíle, než je
potřeba nějak rozšířit funkcionalitu nad možnosti parent controlleru.
Např. přidat nějakou složitou validaci dat, přidat nějaký ruhý form,
atp. V tu chvíli se na první pohled zdá, že jediná šance je zkopírovat
kód parent controlleru a udělat v něm potřebné úpravy. A docela dlouho
sem to takhle (prasecky) dělal.</p>

<h2>Řešení</h2>

<p>Do chvíle, než mě <a href="http://www.martinhujer.cz/">Martin Hujer</a>
upozornil na to, že se na tohle dají hezky použít <strong>hooks</strong>! :)
Ne že bych je neznal už dřív. V ZendFrameworku je používám dnes a denně
např. ve FrontController pluginech (dispatchLoop­Shutdown, preDispatch, …).
Ale vůbec mi nedošlo, že bych je mohl použít.</p>

<h2>Coto, toto?</h2>

<p>Cože to ty hooks jsou? Pro neznalé: Hooks jsou procedury, které nalepíte
někam doprostřed kódu a ve zděděné třídě do nich pak napíšete co
potřebujete, aniž byste museli měnit rodičovskou třídu. Pochopitelné? Moc
ne, že.</p>

<p>Příklad pomůže.</p>

<p><strong>Původní zdrojový kód</strong></p>

<pre class="php"><code><span
class="php-comment">// ParentController
</span><span
class="php-keyword1">function</span> updateAction()
{
  <span
class="php-comment">//nějaký kód co nastavuje třeba form, title, oescapování, atp.
</span>  <span
class="php-var">$this</span>-&gt;view-&gt;headTitle(<span
class="php-quote">'test'</span>);
  <span
class="php-comment">//semhle bych chtěl vložit nějaký svůj kód
</span>  <span
class="php-var">$this</span>-&gt;_model-&gt;update(<span
class="php-var">$this</span>-&gt;_data);
  <span
class="php-comment">//nějaký další kód
</span>}</code></pre>

<p><strong>Zdrojový kód s hooks</strong></p>

<pre class="php"><code><span
class="php-comment">// ParentController
</span><span
class="php-keyword1">function</span> updateAction()
{
  <span
class="php-comment">//nějaký kód co nastavuje třeba form, title, oescapování, atp.
</span>  <span
class="php-var">$this</span>-&gt;view-&gt;headTitle(<span
class="php-quote">'test'</span>);
  <span
class="php-var">$this</span>-&gt;_beforeUpdate();
  <span
class="php-var">$this</span>-&gt;_model-&gt;update(<span
class="php-var">$this</span>-&gt;_data);
  <span
class="php-var">$this</span>-&gt;_afterUpdate();
  <span
class="php-comment">//nějaký další kód
</span>}

<span
class="php-keyword1">protected</span> <span
class="php-keyword1">function</span> _beforeUpdate(){}
<span
class="php-keyword1">protected</span> <span
class="php-keyword1">function</span> _afterUpdate(){}

<span
class="php-comment">//IndexController extends ParentController
</span><span
class="php-keyword1">protected</span> <span
class="php-keyword1">function</span> _beforeUpdate(){
  <span
class="php-comment">//tady si můžu zavolat co potřebuji a provede se to
</span>  <span
class="php-comment">//před updatem DB
</span>  <span
class="php-comment">//např.:
</span>  <span
class="php-var">$this</span>-&gt;_data[<span
class="php-quote">'date'</span>] = <span
class="php-quote">'2009-01-01'</span>;
}</code></pre>

<!-- by Texy2! -->]]></content:encoded>
			<wfw:commentRss>http://blog.red-pill.cz/2009/01/18/rozsirovani-funkcnosti-rodicovske-tridy/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Eclipse: Otevírání Workspace z kontextového menu</title>
		<link>http://blog.red-pill.cz/2009/01/07/eclipse-otevirani-workspace-z-kontextoveho-menu/</link>
		<comments>http://blog.red-pill.cz/2009/01/07/eclipse-otevirani-workspace-z-kontextoveho-menu/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 22:05:45 +0000</pubDate>
		<dc:creator>tomas.fejfar</dc:creator>
				<category><![CDATA[Nezařazené]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programování]]></category>
		<category><![CDATA[Registry]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Zájimavosti]]></category>

		<guid isPermaLink="false">http://blog.red-pill.cz/2009/01/07/eclipse-otevirani-workspace-z-kontextoveho-menu/</guid>
		<description><![CDATA[
<!-- by Texy2! -->]]></description>
			<content:encoded><![CDATA[<p>Poslední dobou jsem nějak rozpolcen mezi projekty od různých zadavatelů, své projekty a vůbec se začínám ztrácet. Abych od sebe měl oddělené tyhle věci při práci, používám Workspaces v Eclipse PDT. Jenže přepínání Workspaces je vopruz ! <img src='http://blog.red-pill.cz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Navíc klasicky před začátkem práce potřebuji Updatnout přes TortoiseSVN working copy, takže musím do té které složky.</p>
<p>A tak by mi spoustu času ulehčilo, kdybych měl v kontextovém menu něco jako &#8220;Start Eclipse Workspace here&#8221;. A posléze jsem na to přišel a taky se o to podělím.</p>
<p><span id="more-102"></span></p>
<p>Eclipse se spuští s určeným workspacem pomocí parametru <em>data</em>. Takže si nejdříve připravíme cestu, kterou budeme Eclipse spouštět. U mě je to &#8220;c:\Program Files (x86)\eclipse\eclipse.exe&#8221;, nakonec připojíme parametr data a %1, které se nahrdí cestou &#8211; tedy &#8220;c:\Program Files (x86)\eclipse\eclipse.exe -data %1&#8243;. A nyní ta zajímavá část.</p>
<p>Kontextové menu složky najdeme v registrech. Takže si spustíme regedit (ve Vistách musíme mít admin privledges). Najdeme si větev &#8220;HKEY_CLASSES_ROOT\Directory\shell\&#8221;. V ní jsou jednotlivé položky. Do větve přidáme větev &#8220;Eclipse.OpenWorkspaceHere&#8221;. Poklepáním na &#8220;Výchozí&#8221; v pravé části nastavíme výchozí hodnotu &#8211; to bude text, který se objeví v menu. Pak do vytvořené větve vložíme větev &#8220;command&#8221; a do její hodnoty &#8220;Výchozí&#8221; vložíme připravenou cestu k eclipse. Tada ! Hotovo <img src='http://blog.red-pill.cz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Případně, pokud chcete komfortnější variantu, tak si vytvořte soubor Eclipse.reg a do něj vložte:</p>
<pre>Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Eclipse.OpenWorkspace]
@="Open Eclipse Workspace here"

[HKEY_CLASSES_ROOT\Directory\shell\Eclipse.OpenWorkspace\command]
@="c:\\Program Files (x86)\\eclipse\\eclipse.exe -data %1"</pre>
<p>Samozřejmně upravený &#8211; se správnou cestou. A pozor na zpětná lomítka</p>
<p>UPDATE: Můžete si stahnout hotový .reg soubor.</p>
<p><a rel="attachment wp-att-136" href="http://blog.red-pill.cz/2009/01/07/eclipse-otevirani-workspace-z-kontextoveho-menu/eclipseopenworkspace/">eclipseopenworkspace.reg</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.red-pill.cz/2009/01/07/eclipse-otevirani-workspace-z-kontextoveho-menu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Díl 1: Přihlašování uživatelů</title>
		<link>http://blog.red-pill.cz/2008/10/31/dil-1-prihlasovani-uzivatelu/</link>
		<comments>http://blog.red-pill.cz/2008/10/31/dil-1-prihlasovani-uzivatelu/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 15:35:05 +0000</pubDate>
		<dc:creator>tomas.fejfar</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programování]]></category>
		<category><![CDATA[Třídy]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://blog.red-pill.cz/2008/10/31/dil-1-prihlasovani-uzivatelu/</guid>
		<description><![CDATA[
<!-- by Texy2! -->]]></description>
			<content:encoded><![CDATA[
<p>Již delší dobu jsem se chystal na nějaký větší projekt a dnes jsem se
k tomu konečně dostal a začal. A výsledkem je první díl seriálu
screencastů o Zend Frameworku – tentokrát na téma <strong>Jednoduché
přihlašování uživatelů</strong>.</p>
<object height="354" width="450">
<param name="movie"
value="http://www.stream.cz/object/170557-dil-1-prihlasovani-uzivatelu" />
<param name="allowfullscreen" value="true" />
<param name="wmode" value="transparent" />
<embed src="http://www.stream.cz/object/170557-dil-1-prihlasovani-uzivatelu"
type="application/x-shockwave-flash" wmode="transparent" allowfullscreen="true"
height="354" width="450" /></object>
<p>Kvalita záznamu je poněkud slabší a zvuk je malinko out-of-sync
(zvlášť ke konci), ale to se do příštího dílu změní. Případné
náměty na další témata pište do komentářů.</p>

<p>Potom, co jsem screencast dokončil a překomprimoval jsem si všimnul, že
sem zapoměl zmínit to hlídání init() metody. Takže to zmíním tady:</p>

<pre class="php"><code><span
class="php-keyword1">class</span> IndexController extend My_Controller_Restricted{
    <span
class="php-keyword1">public</span> <span
class="php-keyword1">function</span> init(){
        <span
class="php-var">$foo</span> = <span
class="php-quote">'bar'</span>;
        <span
class="php-comment">/* Tady chceme nějaký náš kód, jenže tím jsme přepsali
         * metodu init() v původním controlleru, takže je třeba jí
         * ještě zavolat.
         * Pokud by se měl init vykonat pouze po přihlášení, tak musí být
         * parent::init() na začátku !
         */</span>
        parent::init();
    }
}</code></pre>
Pro někoho se znalostmi OOP to není nic překvapujícího, ale pro OOP
začátečníky je tohle několik bezesných nocí. okud by si někdo chtěl
doplnit vzdělání, tak doporučuji:
<ul>
	<li>PHP: <a
	href="http://php.interval.cz/objektove-orientovane-programovani-oop-v-php/">http://php.interval.cz/…i-oop-v-php/</a></li>

	<li>Pascal: <a
	href="http://www.sweb.cz/david.padrta/pascal/7oop.html">http://www.sweb.cz/…al/7oop.html</a></li>

	<li>Teoreticky: <a
	href="http://www.smt.pilsedu.cz/~jojo/Vyt/OOP.htm">http://www.smt.pilsedu.cz/…/Vyt/OOP.htm</a></li>
</ul>

<p>Zdrojové kódy ke screencastu budou k dispozici během
příštího týdne.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.red-pill.cz/2008/10/31/dil-1-prihlasovani-uzivatelu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sitemap a sub-domény na Google Webmasters Tools</title>
		<link>http://blog.red-pill.cz/2008/08/13/sitemap-a-sub-domeny-na-google-webmasters-tools/</link>
		<comments>http://blog.red-pill.cz/2008/08/13/sitemap-a-sub-domeny-na-google-webmasters-tools/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 19:28:13 +0000</pubDate>
		<dc:creator>petr.kratina</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programování]]></category>
		<category><![CDATA[Přístupnost]]></category>
		<category><![CDATA[Třídy]]></category>

		<guid isPermaLink="false">http://blog.red-pill.cz/2008/08/13/sitemap-a-sub-domeny-na-google-webmasters-tools/</guid>
		<description><![CDATA[
<!-- by Texy2! -->]]></description>
			<content:encoded><![CDATA[
<p style="text-align: justify;">Pokud vám není lhostejná viditelnost vašich
stránek a pojem SEO vám není úplně cizí, možná používáte nástroj <a
href="https://www.google.com/webmasters/tools/" target="_blank">Google
Webmasters Tools</a> (dále GWT). Je to skvělý nástroj, který vám umožní
alespoň částečně nahlédnout pod pokličku indexace webu Google crawlerem,
a umožní předat mu další informace o vašich stránkách. Jednou z ne
zrovna zanedbatelných možností jak pomoci indexovat své stránky je tzv. <a
href="http://www.sitemaps.org/protocol.php" target="_blank">sitemap soubor</a>,
který obsahuje všechna URL vašeho webu a užitečné informace jako čas
poslední změny, priority stránky a podobně, problém ale nastává ve
chvíli, kdy vaše stránky používají sub-domény jako logikou součást URL
pro vaši aplikaci, GWT totiž neumožní odkazovat ze sitemap souboru na jiné
domény a jen suše zahlásí:</p>

<div class="code">Adresa URL není povolena<br />
Tato adresa URL není v tomto umístění pro soubor Sitemap povolena.</div>
 <span id="more-86"></span>
<h2>Zamyšlení: K čemu vlastně používat sub-domény?</h2>

<p style="text-align: justify;">Použití sub-domén jako proměnných
součástí adresy je trochu sporné, někteří tvrdí, že je to zbytečné a
matoucí, například mě se ale toto dělení líbí – vezměme si jako
příklad katalog restaurací, proč by každá restaurace zařazená do
katalogu neměla mít pěkné URL složené z jejího názvu a naší domény,
vždyť na oné stránce jsou informace týkající se jen jí a restaurace jí
může snadno použít jako svou „homepage“…</p>

<h2>A jaké že je to slavné řešení?</h2>

<p style="text-align: justify;">Řešení je malinko složitější, spíše
tedy na technické provedení než na pochopení. Musíme totiž GWT
„vnutit“ ne sitemap soubor, ale sitemap index. To je vlastně seznam
souborů, které se mají načíst a zpracovat. Google ho přečte a všechy
soubory v něm obsažené přidá pod hlavní doménu. Sitemap index má
následující podobu:</p>

<div class="code">&lt;?xml version=„1.0“ encoding=„UTF-8“?&gt;<br />
&lt;sitemapindex
xmlns=„http:/­/www.sitemaps­.org/schemas/si­temap/0.9“&gt;<br />
    &lt;sitemap&gt;<br />
        &lt;loc&gt;­http://www.exam­ple.com/Sitemap­.xml&lt;/loc&gt;<br
/>
    &lt;/sitemap&gt;<br />
    &lt;sitemap&gt;<br />
        &lt;loc&gt;­http://blog.e­xample.com/Si­temap.xml&lt;/loc&gt;<br
/>
    &lt;/sitemap&gt;<br />
    &lt;sitemap&gt;<br />
        &lt;loc&gt;­http://articles­.example.com/Si­temap.xml&lt;/loc&gt;<br
/>
    &lt;/sitemap&gt;<br />
&lt;/sitemapindex&gt;<br />
</div>

<p style="text-align: justify;">To složitější je, dostat na každou
sub-doménu sitemap, který je platný jenom pro ni, já celou situaci řeším
generováním XML souborů do speciální složky a poté je pomocí PHP
zobrazím, vždy tedy jde o umístění <a
href="http://subdomena.domena.cz/Sitemap.xml">http://subdomena.domena.cz/Sitemap.xml</a>
ale aplikace podstrčí správný XML soubor pro danou sub-doménu. Pokud
nevíte jak na to, připravil jsem v PHP malý soubor (download na konci
článku), který toto vyřeší za vás. Vy jen generujete XML do složky
sitemaps (subdomena.xml), tento skript nasadíte přímo do rootu vaší
stránky a nasměrujete na něj pomocí mod_rewrite soubor sitemap.xml:</p>

<div class="code">RewriteEngine On<br />
<br />
RewriteCond %{REQUEST_FILENAME} /Sitemap.xml$<br />
RewriteRule .* Sitemap.php [L]</div>

<p>Případně budeme sitemap indexem odkazovat přímo na Sitemap.php.</p>

<h2>Závěr</h2>

<p style="text-align: justify;">Když tedy máme dostupný správný soubor
Sitemap.xml na každé sub-doméně a SitemapIndex.xml, obsahující jejich
umístění, stačí jej vložit do GWT a počkat až jej Google načte. První
se načte Index a poté postupně všechny jednotlivé Sitemapy, to bude trvat
nekolik desítek, minut, tak buďte trpěliví – výsledek stojí za to –
Google bude přesně vědět které poddomény jsou součástí
vašeho webu!</p>

<div style="text-align: center; margin-bottom: 10px;"><img
style="border: 1px #AAA solid;"
src="http://img87.imageshack.us/img87/8624/sitemapindexvh5.jpg"
alt="Google Web Tools Sitemap Index Status" /></div>

<p><strong>Download:</strong> <a
href="http://red-pill.cz/sitemap.zip">sitemap.zip</a> – třída sitemap,
ukázková XML a soubor .htaccess</p>

<!-- by Texy2! -->]]></content:encoded>
			<wfw:commentRss>http://blog.red-pill.cz/2008/08/13/sitemap-a-sub-domeny-na-google-webmasters-tools/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
