<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>Naggy - PHP</title>
    <link>http://www.naggy.de/</link>
    <description>just a Blog</description>
    <dc:language>de</dc:language>
    <generator>Serendipity 1.4 - http://www.s9y.org/</generator>
    <pubDate>Tue, 23 Mar 2010 20:49:59 GMT</pubDate>

    <image>
        <url>http://www.naggy.de/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Naggy - PHP - just a Blog</title>
        <link>http://www.naggy.de/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Jahresabo vom PHP Magin zu gewinnen</title>
    <link>http://www.naggy.de/archives/145-Jahresabo-vom-PHP-Magin-zu-gewinnen.html</link>
            <category>PHP</category>
    
    <comments>http://www.naggy.de/archives/145-Jahresabo-vom-PHP-Magin-zu-gewinnen.html#comments</comments>
    <wfw:comment>http://www.naggy.de/wfwcomment.php?cid=145</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.naggy.de/rss.php?version=2.0&amp;type=comments&amp;cid=145</wfw:commentRss>
    

    <author>nospam@example.com (J.F.)</author>
    <content:encoded>
    &lt;p&gt;Hallo Leute,&lt;/p&gt;
&lt;p&gt;auf &lt;a href=&quot;http://phpperformance.de/php-magazin-gewinne-eines-von-zwei-jahresabos/&quot; target=&quot;_blank&quot; title=&quot;PHP Performance Blog&quot;&gt;PHP Performance&lt;/a&gt; (im übrigen eine sehr interessante Seite) gibt es gerade 2 Jahresabos zu gewinnen. Also einfach mal dort vorbei schauen.&lt;br /&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 23 Mar 2010 21:49:59 +0100</pubDate>
    <guid isPermaLink="false">http://www.naggy.de/archives/145-guid.html</guid>
    
