<?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>WEBPIRATEN &#187; PHP</title>
	<atom:link href="http://webpiraten.de/index.php/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://webpiraten.de</link>
	<description>TECHNOLOGIE-BLOG</description>
	<lastBuildDate>Sun, 20 Jun 2010 19:00:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Agavi Custom Logger implementieren</title>
		<link>http://webpiraten.de/index.php/2010/05/agavi-custom-logger-implementieren/</link>
		<comments>http://webpiraten.de/index.php/2010/05/agavi-custom-logger-implementieren/#comments</comments>
		<pubDate>Fri, 07 May 2010 15:15:57 +0000</pubDate>
		<dc:creator>sägefisch</dc:creator>
				<category><![CDATA[Agavi]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[agavi]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[logger]]></category>
		<category><![CDATA[logging]]></category>

		<guid isPermaLink="false">http://webpiraten.de/?p=252</guid>
		<description><![CDATA[Um in Agavi custom logfiles zu erstellen, benötigt man einen eigens erstellten logger + appender in der app/config/logger.xml. &#60;!-- logs only custom messages in a custom log --&#62; &#60;logger name=&#34;custom&#34; class=&#34;AgaviLogger&#34; level=&#34;'custom'&#34;&#62; &#60;appenders&#62; &#60;appender&#62;CustomLogAppender&#60;/appender&#62; &#60;/appenders&#62; &#60;/logger&#62; &#60;appender name=&#34;CustomLogAppender&#34; class=&#34;AgaviFileLoggerAppender&#34; layout=&#34;DateTimeLayout&#34;&#62; &#60;ae:parameters&#62; &#60;ae:parameter name=&#34;file&#34;&#62;%core.app_dir%/log/custom.log&#60;/ae:parameter&#62; &#60;/ae:parameters&#62; &#60;/appender&#62; Dann kann man den Logger quasi überall wo der LoggerManager [...]]]></description>
			<content:encoded><![CDATA[<p>Um in Agavi custom logfiles zu erstellen, benötigt man einen eigens erstellten logger + appender in der <strong>app/config/logger.xml</strong>.</p>
<pre class="brush: xml;">
&lt;!-- logs only custom messages in a custom log --&gt;
&lt;logger name=&quot;custom&quot; class=&quot;AgaviLogger&quot; level=&quot;'custom'&quot;&gt;
    &lt;appenders&gt;
        &lt;appender&gt;CustomLogAppender&lt;/appender&gt;
    &lt;/appenders&gt;
&lt;/logger&gt;

&lt;appender name=&quot;CustomLogAppender&quot; class=&quot;AgaviFileLoggerAppender&quot; layout=&quot;DateTimeLayout&quot;&gt;
    &lt;ae:parameters&gt;
        &lt;ae:parameter name=&quot;file&quot;&gt;%core.app_dir%/log/custom.log&lt;/ae:parameter&gt;
    &lt;/ae:parameters&gt;
&lt;/appender&gt;
</pre>
<p>Dann kann man den Logger quasi überall wo der LoggerManager verfügbar ist benutzen.</p>
<pre class="brush: php;">
$message = 'Custom logging message';
$this-&gt;getContext()-&gt;getLoggerManager()-&gt;log(new AgaviLoggerMessage($message, 'custom'), 'custom');
</pre>
<p>Und in der bash das logfile einsehen.</p>
<pre class="brush: bash;">
tail -f app/log/custom.log
</pre>
]]></content:encoded>
			<wfw:commentRss>http://webpiraten.de/index.php/2010/05/agavi-custom-logger-implementieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PDF Dokumente mit Zend LiveDocx</title>
		<link>http://webpiraten.de/index.php/2009/11/pdf-dokumente-mit-zend-livedocx/</link>
		<comments>http://webpiraten.de/index.php/2009/11/pdf-dokumente-mit-zend-livedocx/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 09:01:18 +0000</pubDate>
		<dc:creator>sägefisch</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Zend]]></category>
		<category><![CDATA[docx]]></category>
		<category><![CDATA[dokument]]></category>
		<category><![CDATA[livedocx]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[pdf2html]]></category>
		<category><![CDATA[phphatesme]]></category>

		<guid isPermaLink="false">http://webpiraten.de/?p=218</guid>
		<description><![CDATA[Ein sehr interessanter Ansatz zur Erzeugung von Dokumenten im Web wird bei phphatesme.com beschrieben. HTML-zu-PDF-Konvertierung und programmatischer Ansatz sind ja bekannt. Der neue Ansatz bedient sich einer SOAP Schnittstelle und Templates. Unter folgender URL gibts mehr dazu: phphatesme.com &#8211; PDF Dokumente mit Zend LiveDocx]]></description>
			<content:encoded><![CDATA[<p>Ein sehr interessanter Ansatz zur Erzeugung von Dokumenten im Web wird bei <a href="http://phphatesme.com" target="_blank">phphatesme.com</a> beschrieben. HTML-zu-PDF-Konvertierung und programmatischer Ansatz sind ja bekannt. Der neue Ansatz bedient sich einer SOAP Schnittstelle und Templates. Unter folgender URL gibts mehr dazu: </p>
<p><a href="http://www.phphatesme.com/blog/webentwicklung/pdf-erzeugung-mit-dem-zend-framework/" target="_blank">phphatesme.com &#8211; PDF Dokumente mit Zend LiveDocx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://webpiraten.de/index.php/2009/11/pdf-dokumente-mit-zend-livedocx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPBench &#8211; PHP auf dem Prüfstand</title>
		<link>http://webpiraten.de/index.php/2009/11/phpbench-php-auf-dem-pruefstand/</link>
		<comments>http://webpiraten.de/index.php/2009/11/phpbench-php-auf-dem-pruefstand/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 14:02:30 +0000</pubDate>
		<dc:creator>sägefisch</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[phpbench]]></category>

		<guid isPermaLink="false">http://webpiraten.de/index.php/2009/11/phpbench-php-auf-dem-prufstand/</guid>
		<description><![CDATA[Hier der Link zu PHPBench. Benchmarks für PHP Funktionen. phpbench.com]]></description>
			<content:encoded><![CDATA[<p>Hier der Link zu PHPBench. Benchmarks für PHP Funktionen.</p>
<p><a href="http://phpbench.com" target="_blank" title="phpbench.com">phpbench.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://webpiraten.de/index.php/2009/11/phpbench-php-auf-dem-pruefstand/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPUnit Manual &#8211; Sebastian Bergmann</title>
		<link>http://webpiraten.de/index.php/2009/10/phpunit-manual-sebastian-bergmann/</link>
		<comments>http://webpiraten.de/index.php/2009/10/phpunit-manual-sebastian-bergmann/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 22:48:25 +0000</pubDate>
		<dc:creator>sägefisch</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<category><![CDATA[bergmann]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[sebastian]]></category>
		<category><![CDATA[unit]]></category>

		<guid isPermaLink="false">http://webpiraten.de/?p=179</guid>
		<description><![CDATA[Hier der komplette PHPUnit Guide um entsprechende Tests zu seiner Applikation zu schreiben. PHPUnit Manual]]></description>
			<content:encoded><![CDATA[<p>Hier der komplette PHPUnit Guide um entsprechende Tests zu seiner Applikation zu schreiben. </p>
<p><a href="http://phpunit.de/manual/current/en/" target="_blank" title="PHPUnit Manual - Sebastian Bergmann">PHPUnit Manual</a></p>
]]></content:encoded>
			<wfw:commentRss>http://webpiraten.de/index.php/2009/10/phpunit-manual-sebastian-bergmann/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Professionelle Softwareentwicklung mit PHP 5</title>
		<link>http://webpiraten.de/index.php/2009/10/professionelle-softwareentwicklung-mit-php-5/</link>
		<comments>http://webpiraten.de/index.php/2009/10/professionelle-softwareentwicklung-mit-php-5/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 22:40:56 +0000</pubDate>
		<dc:creator>sägefisch</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<category><![CDATA[datenbanken]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[pattern]]></category>

		<guid isPermaLink="false">http://webpiraten.de/?p=174</guid>
		<description><![CDATA[Der ultimative Guide für Objektorientierung, Entwurfsmuster und Modellierung sowie fortgeschrittene Datenbankprogrammierung von Sebastian Bergmann Professionelle Softwareentwicklung mit PHP 5]]></description>
			<content:encoded><![CDATA[<p>Der ultimative Guide für Objektorientierung, Entwurfsmuster und Modellierung sowie fortgeschrittene Datenbankprogrammierung von Sebastian Bergmann</p>
<p><a href="http://professionelle-softwareentwicklung-mit-php5.de" target="_blank" title="Professionelle Softwareentwicklung mit PHP 5 - Sebastian Bergmann">Professionelle Softwareentwicklung mit PHP 5</a></p>
]]></content:encoded>
			<wfw:commentRss>http://webpiraten.de/index.php/2009/10/professionelle-softwareentwicklung-mit-php-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>der Kohana Script Collector Helper</title>
		<link>http://webpiraten.de/index.php/2009/10/der-kohana-script-collector-helper/</link>
		<comments>http://webpiraten.de/index.php/2009/10/der-kohana-script-collector-helper/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 19:26:49 +0000</pubDate>
		<dc:creator>sägefisch</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Kohana]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[collector]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[helper]]></category>
		<category><![CDATA[kohana]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[stylesheet]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://webpiraten.de/?p=89</guid>
		<description><![CDATA[Um modular und agil in Kohana zu entwickeln, wurde ein Skript Kollektor notwendig, der aus allen Controllern (Template- oder Standard-Controllern) Skripte (CSS, Javascript) sammeln kann. Diese Scripte werden dann auf den jeweiligen Mastertemplates wieder an den richtigen Stellen eingebunden. Dazu habe ich einen neuen Helper unter application/helpers/collector.php eingerichtet. class Collector_Core { /** * Arrays containing [...]]]></description>
			<content:encoded><![CDATA[<p>Um modular und agil in Kohana zu entwickeln, wurde ein Skript Kollektor notwendig, der aus allen Controllern (Template- oder Standard-Controllern) Skripte (CSS, Javascript) sammeln kann.</p>
<p>Diese Scripte werden dann auf den jeweiligen Mastertemplates wieder an den richtigen Stellen eingebunden.<br />
Dazu habe ich einen neuen Helper unter application/helpers/collector.php eingerichtet.</p>
<pre class="brush: php;">

class Collector_Core
{
    /**
     * Arrays containing URL's to scripts/styles (fill with standards)
     * @var string
     */
    static protected $scripts       = array();
    static protected $styles        = array();

    /**
     * Adds a url to store
     * @param string $file the local path to file
     * @return void
     */
    static public function addJs($file)
    {
        self::$scripts[] = $file;
    }

    /**
     * Adds a url to store
     * @param string $file the local path to file
     * @return void
     */
    static public function addCss($file)
    {
        self::$styles[] = $file;
    }

    /**
     * Generates/renders collectors items
     * @param boolean      $print whether to echo the output or just return rendered string
     * @return string      the rendered output
     */
    static public function renderJs($print = false)
    {
        $scripts    = array_unique(self::$scripts);
        $output     = html::script($scripts);
        if ($print)
        {
            echo $output;
        }
        else
        {
            return $output;
        }
    }

    /**
     * Generates/renders collectors items
     * @param boolean      $print whether to echo the output or just return rendered string
     * @param string|array $media type for this style (all, screen, print, media)
     * @return string      the rendered output
     */
    static public function renderCss($print = false, $media = 'all')
    {
        $styles = array_unique(self::$styles);
        $output = html::stylesheet($styles, $media);
        if ($print)
        {
            echo $output;
        }
        else
        {
            return $output;
        }
    }
} // end of Collector_Core
</pre>
<p>Dieser Helper kann nun aus allen Controllern heraus befüllt werden.</p>
<pre class="brush: php;">

class Welcome_Controller extends Template_Controller
{
    /**
     * set master template
     */
    public $template = 'master_default.tpl';

    /**
     * default constructor
     * @param void
     * @return void
     */
    public function __construct()
    {
        // load parent constructor
        parent::__construct();

        // collect scripts and styles
        collector::addCss('/css/fancybox');
        collector::addJs('/js/jquery.1.3.2');
        collector::addJs('/js/jquery.fancybox');
    }
    /** more code here */
} // end of Welcome_Controller
</pre>
<p>Nachdem nun alle relevanten Skripte eingesammelt wurden, kann man diese auf dem Template wieder ausgeben lassen.</p>
<pre class="brush: xml;">

&lt;?php collector::renderCss(true, 'all'); ?&gt;

&lt;!-- html code here --&gt;

&lt;?php collector::renderJs(true); ?&gt;
</pre>
<p>Der Kollektor sorgt dafür das keine doppelten Skripte geladen werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://webpiraten.de/index.php/2009/10/der-kohana-script-collector-helper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
