<?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>PHPBlog.it &#187; append</title>
	<atom:link href="http://phpblog.it/tag/append/feed/" rel="self" type="application/rss+xml" />
	<link>http://phpblog.it</link>
	<description>Solo un altro blog targato WordPress</description>
	<lastBuildDate>Mon, 21 May 2012 21:45:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Scrittura su file: append di testa</title>
		<link>http://phpblog.it/2008/06/05/scrittura-su-file-append-di-testa/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=scrittura-su-file-append-di-testa</link>
		<comments>http://phpblog.it/2008/06/05/scrittura-su-file-append-di-testa/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 05:00:40 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[phpblog]]></category>
		<category><![CDATA[append]]></category>
		<category><![CDATA[fopen]]></category>
		<category><![CDATA[fwrite]]></category>

		<guid isPermaLink="false">http://phpblog.it/2008/06/05/scrittura-su-file-append-di-testa/</guid>
		<description><![CDATA[Capita spesso di utilizzare le funzioni di scrittura su file per salvare su filesystem dati di eventi particolari come i log di un&#8217;applicazione su cui stiamo lavorando. Immaginiamo di aver bisogno di inserire di volta in volta i dati in testa al file di log invece che in coda (nel qual caso fopen con &#8220;mode [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/06/05/scrittura-su-file-append-di-testa/' addthis:title='Scrittura su file: append di testa '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p><img src="http://172.18.0.13/wordpress/wp-content/uploads/2008/06/scrivere.jpg" alt="Word.Line" />Capita spesso di utilizzare le funzioni di scrittura su file per salvare su filesystem dati di eventi particolari come i log di un&#8217;applicazione su cui stiamo lavorando. Immaginiamo di aver bisogno di inserire di volta in volta i dati in testa al file di log invece che in coda (nel qual caso fopen con &#8220;mode a&#8221; andrebbe più che bene), come fare?</p>
<p><span id="more-132"></span>Per prima cosa è importante leggere il manuale online di php.net riguardo alla funzione <a href="http://it.php.net/manual/it/function.fopen.php" title="fopen"><strong>fopen</strong></a> dove sono ben riassunti i vari <em>mode</em> con il loro significato. Dopo una prima lettura parrebbe che il mode che più si addice al nostro caso sia quello <em>&#8216;r+&#8217;</em> che <strong>apre il file in lettura e scrittura e posiziona il puntatore            all&#8217;inizio del file</strong>. Fin qui tutto bene se non fosse per il fatto che dopo un primo semplice test ci accorgeremmo di qualcosa di strano: non è un append al contrario ma una sovrascrittura per il numero di caratteri presenti nella stringa che vogliamo scrivere. Ovvero se il file contiene &#8220;Hello world!&#8221; e aggiungiamo &#8220;Ciao&#8221; il risultato finale sarà &#8220;Ciaoo world!&#8221;. Quindi &#8220;Ciao&#8221; avrà rimpiazzato &#8220;Hell&#8221;. Non è ciò che vogliamo.</p>
<p><strong>Come procedere quindi?</strong> Una soluzione potrebbe essere quella di affrontare il problema in tre passi:</p>
<ol>
<li>Leggere il contenuto iniziale del file</li>
<li>Scrivere la stringa che ci interessa</li>
<li>Appendere il contenuto letto in precedenza</li>
</ol>
<p>Per il punto 1 ricorriamo alla funzione <strong><a href="http://it.php.net/manual/it/function.file-get-contents.php" title="file_get_contents(string $filename)">file_get_contents(string <tt>$filename</tt>)</a></strong> che legge il contenuto di un file passato come parametro:<br />
<code>$string = file_get_contents($filename);</code></p>
<p>Si passa quindi al punto 2 aprendo il file in scrittura sfruttando fopen (mode w)</p>
<p><code>if (!$handle = fopen($filename, 'w')) {<br />
echo "Non si riesce ad aprire il file ($filename)";<br />
exit;<br />
}</code></p>
<p>e si scrive finalmente il nuovo contenuto usando la funzione <a href="http://it.php.net/manual/it/function.fwrite.php">fwrite</a></p>
<p><code>if (!fwrite($handle, $somecontent)) {<br />
echo "Non si riesce a scrivere nel file ($filename)";<br />
exit;<br />
}</code></p>
<p>Ora non resta che aprire nuovamente il file, questa volta realmente in append mode (mode a), ed inserire il contenuto letto al passo 1</p>
<p><code>if (!$handle = fopen($filename, 'a')) {<br />
echo "Non si riesce ad aprire il file ($filename)";<br />
exit;<br />
}</code></p>
<p><code>if (!fwrite($handle, $string)) {<br />
echo "Non si riesce a scrivere nel file ($filename)";<br />
exit;<br />
}</code></p>
<p>Allego come sempre <strong><em><a href="http://phpblog.it/downloads/phpblog/append.cli.php.txt" title="append di testa">lo script completo</a></em></strong> con tanto di commenti per permettervi di provare direttamente quanto proposto. Usatelo come base di partenza per le vostre prove, in caso di dubbi chiedete pure spiegazioni qui sotto nei commenti.</p>
<p><strong>CREDITS</strong><br />
<a href="http://www.flickr.com/photos/apesara/2080658810/" title="Word.Line">Word.Line</a> di <a href="http://www.flickr.com/photos/apesara/" title="apesara">apesara</a> rilasciata sotto licenza Creative Commons &#8220;<a href="http://creativecommons.org/licenses/by/2.0/deed.it" title="Attribuzione 2.0 Generico">Attribuzione 2.0 Generico</a>&#8220;</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://phpblog.it/2008/06/05/scrittura-su-file-append-di-testa/' addthis:title='Scrittura su file: append di testa '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/06/05/scrittura-su-file-append-di-testa/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