</item>
<item>
    <title>PHP : Werte aus einem Array löschen</title>
    <link>http://www.naggy.de/archives/115-PHP-Werte-aus-einem-Array-loeschen.html</link>
            <category>PHP</category>
    
    <comments>http://www.naggy.de/archives/115-PHP-Werte-aus-einem-Array-loeschen.html#comments</comments>
    <wfw:comment>http://www.naggy.de/wfwcomment.php?cid=115</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://www.naggy.de/rss.php?version=2.0&amp;type=comments&amp;cid=115</wfw:commentRss>
    

    <author>nospam@example.com (J.F.)</author>
    <content:encoded>
    &lt;p&gt;Oft hat man das Problem, das man bestimmt Werte nicht in einem Array drin haben möchte. Um diesem Problem zu beheben kann man die wunderschöne Array-Funktion &lt;strong&gt;&lt;font face=&quot;courier new,courier,monospace&quot;&gt;array_diff&lt;/font&gt;&lt;/strong&gt; benutzen. Denn die gibt einem die Differenz aus 2 Array`s zurück.&lt;/p&gt; 
&lt;blockquote&gt; 
&lt;pre&gt;// Ursprungsarray
$arr = Array(&quot;blue&quot;, &quot;green&quot;, &quot;red&quot;, &quot;yellow&quot;, &quot;green&quot;, &quot;orange&quot;, &quot;yellow&quot;, &quot;indigo&quot;, &quot;red&quot;);
print_r($arr);

// Alle werte entfernen die &quot;yellow&quot; oder &quot;red&quot; sind
$arr = array_diff($arr, array(&quot;yellow&quot;, &quot;red&quot;));
print_r($arr);

// Optional können wir das Array auch noch mal neu indexieren
$arr = array_values($arr);
print_r($arr);
&lt;/pre&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;ergibt dann folgendes&lt;/p&gt; 
&lt;blockquote&gt; 
&lt;pre&gt;Array ( [0] =&amp;gt; blue [1] =&amp;gt; green [2] =&amp;gt; red [3] =&amp;gt; yellow [4] =&amp;gt; green [5] =&amp;gt; orange [6] =&amp;gt; yellow [7] =&amp;gt; indigo [8] =&amp;gt; red )

Array ( [0] =&amp;gt; blue [1] =&amp;gt; green [4] =&amp;gt; green [5] =&amp;gt; orange [7] =&amp;gt; indigo )

Array ( [0] =&amp;gt; blue [1] =&amp;gt; green [2] =&amp;gt; green [3] =&amp;gt; orange [4] =&amp;gt; indigo )
&lt;/pre&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Bis zum nächsten Tipp.&lt;br /&gt;&lt;/p&gt; 
&lt;blockquote&gt; &lt;/blockquote&gt; 
    </content:encoded>

    <pubDate>Sun, 22 Feb 2009 13:29:59 +0100</pubDate>
    <guid isPermaLink="false">http://www.naggy.de/archives/115-guid.html</guid>
    
</item>
<item>
    <title>Neue PHP Sicherheitsseite Online</title>
    <link>http://www.naggy.de/archives/113-Neue-PHP-Sicherheitsseite-Online.html</link>
            <category>PHP</category>
    
    <comments>http://www.naggy.de/archives/113-Neue-PHP-Sicherheitsseite-Online.html#comments</comments>
    <wfw:comment>http://www.naggy.de/wfwcomment.php?cid=113</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://www.naggy.de/rss.php?version=2.0&amp;type=comments&amp;cid=113</wfw:commentRss>
    

    <author>nospam@example.com (J.F.)</author>
    <content:encoded>
    &lt;p&gt;Wie ich gerade über den Gruppen-Newsletter der &lt;a href=&quot;https://www.xing.com/net/phpsec/&quot; target=&quot;_blank&quot; title=&quot;Xing PHP Security Gruppe&quot;&gt;PHP-Security Gruppe&lt;/a&gt; auf &lt;a href=&quot;http://www.xing.de&quot; target=&quot;_blank&quot; title=&quot;www.xing.de&quot;&gt;Xing&lt;/a&gt; erfahren habe gibt es eine neue Webseite zum Thema PHP Sicherheit. Auf der Webseite ist zwar noch nicht wahnsinnig viel zu finden, aber Das &lt;a href=&quot;http://www.php-security.de/security-lexikon/&quot; target=&quot;_blank&quot; title=&quot;PHP Security Lexikon&quot;&gt;Security Lexikon&lt;/a&gt; ist schon mal ein wenig gefüllt. Die angesprochenen Themen werden dort sicherlich in Zukunft deutlich vertieft werden. Auf jedenfall bekommt man jetzt schon mal einen guten Einstieg ins Thema.&lt;/p&gt;
&lt;p&gt;Also viel Spaß bei &lt;a href=&quot;http://www.php-security.de&quot; target=&quot;_blank&quot; title=&quot;www.php-security.de&quot;&gt;www.php-security.de&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 14 Jan 2009 22:02:27 +0100</pubDate>
    <guid isPermaLink="false">http://www.naggy.de/archives/113-guid.html</guid>
    
</item>
<item>
    <title>dynamisches Zip Archiv mit PHP erzeugen</title>
    <link>http://www.naggy.de/archives/13-dynamisches-Zip-Archiv-mit-PHP-erzeugen.html</link>
            <category>PHP</category>
    
    <comments>http://www.naggy.de/archives/13-dynamisches-Zip-Archiv-mit-PHP-erzeugen.html#comments</comments>
    <wfw:comment>http://www.naggy.de/wfwcomment.php?cid=13</wfw:comment>

    <slash:comments>12</slash:comments>
    <wfw:commentRss>http://www.naggy.de/rss.php?version=2.0&amp;type=comments&amp;cid=13</wfw:commentRss>
    

    <author>nospam@example.com (J.F.)</author>
    <content:encoded>
    
&lt;p&gt;Halli hallo, mal wieder!&lt;/p&gt;&lt;p&gt;Aus ganz aktuellem Anlass möchte ich euch mal wieder ein kleines Tutorial zukommen lassen. Wer kennt das nicht, man bietet Sachen zum Download an da die Benutzer aber nicht jedes File alleine anklicken wollen (oder manchmal wegen Unfähigkeit auch können) will man Ihnen auch die Möglichkeit geben ausgewählte Dateien dynamisch in ein Zip Archiv zu packen und dann zum Download anzubieten.&lt;/p&gt;&lt;p&gt;Also was soll erreicht werden? Die User können vor jedem Dateieintarg eine Checkbox anklicken können, ob sie diese Datei als Zip haben möchten. Dann soll ein Formularbutton gedrückt werden, und alle angeklickten DAteien werden on the fly in ein Zip Archiv gepackt und an den Browser geschickt.&lt;/p&gt;&lt;p&gt;Folgende vorbereitungen müssen getroffen werden.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Formular erstellen&lt;/li&gt;&lt;li&gt;Zip Libary besorgen&lt;/li&gt;&lt;li&gt;Zip erstellungsfile schreiben.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Als 1. erstellen wir uns also das Downloadformular. Dieses soll im wesentlichen nur aus Checkboxen bestehen, die als Inhalt den Pfad zu den Dateien enthält. Diese Daten sollen dan per POST Befehl an das Zip erstellungsskript geschickt werden. Der Quellcode könnte dann wie folgt aussehen ...&lt;/p&gt;&lt;p&gt;&lt;textarea rows=&quot;12&quot; cols=&quot;80&quot;&gt;&amp;lt;form method=&amp;quot;POST&amp;quot; action=&amp;quot;zipdownload.php&amp;quot;&amp;gt;

&amp;lt;input name=&amp;quot;checkbx[]&amp;quot; type=&amp;quot;checkbox&amp;quot; value=&amp;quot;/Pfad/File-1.datei&amp;quot;&amp;gt;File-1&amp;lt;br&amp;gt;
&amp;lt;input name=&amp;quot;checkbx[]&amp;quot; type=&amp;quot;checkbox&amp;quot; value=&amp;quot;/Pfad/File-2.datei&amp;quot;&amp;gt;File-2&amp;lt;br&amp;gt;
&amp;lt;input name=&amp;quot;checkbx[]&amp;quot; type=&amp;quot;checkbox&amp;quot; value=&amp;quot;/Pfad/File-3.datei&amp;quot;&amp;gt;File-3&amp;lt;br&amp;gt;
...
&amp;lt;input name=&amp;quot;checkbx[]&amp;quot; type=&amp;quot;checkbox&amp;quot; value=&amp;quot;/Pfad/File-N.datei&amp;quot;&amp;gt;File-N&amp;lt;br&amp;gt;

&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;ausgewählte Dateien als Zip downloaden&amp;quot;&amp;gt;
&amp;lt;/form&amp;gt;&lt;/textarea&gt;&lt;/p&gt;&lt;p&gt;Diesen Teil müsst Ihr euch leider selbst an eure Gegebenheiten anpassen, ich kann ja schließlich nicht alles machen. :-)&lt;/p&gt;&lt;p&gt;Als 2. besorgen wir uns eine Zip Libary, weil wir ja das Rad nicht 3 mal erfinden wollen. Dazu besorgen wir uns einfach &lt;a title=&quot;PHPMyAdmin&quot; target=&quot;_blank&quot; href=&quot;http://www.phpmyadmin.net/&quot;&gt;PHPMyAdmin&lt;/a&gt; darin ist nämlich eine sehr schöne (weil einfache) Zip Libary enthalten. Zu finden ist diese unter &lt;b&gt;&lt;font face=&quot;courier new,courier,monospace&quot;&gt;\libraries&lt;/font&gt;&lt;/b&gt; mit dem schönen Namen &lt;b&gt;&lt;font face=&quot;courier new,courier,monospace&quot;&gt;zip.lib.php&lt;/font&gt;&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Jetzt kommen wir aber zum spannenden und eigentlich auch sehr simplen Teil. Die Programmierung unseres Ziperstellungs-Skriptes mit PHP. Erst einmal hier den Code, danach die Erklärung dazu.&lt;/p&gt;&lt;p&gt;&lt;textarea rows=&quot;32&quot; cols=&quot;80&quot;&gt;&amp;lt;?php
	// Zip Libary einbinden
	require(&amp;quot;./zip.lib.php&amp;quot;);
	
	// neuse Zip Objekt erstellen
	$zipfile = new zipfile();
	
	// Für jede Datei die in Checkbox übermittelt wurde
	for ($i=0;$i &amp;lt; count($_POST[&#039;checkbx&#039;]);$i++)
		{
		// Dateinamen aus POST ermitteln
		$filename = $_POST[&#039;checkbx&#039;][$i];
		$clearfilename = substr($filename, strrpos ($filename, &amp;quot;/&amp;quot;) + 1);
 		
 		// Datei einlesen
 		$handle = fopen ($filename, &amp;quot;r&amp;quot;);
		$content = fread ($handle, filesize ($filename));
		fclose ($handle);
		
		// Datei in Zipfile speichern
		$zipfile-&amp;gt;addFile($content, $clearfilename, filemtime($filename));
		}
	
	// Header für Download senden
	header(&amp;quot;HTTP/1.1 200 OK&amp;quot;);
	header(&amp;quot;Content-Type: application/force-download&amp;quot;);
	header(&#039;Content-Disposition: attachment; filename=&amp;quot;Zip-File-Name.zip&amp;quot;&#039;);
	header(&amp;quot;Content-Transfer-Encoding: binary&amp;quot;);

	// Zip File senden
	echo $zipfile-&amp;gt;file(); 
?&amp;gt;&lt;/textarea&gt;&lt;/p&gt;&lt;p&gt;Also als 1. includen wir die libary und erstellen ein neues Zip Objekt. Dann führen wir für jede Datei die per POST als checkbx Variable übermittelt wurde folgendes aus. Wir speichern den Dateinamen incl. Pfad als &lt;font face=&quot;courier new,courier,monospace&quot;&gt;$filename&lt;/font&gt; und ermitteln den Dateinamen an sich und speichern diesen als &lt;font face=&quot;courier new,courier,monospace&quot;&gt;$clearfilename&lt;/font&gt;. Dann lesen wir den Inhalt der Datei aus und speichern es als &lt;font face=&quot;courier new,courier,monospace&quot;&gt;$content&lt;/font&gt; ab.&lt;/p&gt;&lt;p&gt;Nun wird die eingelesene Datei mit hilfe von &lt;font face=&quot;courier new,courier,monospace&quot;&gt;addFile&lt;/font&gt; in das Zip Objekt geschrieben, dabei wird der Dateiname &lt;font face=&quot;courier new,courier,monospace&quot;&gt;$clearfilename&lt;/font&gt; verwendet und die Dateierstellungszeit ermittelt.&lt;/p&gt;&lt;p&gt;Nachdem alle Dateien aus dem Post eingelesen wurden, wird mit den gesetzten Headern ein Dateidownload beim Browser erzwungen, und mit dem &lt;font face=&quot;courier new,courier,monospace&quot;&gt;echo&lt;/font&gt; befehl und der Methode &lt;font face=&quot;courier new,courier,monospace&quot;&gt;file()&lt;/font&gt; das ganze Ziparchiv gesendet.&lt;/p&gt;&lt;h3&gt;&lt;font color=&quot;#ff0000&quot;&gt;Warnung&lt;/font&gt;&lt;/h3&gt;&lt;p&gt;&lt;font color=&quot;#ff0000&quot;&gt;Dieses Skript ist nur ein Beispiel für die Erstellung eines dynamischen Zip Files. Es ist in dieser Form nicht für den Produktiveinsatz geeignet!!! Vertraut niemals übermittelten Daten (Post und GET). Ihr müsst dringend überprüfen wer was mit dem Skript herunterläd. Sonst läd sich jemand z.B. eure Skripte herunter, und kann den Quelltext betrachten incl. aller Paßwörter ihr darin habt. Ihr solltet sicherstellen, das man mit diesem Skript nur in bestimmten Verzeichnissen etwas packen kann. Sozusagen eine Sandbox einrichtet. Mehr dazu später vielleicht mal.&lt;/font&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sun, 10 Dec 2006 19:09:09 +0100</pubDate>
    <guid isPermaLink="false">http://www.naggy.de/archives/13-guid.html</guid>
    
</item>

</channel>
</rss>