<?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>PHP Log &#187; download</title>
	<atom:link href="http://www.php-log.de/tags/download/feed" rel="self" type="application/rss+xml" />
	<link>http://www.php-log.de</link>
	<description>Eine feine Sammlung nützlicher PHP Notizen</description>
	<lastBuildDate>Thu, 27 May 2010 04:43:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Downloads mit CakePHP</title>
		<link>http://www.php-log.de/193/php/downloads-mit-cakephp</link>
		<comments>http://www.php-log.de/193/php/downloads-mit-cakephp#comments</comments>
		<pubDate>Tue, 10 Mar 2009 13:17:16 +0000</pubDate>
		<dc:creator>ralle</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[Media Views]]></category>

		<guid isPermaLink="false">http://www.php-log.de/?p=193</guid>
		<description><![CDATA[Über die Vorteile und Funktion der Media Views von CakePHP habe ich ja schon gesprochen. Wenn man den Codeschnipsel der dort zur Verfügung gestellt wird ein wenig erweitert und in den Application Controller packt, erhält man mit wenigen Handgriffen ein feines Download Center. class AppController extends Controller &#123; &#160; function download&#40;&#41;&#123; // Extrahiere die Dateiname [...]]]></description>
			<content:encoded><![CDATA[<p>Über die Vorteile und Funktion der <a href="http://book.cakephp.org/de/view/489/Media-Views" target="_blank">Media Views</a> von CakePHP habe ich ja schon gesprochen. Wenn man den Codeschnipsel der dort zur Verfügung gestellt wird ein wenig erweitert und in den Application Controller packt, erhält man mit wenigen Handgriffen ein feines Download Center.<span id="more-193"></span></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> AppController <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> download<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// Extrahiere die Dateiname und Typ aus der URL</span>
		<span style="color: #666666; font-style: italic;">// Die Url hat das Format /controller/download/extension/file</span>
		<span style="color: #666666; font-style: italic;">// Beispiel /users/download/pdf/flyer</span>
		<span style="color: #000088;">$extension</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'pass'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'pass'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$download_folder</span> <span style="color: #339933;">=</span> WWW_ROOT<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Gib einen 404er aus wenn die Datei nicht existiert</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$download_folder</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$file</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;.&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$extension</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cakeError</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'error404'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Sende die Datei an den Browser</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Media'</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$params</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
		       <span style="color: #0000ff;">'id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$file</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;.&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$extension</span><span style="color: #339933;">,</span>
		       <span style="color: #0000ff;">'name'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$file</span><span style="color: #339933;">,</span>
		       <span style="color: #0000ff;">'download'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
		       <span style="color: #0000ff;">'extension'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$extension</span><span style="color: #339933;">,</span>
		       <span style="color: #0000ff;">'path'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$download_folder</span>
		<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$params</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Diese Methode dient nur als Basis für weitere Feinheiten, so kann man z.B. prüfen ob der User zum Download berechtigt ist, einen Zähler einbauen und vieles mehr. Da diese Methode in den Application Controller gesteckt wurde kann Sie überall eingesetzt werden. /users/download/pdf/fyler funktioniert genauso wie /clients/download/pdf/flyer. </p>
<p>In diesem Fall wird davon ausgegangen dass die Dateien direkt im Webroot abgelegt sind, wer einen anderen Ablageort bevorzugt passt die Variable $download_folder an.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.php-log.de/193/php/downloads-mit-cakephp/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
