<?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>InternetPost.it</title>
	<atom:link href="http://www.internetpost.it/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.internetpost.it</link>
	<description>Il blog ufficiale di HostingSolutions.it</description>
	<lastBuildDate>Mon, 06 Feb 2012 10:48:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Generare grafici dinamici con PHP e Google Image Charts API</title>
		<link>http://www.internetpost.it/2012/02/generare-grafici-dinamici-con-php-e-google-image-charts-api/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=generare-grafici-dinamici-con-php-e-google-image-charts-api</link>
		<comments>http://www.internetpost.it/2012/02/generare-grafici-dinamici-con-php-e-google-image-charts-api/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 10:48:50 +0000</pubDate>
		<dc:creator>Dimitri De Franciscis</dc:creator>
				<category><![CDATA[Programmazione web]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[csv]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[dati]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[grafici]]></category>
		<category><![CDATA[img]]></category>
		<category><![CDATA[integrazione]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[report]]></category>

		<guid isPermaLink="false">http://www.internetpost.it/?p=1192</guid>
		<description><![CDATA[Google Image Charts API è una soluzione molto comoda, semplice ed efficace per creare grafici su un sito web. Il servizio è completamente gratuito e utilizzabile anche su prodotti commerciali, anche se ovviamente ha delle limitazioni d&#8217;uso che impediscono alcuni utilizzi impropri, ad esempio non è possibile utilizzare le API al di fuori di siti [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/intl/it-IT/apis/chart/image/" target="_blank">Google Image Charts API</a> è una soluzione molto comoda, semplice ed efficace per <strong>creare grafici su un sito web</strong>. Il servizio è completamente gratuito e utilizzabile anche su prodotti commerciali, anche se ovviamente ha delle limitazioni d&#8217;uso che impediscono alcuni utilizzi impropri, ad esempio non è possibile utilizzare le API al di fuori di siti web o in applicazioni client.</p>
<h3>Come funziona</h3>
<p>Il meccanismo per creare i grafici è <strong>incredibilmente semplice</strong>, ma nonostante questa semplicità <strong>consente di creare un innumerevole varietà di grafici</strong>, tutti molto gradevoli graficamente e di immediata comprensione. Il procedimento per ottenerli è il seguente:</p>
<ul>
<li>dopo aver scelto il tipo di grafico, i colori, eccetera, bisogna <strong>creare una URL</strong> verso l&#8217;indirizzo <em>http://chart.apis.google.com/chart</em>, con accodati tutti i parametri necessari;</li>
<li>creare un tag &lt;img&gt; inserendo la URL definita sopra nell&#8217;attributo <em>src</em>.</li>
</ul>
<p>Vediamo qualche esempio, partendo dal più classico grafico a barre:</p>
<p><a href="http://www.internetpost.it/wp-content/uploads/2012/02/05_google_charts_01.png"><img class="alignnone size-full wp-image-1193" src="http://www.internetpost.it/wp-content/uploads/2012/02/05_google_charts_01.png" alt="" width="300" height="200" /></a></p>
<p>&nbsp;</p>
<p>La URL che lo genera è la seguente:</p>
<p><a href="http://chart.apis.google.com/chart?chs=300x200&amp;cht=bvg&amp;chd=t:10,50,60,40&amp;chbh=a">http://chart.apis.google.com/chart?chs=300&#215;200&amp;cht=bvg&amp;chd=t:10,50,60,40&amp;chbh=a</a></p>
<p>Analizziamo i parametri utilizzati:</p>
<ul>
<li><em>chs=300&#215;200</em>: specifica una dimensione di 300 x 200 pixel;</li>
<li><em>cht=bvg</em>: imposta il tipo a &#8220;grafico a barre con raggruppamento&#8221;;</li>
<li><em>chd=t:10,50,60,40</em>: specifica che i dati sono nel formato <em>Basic Text Format</em>, ovvero sono compresi fra 0 e 100;</li>
<li><em>chbh=a</em>: imposta la largezza automatica delle colonne. Senza questo parametro la larghezza verrebbe impostata di default a 23 pixel.</li>
</ul>
<p>Cliccando sul link sopra, potrete verificare di persona come venga caricata un&#8217;immagine di tipo PNG nella finestra del browser; a questo punto è possibile addirittura modificare a piacimento i parametri e vederne immediatamente l&#8217;effetto sul grafico! Ciò è molto utile e aiuta a capire, tuttavia c&#8217;è un modo molto più semplice per sperimentare con le Image Chart API, ovvero utilizzare il comodo <a href="http://code.google.com/intl/it-IT/apis/chart/image/docs/chart_wizard.html" target="_blank">Chart Wizard</a> presente nella documentazione stessa. Tramite questo strumento è possibile esplorare tutti i tipi di grafici e trovare quello giusto per i propri scopi.</p>
<h3>Integrazione con PHP</h3>
<p>L&#8217;estrema versatilità di questo approccio permette di dotare qualsiasi sito, in particolare quelli gestiti da PHP, Java o altro, di funzionalità di visualizzazione dinamiche, ovvero basate su dati che cambiano spesso.</p>
<p>Supponiamo ad esempio di avere un database contenente i dati di vendita di alcuni prodotti, con poche righe di PHP possiamo generare al volo il relativo <strong>report con grafico</strong>:</p>
<pre>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;
&lt;head&gt;
&lt;meta http-equiv="content-type" content="text/html;charset=UTF-8" /&gt;
  &lt;title&gt;Esempio Google Image Chart API&lt;/title&gt;
&lt;style type="text/css"&gt;
table, th, td {
  border: 1px solid #ccc;
}
table {
  border-collapse: collapse;
}
td.number {
  text-align: right;
  font-family: "Courier New";
  font-size: 10pt;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php
// array delle etichette
$labels = array('gen-mar', 'apr-giu', 'lug-set', 'ott-dic');
// categorie:
$categories = array('Prodotto X', 'Prodotto Y');
// array dei dati: ogni sotto-array contiene una delle due serie
$data = array(
  array(10.0, 50.2, 60.6, 40.3),
  array(80.5, 65.1, 70.8, 40.0)
);

// creazione della URL
$url = 'http://chart.apis.google.com/chart?';
// vari parametri del grafico (cfr. documentazione)
$url .= 'chtt=' . urlencode('Riepilogo vendite');
$url .= '&amp;amp;chxt=' . 'y,x';
$url .= '&amp;amp;chbh=' . 'a';
$url .= '&amp;amp;chs=' . '450x200';
$url .= '&amp;amp;cht=' . 'bvg';
$url .= '&amp;amp;chco=' . 'A2C180,FF9900';
// serie dei dati:
$url .= '&amp;amp;chd=t:';
// prima serie
$url .= implode(',', $data[0]);
// seconda serie
$url .= '|';
$url .= implode(',', $data[1]);
// etichette
$url .= '&amp;amp;chxl=1:|' . implode('|', $labels);
// crea una legenda
$url .= '&amp;amp;chdl=' . implode('|', $categories);
?&gt;
&lt;img src="&lt;?echo $url;?&gt;" width="450" height="200" /&gt;

&lt;table style="width: 450px"&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;&amp;nbsp;&lt;/th&gt;
&lt;?php
foreach($labels as $label) {
  echo '&lt;th align="center"&gt;' . htmlspecialchars($label, ENT_NOQUOTES, 'UTF-8') . '&lt;/th&gt;';
}
?&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
&lt;?php
for($i = 0; $i &lt; sizeof($categories); $i++) {
  ?&gt;
  &lt;tr&gt;
&lt;?php
    echo '&lt;th&gt;' . htmlspecialchars($categories[$i], ENT_NOQUOTES, 'UTF-8') . '&lt;/th&gt;';
    foreach($data[$i] as $value) {
      echo '&lt;td class="number"&gt;' . $value . '&lt;/td&gt;';
    }
?&gt;
  &lt;/tr&gt;
  &lt;?php
}
?&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;?
?&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Il risultato è un report immediato, facile da capire e gradevole dal punto di vista grafico:</p>
<p><a href="http://www.internetpost.it/wp-content/uploads/2012/02/05_google_charts_02.png"><img class="alignnone size-medium wp-image-1195" src="http://www.internetpost.it/wp-content/uploads/2012/02/05_google_charts_02-300x187.png" alt="" width="300" height="187" /></a></p>
<h3>Sviluppi</h3>
<p>Come al solito Google, dopo aver creato un eccezionale strumento per gli sviluppatori, non si accomoda sugli allori ma spinge verso nuove e più avanzate tecnologie. Così è stato anche per le Chart API, che ora sono disponibili come liberie Javascript per creare addirittura grafici interattivi dotati di aree sensibili, popup e animazioni. Nel prossimo appuntamento vedremo come utilizzare anche queste.</p>
<h3>Links</h3>
<ul>
<li><a href="http://code.google.com/intl/it-IT/apis/chart/image/" target="_blank">Google Image Charts API</a>;</li>
<li><a href="http://code.google.com/intl/it-IT/apis/chart/image/docs/chart_wizard.html" target="_blank">Chart Wizard</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.internetpost.it/2012/02/generare-grafici-dinamici-con-php-e-google-image-charts-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I server dedicati enterprise con a bordo ServerMate: totalmente managed</title>
		<link>http://www.internetpost.it/2012/02/i-server-dedicati-enterprise-con-a-bordo-servermate-totalmente-managed/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=i-server-dedicati-enterprise-con-a-bordo-servermate-totalmente-managed</link>
		<comments>http://www.internetpost.it/2012/02/i-server-dedicati-enterprise-con-a-bordo-servermate-totalmente-managed/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 08:36:59 +0000</pubDate>
		<dc:creator>HostingSolutions.it</dc:creator>
				<category><![CDATA[HostingSolutions.it]]></category>

		<guid isPermaLink="false">http://www.internetpost.it/?p=1189</guid>
		<description><![CDATA[HostingSolutions.it ha da pochi giorni introdotto la possibilità di selezionare ServerMate come pannello di controllo per il proprio server dedicato Enterprise. Il pannello di controllo ServerMate è il prodotto sviluppato da HostingSolutions.it che attualmente viene utilizzato per tutti i nostri clienti e consente di gestire tutti i servizi, dalla posta elettronica alla gestione dei piani [...]]]></description>
			<content:encoded><![CDATA[<p><strong><a title="HostingSolutions.it, registrazione domini, shared hosting, cloud computing, VPS e Server dedicati" href="http://www.hostingsolutions.it">HostingSolutions.it</a></strong> ha da pochi giorni introdotto la possibilità di selezionare ServerMate come pannello di controllo per il proprio <a title="Server dedicati Enterprise HostingSolutions.it" href="http://www.hostingsolutions.it/dedicato/power-edge.asp">server dedicato Enterprise</a>. Il pannello di controllo <strong>ServerMate</strong> è il prodotto sviluppato da HostingSolutions.it che attualmente viene utilizzato per tutti i nostri clienti e consente di gestire tutti i servizi, dalla posta elettronica alla gestione dei piani di shared hosting, oltre alla presenza di una sezione esclusivamente dedicata alla fatturazione.</p>
<h3><strong>Perchè usare ServerMate sul proprio server dedicato</strong></h3>
<p>In fase di ordine del server dedicato Enterprise potete <strong>selezionare l&#8217;installazione di ServerMate</strong> <strong>con un costo unico di 200 Euro + IVA</strong>. I nostri ingegneri installeranno sul server la versione completa di ServerMate per consentire al cliente di poter gestire il server in completa autonomia, come si trattasse di uno shared hosting, ma con le risorse messe a disposizione dal server dedicato. Questa soluzione permette di rendere il proprio server dedicato completamente managed, in quanto tutti i servizi attivi vengono preinstallati e gestiti dallo staff di HostingSolutions.it.</p>
<p>Una volta richiesta l&#8217;installazione di ServerMate nel proprio server dedicato, non sarà più possibile accedere in SSH al proprio server dedicato, una misura necessaria per evitare che il cliente possa apportare modifiche al sistema, compromettendone il funzionamento.</p>
<p>ServerMate viene aggiornato periodicamente da HostingSolutions.it e rappresenta la risposta ideale anche nel caso in cui si debbano ospitare più siti web sul server dedicato: ServerMate infatti creerà una apposita sezione per ogni sito web.</p>
<p>Per ulteriori informazioni è possibile chiamarci al numero 055-30312626 o scrivere direttamente a <strong>info@hostingsolutions.it</strong> !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.internetpost.it/2012/02/i-server-dedicati-enterprise-con-a-bordo-servermate-totalmente-managed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creare documenti PDF da HTML con PHP e la libreria TCPDF</title>
		<link>http://www.internetpost.it/2012/01/creare-documenti-pdf-da-html-con-php-e-la-libreria-tcpdf/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=creare-documenti-pdf-da-html-con-php-e-la-libreria-tcpdf</link>
		<comments>http://www.internetpost.it/2012/01/creare-documenti-pdf-da-html-con-php-e-la-libreria-tcpdf/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 06:51:55 +0000</pubDate>
		<dc:creator>Dimitri De Franciscis</dc:creator>
				<category><![CDATA[Programmazione web]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[report]]></category>
		<category><![CDATA[tcpdf]]></category>

		<guid isPermaLink="false">http://www.internetpost.it/?p=1180</guid>
		<description><![CDATA[Nella scorsa puntata abbiamo creato dei report in PDF con la libreria FPDF; oggi vedremo un&#8217;altra libreria di questo genere, ovvero TCPDF. In effetti quest&#8217;ultima è più diffusa rispetto a FPDF, grazie all&#8217;installazione molto semplice (non dipende da librerie o estensioni) ma soprattutto per alcune funzionalità avanzate e molto interessanti. Un giro di prova Il [...]]]></description>
			<content:encoded><![CDATA[<p>Nella <a href="http://www.internetpost.it/2012/01/creare-dei-report-in-pdf-con-php/" target="_blank">scorsa puntata</a> abbiamo creato dei report in PDF con la libreria <a href="http://www.fpdf.org/" target="_blank">FPDF</a>; oggi vedremo un&#8217;altra libreria di questo genere, ovvero <a href="http://www.tcpdf.org/" target="_blank">TCPDF</a>. In effetti quest&#8217;ultima è più diffusa rispetto a FPDF, grazie all&#8217;installazione molto semplice (non dipende da librerie o estensioni) ma soprattutto per alcune funzionalità avanzate e molto interessanti.</p>
<h3>Un giro di prova</h3>
<p>Il classico <em>Hello World</em> è molto facile da realizzare, è sufficiente installare la libreria seguendo queste istruzioni:</p>
<ul>
<li>scaricare il pacchetto dal <a href="http://www.tcpdf.org/download.php" target="_blank">sito ufficiale</a>;</li>
<li>estrarre i file nel proprio spazio web. Nel nostro esempio li estrarremo nella sotto-directory <em>lib/tcpdf/</em>;</li>
<li>includere i file PHP necessari nei propri script.</li>
</ul>
<p>Ecco quindi il classico <em>Hello World</em>:</p>
<pre>&lt;?php
require_once('lib/tcpdf/config/lang/ita.php');
require_once('lib/tcpdf/tcpdf.php');

// crea un documento PDF
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

$pdf-&gt;AddPage();

// imposta grassetto (Bold)
$pdf-&gt;SetFont('', 'B');
$pdf-&gt;Write(null, 'Hello World', null, null, 'C', true);

// imposta font standard
$pdf-&gt;SetFont('', '');

$txt = &lt;&lt;&lt;EOD
Lorem ipsum dolor sit amet, in diam nisl ut tellus a in, in vestibulum ante...
Imperdiet nec odio et donec accumsan lacinia, dolor ut, metus aptent curabitur...

EOD;
$pdf-&gt;Write(null, $txt);

// Invia PDF inline
$pdf-&gt;Output('helloworld.pdf', 'I');</pre>
<p>&nbsp;</p>
<p>Analizziamone brevemente alcuni elementi:</p>
<ul>
<li>la prima istruzione <em>require_once</em> istruisce TCPDF sulla lingua da utilizzare per alcuni elementi, ad esempio le etichette per la paginazione, intestazioni, ecc. Nel nostro caso non sono usate, ma per report non banali è sempre meglio specificare la lingua giusta;</li>
<li>il secondo <em>require_once</em> carica la libreria vera e propria;</li>
<li>le istruzioni seguenti creano il PDF vero e proprio, creando prima un&#8217;istanza della classe TCPDF e poi aggiungendo i vari elementi;</li>
<li>la variabile <em>$txt</em> viene specificata utilizzando l&#8217;operatore <em>&lt;&lt;&lt;</em>, sintassi chiamata <a href="http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc" target="_blank"><em>&#8220;heredoc&#8221;</em></a> e che permette di scrivere molte linee di testo senza doverle concatenare;</li>
<li>infine viene creato il PDF con il metodo <em>Output()</em>. È importante notare come il parametro &#8216;I&#8217; serva per inviare il PDF direttamente nella finestra del browser, altre opzioni (cfr. <a href="http://www.tcpdf.org/doc/classTCPDF.html#a3d6dcb62298ec9d42e9125ee2f5b23a1" target="_blank">documentazione</a>) permettono di forzare il download o di salvare il file sul server stesso.</li>
</ul>
<p>Ed ecco come appare nel browser:</p>
<p><a href="http://www.internetpost.it/wp-content/uploads/2012/01/04_tcpdf_01.png"><img class="alignnone size-medium wp-image-1181" src="http://www.internetpost.it/wp-content/uploads/2012/01/04_tcpdf_01-300x63.png" alt="" width="300" height="63" /></a></p>
<p>&nbsp;</p>
<h3>Creazione di un PDF da (X)HTML</h3>
<p>Una delle funzionalità più interessanti è sicuramente la capacità di <strong>creare dei documenti PDF a partire da sorgenti (X)HTML</strong>, aprendo la strada a diverse possibilità molto interessanti:</p>
<ul>
<li><strong>creazione facilitata di documenti PDF</strong> senza dover utilizzare i metodi della classe TCPDF, che sono moltissimi e con diversi parametri da conoscere bene;</li>
<li>creazione di una <strong>versione PDF delle pagine di un sito</strong>;</li>
<li>realizzazione di report;</li>
<li>archiviazione di siti web.</li>
</ul>
<p>Vediamo come fare:</p>
<pre>&lt;?php
require_once('lib/tcpdf/config/lang/ita.php');
require_once('lib/tcpdf/tcpdf.php');

// crea un documento PDF
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

$pdf-&gt;AddPage();

$html = &lt;&lt;&lt;EOD
&lt;h1&gt;Esempio HTML&lt;/h1&gt;
&lt;p&gt;
&lt;strong&gt;Lorem ipsum dolor sit amet&lt;/strong&gt;, in diam nisl ut tellus a in...
&lt;/p&gt;
&lt;p&gt;
Imperdiet nec odio et donec accumsan lacinia, dolor ut, metus aptent curabitur...
&lt;/p&gt;

EOD;

$pdf-&gt;writeHTMLCell(0, 0, 10, 10, $html);

// Invia PDF inline
$pdf-&gt;Output('esempio_html.pdf', 'I');</pre>
<p>&nbsp;</p>
<p>Come potete notare, l&#8217;unica differenza è l&#8217;utilizzo del metodo <a href="http://www.tcpdf.org/doc/classTCPDF.html#a8458280d15b73d3baffb28eebe2d9246" target="_blank"><em>writeHTMLCell()</em></a>, che a differenza di <em>Write()</em> sa interpretare correttamente il codice HTML. In alternativa si può usare il metodo <a href="http://www.tcpdf.org/doc/classTCPDF.html#ac3fdf25fcd36f1dce04f92187c621407" target="_blank"><em>writeHTML()</em></a>, che ha qualche parametro in meno. Il risultato è il seguente:</p>
<p><a href="http://www.internetpost.it/wp-content/uploads/2012/01/04_tcpdf_02.png"><img class="alignnone size-medium wp-image-1182" src="http://www.internetpost.it/wp-content/uploads/2012/01/04_tcpdf_02-300x63.png" alt="" width="300" height="63" /></a></p>
<p>&nbsp;</p>
<p><strong>Questo metodo purtroppo ha qualche limitazione</strong>, ad esempio l&#8217;HTML deve essere <em>ben formato</em> (ovvero i tag devono essere bilanciati), inoltre non tutti gli elementi HTML sono supportati.</p>
<h3>Links</h3>
<ul>
<li><a href="http://www.tcpdf.org/" target="_blank">TCPDF</a>;</li>
<li><a href="http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc" target="_blank">Sintassi <em>heredoc</em> per le stringhe PHP</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.internetpost.it/2012/01/creare-documenti-pdf-da-html-con-php-e-la-libreria-tcpdf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aggiunte oltre 20 estensioni a dominio su HostingSolutions.it</title>
		<link>http://www.internetpost.it/2012/01/aggiunte-oltre-20-estensioni-a-dominio-su-hostingsolutions-it/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=aggiunte-oltre-20-estensioni-a-dominio-su-hostingsolutions-it</link>
		<comments>http://www.internetpost.it/2012/01/aggiunte-oltre-20-estensioni-a-dominio-su-hostingsolutions-it/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 16:33:55 +0000</pubDate>
		<dc:creator>HostingSolutions.it</dc:creator>
				<category><![CDATA[HostingSolutions.it]]></category>
		<category><![CDATA[Webhosting e Domini]]></category>
		<category><![CDATA[domini]]></category>
		<category><![CDATA[registrazione domini]]></category>

		<guid isPermaLink="false">http://www.internetpost.it/?p=1178</guid>
		<description><![CDATA[Nella giornata di oggi HostingSolutions.it ha aggiunto a listino oltre 20 estensioni a dominio registrabili, incrementando così l&#8217;offerta di estensioni attualmente registrabili all&#8217;interno del nostro sito. Tutte le nuove estensioni aggiunte prevedono i canonici servizi offerti da HostingSolutions.it, tra cui assistenza telefonica diretta per qualsiasi informazione o problema. Le estensioni aggiunte sono nazionali e riferite [...]]]></description>
			<content:encoded><![CDATA[<p>Nella giornata di oggi <strong><a href="http://www.hostingsolutions.it">HostingSolutions.it</a></strong> ha aggiunto a listino oltre 20 estensioni a dominio registrabili, incrementando così l&#8217;offerta di estensioni attualmente registrabili all&#8217;interno del nostro sito. Tutte le nuove estensioni aggiunte prevedono i canonici servizi offerti da HostingSolutions.it, tra cui assistenza telefonica diretta per qualsiasi informazione o problema.</p>
<p>Le estensioni aggiunte sono nazionali e riferite a diversi paesi del mondo, con canoni variabili di registrazione a seconda del paese scelto. Per la registrazione delle estensioni HostingSolutions.it si affida a <strong>Tucows</strong>, uno dei più importanti e rispettati registrar al mondo, con il quale ha un esclusivo rapporto di collaborazione.</p>
<p>Per visionare tutte le estensioni registrabili su HostingSolutions.it è sufficiente consultare questa pagina: <a title="Registrazione domini con HostingSolutions.it" href="http://www.hostingsolutions.it/domini/dom001.asp">http://www.hostingsolutions.it/domini/dom001.asp</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.internetpost.it/2012/01/aggiunte-oltre-20-estensioni-a-dominio-su-hostingsolutions-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft WebMatrix: create facilmente il vostro sito web con HostingSolutions.it</title>
		<link>http://www.internetpost.it/2012/01/microsoft-webmatrix-create-facilmente-il-vostro-sito-web-con-hostingsolutions-it/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=microsoft-webmatrix-create-facilmente-il-vostro-sito-web-con-hostingsolutions-it</link>
		<comments>http://www.internetpost.it/2012/01/microsoft-webmatrix-create-facilmente-il-vostro-sito-web-con-hostingsolutions-it/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 14:00:54 +0000</pubDate>
		<dc:creator>HostingSolutions.it</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[HostingSolutions.it]]></category>
		<category><![CDATA[Webhosting e Domini]]></category>
		<category><![CDATA[hostingsolutions]]></category>
		<category><![CDATA[microsoft webmatrix]]></category>
		<category><![CDATA[webmatrix]]></category>

		<guid isPermaLink="false">http://www.internetpost.it/?p=1172</guid>
		<description><![CDATA[Da circa due settimane HostingSolutions.it è uno dei partner certificati per l&#8217;utilizzo di Microsoft Webmatrix. In questo articolo di oggi vediamo insieme come potete utilizzare Microsoft WebMatrix per migliorare o creare da zero il vostro sito web, anche se scritto con linguaggi di scripting o con un CMS come WordPress o Drupal. Cosa è Microsoft [...]]]></description>
			<content:encoded><![CDATA[<p>Da circa due settimane <strong><a title="HostingSolutions.it, shared hosting, webhosting, domini, posta elettronica" href="http://www.hostingsolutions.it">HostingSolutions.it</a></strong> è uno dei partner certificati per l&#8217;utilizzo di <strong>Microsoft Webmatrix</strong>. In questo articolo di oggi vediamo insieme come potete utilizzare Microsoft WebMatrix per migliorare o creare da zero il vostro sito web, anche se scritto con linguaggi di scripting o con un CMS come WordPress o Drupal.</p>
<h3><strong>Cosa è Microsoft WebMatrix</strong></h3>
<p>Microsoft WebMatrix è una vera e propria piattaforma software (scaricabile da questo <strong>indirizzo</strong>) che permette di realizzare da zero un proprio sito web, dalla fase di scelta del template e impostazione delle pagine fino alla pubblicazione. Microsoft ha investito moltissimo nella realizzazione di un tool utile per i suoi clienti e in grado, davvero, di far creare loro un sito web gestibile poi nel tempo. WebMatrix è quindi una piattaforma compatibile con il sistema operativo Windows che vi permette di creare un sito web e continuare a gestirlo anche una volta pubblicato.</p>
<p>Di seguito alcuni screen relativi a Microsoft WebMatrix. Da notare che questa piattaforma consente di creare siti sia a persone poco esperte, ma anche a developers e professionisti con specifiche esigenze.</p>
<p><a href="http://www.internetpost.it/wp-content/uploads/2012/01/microsoft-webmatrix-22-e1326979176409.png"><img class="aligncenter size-full wp-image-1174" title="microsoft-webmatrix-22" src="http://www.internetpost.it/wp-content/uploads/2012/01/microsoft-webmatrix-22-e1326979176409.png" alt="" width="500" height="358" /></a></p>
<p><a href="http://www.internetpost.it/wp-content/uploads/2012/01/webmatrixStartPage-e1326979130151.png"><img class="aligncenter size-full wp-image-1173" title="webmatrixStartPage" src="http://www.internetpost.it/wp-content/uploads/2012/01/webmatrixStartPage-e1326979130151.png" alt="" width="500" height="245" /></a></p>
<p><a href="http://www.internetpost.it/wp-content/uploads/2012/01/WebMatrixDashBoard-e1326979291932.png"><img class="aligncenter size-full wp-image-1175" title="WebMatrixDashBoard" src="http://www.internetpost.it/wp-content/uploads/2012/01/WebMatrixDashBoard-e1326979291932.png" alt="" width="500" height="292" /></a></p>
<p>&nbsp;</p>
<h3><strong>Utilizzare Microsoft WebMatrix con un piano di shared hosting Windows</strong></h3>
<p><strong><a href="http://www.hostingsolutions.it">HostingSolutions.it</a></strong> ha appena finalizzato la propria adesione al programma WebMatrix, questo significa che tramite tutti i <a title="Piani shared hosting Windows HostingSolutions.it" href="http://www.hostingsolutions.it/hosting/hosting-windows.asp">piani di shared hosting di HostingSolutions.it</a> potete liberamente utilizzare Microsoft WebMatrix sul vostro sito web: i nostri server sono già configurati per poter ricevere le connessioni da WebMatrix e pubblicare in automatico il vostro sito web.</p>
<p>WebMatrix è supportato dal nostro piano entry level Silver Windows dal costo di 65 Euro annui fino al piano Enterprise di HostingSolutions.it pensato per aziende e professionisti. Una volta acquistato il piano non dovete modificare alcuna impostazione o configurazione, il vostro piano è automaticamente attivo e potete impostare i dati di connessione ai nostri server da WebMatrix.</p>
<p>Per avere maggiori informazioni su WebMatrix è possibile visitare: <a title="Microsoft WebMatrix con integrazione su HostingSolutions.it" href="http://www.microsoft.com/italy/scegli/webplatform/studenti/perche.aspx">http://www.microsoft.com/italy/scegli/webplatform/studenti/perche.aspx</a></p>
<p>Per qualsiasi informazione relativo al supporto di WebMatrix su HostingSolutions.it potete chiamarci al numero <strong>055-30312626</strong> oppure al numero <strong>info@hostingsolutions.it</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.internetpost.it/2012/01/microsoft-webmatrix-create-facilmente-il-vostro-sito-web-con-hostingsolutions-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Posta elettronica: da 250 MB a 2 GB per tutte le vostre caselle!</title>
		<link>http://www.internetpost.it/2012/01/posta-elettronica-da-250-mb-a-2-gb-per-tutte-le-vostre-caselle/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=posta-elettronica-da-250-mb-a-2-gb-per-tutte-le-vostre-caselle</link>
		<comments>http://www.internetpost.it/2012/01/posta-elettronica-da-250-mb-a-2-gb-per-tutte-le-vostre-caselle/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 09:28:22 +0000</pubDate>
		<dc:creator>HostingSolutions.it</dc:creator>
				<category><![CDATA[Caratteristiche tecniche]]></category>
		<category><![CDATA[HostingSolutions.it]]></category>
		<category><![CDATA[Webhosting e Domini]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[posta elettronica]]></category>
		<category><![CDATA[spazio disco]]></category>

		<guid isPermaLink="false">http://www.internetpost.it/?p=1167</guid>
		<description><![CDATA[Grandi novità oggi in casa HostingSolutions.it! Tutte le caselle di posta elettronica dei nostri piani di webhosting passano da 250 MB di spazio web a ben 2 GB per singola casella, senza alcun costo aggiuntivo! HostingSolutions.it ha da sempre privilegiato la posta elettronica come uno dei servizi maggiormente richiesti e utilizzati dai suoi clienti e [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.internetpost.it/wp-content/uploads/2012/01/posta_elettronica.jpg"><img class="alignright size-thumbnail wp-image-1168" title="laptop email" src="http://www.internetpost.it/wp-content/uploads/2012/01/posta_elettronica-150x150.jpg" alt="" width="150" height="150" /></a>Grandi novità oggi in casa <strong><a title="HostingSolutions.it, soluzioni di shared hosting" href="http://www.hostingsolutions.it">HostingSolutions.it</a></strong>! Tutte le caselle di posta elettronica dei nostri piani di webhosting <strong>passano da 250 MB di spazio web a ben 2 GB per singola casella, senza alcun costo aggiuntivo!</strong></p>
<p>HostingSolutions.it ha da sempre privilegiato la posta elettronica come uno dei servizi maggiormente richiesti e utilizzati dai suoi clienti e ha deciso pertanto di premiare i suoi clienti con una espansione che <strong>permette di memorizzare molti più dati all&#8217;interno delle proprie caselle senza costringere i clienti a cancellare le email più datate</strong>. La nostra attuale infrastruttura di posta elettronica ci consente di aggiungere &#8220;potenza&#8221; senza alcun downtime, facendo si che i nostri server scalino orizzontalmente al crescere delle risorse necessarie.</p>
<p>Attualmente tutti i nuovi clienti che ordinano un piano di shared hosting Linux o Windows dal nostro listino trovano già le caselle incluse nel piano con spazio da 2 GB. I vecchi clienti possono invece chiedere la migrazione al nuovo sistema, senza alcun costo,<strong> aprendo un ticket dal loro pannello di controllo e chiedendo informazioni in merito all&#8217;aggiornamento.</strong></p>
<p>Tutti i piani di shared hosting di HostingSolutions.it <a title="Piani shared hosting Linux di HostingSolutions.it" href="http://www.hostingsolutions.it/hosting/hosting-linux.asp">presentano un numero variabile di caselle di posta elettronica</a>, da un minimo di 10 per Silver Linux e Windows, ad un massimo di 100 caselle di posta per Enterprise Windows e Linux: tutta la posta elettronica viene attivata su server esterni, dedicati esclusivamente alle email, che ci consentono di garantire uno dei migliori servizi di posta elettronica abbinato a shared hosting.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.internetpost.it/2012/01/posta-elettronica-da-250-mb-a-2-gb-per-tutte-le-vostre-caselle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creare dei report in PDF con PHP</title>
		<link>http://www.internetpost.it/2012/01/creare-dei-report-in-pdf-con-php/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=creare-dei-report-in-pdf-con-php</link>
		<comments>http://www.internetpost.it/2012/01/creare-dei-report-in-pdf-con-php/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 13:32:35 +0000</pubDate>
		<dc:creator>Dimitri De Franciscis</dc:creator>
				<category><![CDATA[Programmazione web]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[font]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[report]]></category>
		<category><![CDATA[tabelle]]></category>

		<guid isPermaLink="false">http://www.internetpost.it/?p=1159</guid>
		<description><![CDATA[La creazione di report è un&#8217;attività molto comune per tutti i programmatori, non solo per coloro che si occupano a tempo pieno di applicazioni gestionali e simili. La gestione di siti web o e-commerce, cataloghi on-line, community e qualsiasi attività che coinvolga dei dati prima o poi avrà bisogno di analizzarli, ecco dunque che la [...]]]></description>
			<content:encoded><![CDATA[<p>La creazione di report è un&#8217;attività molto comune per tutti i programmatori, non solo per coloro che si occupano a tempo pieno di applicazioni gestionali e simili. La gestione di siti web o e-commerce, cataloghi on-line, community e qualsiasi attività che coinvolga dei dati prima o poi avrà bisogno di analizzarli, ecco dunque che la necessità di creare dei report si manifesta.</p>
<p>In questo articolo vedremo come creare dei semplici report utilizzando PHP e la libreria <a href="http://www.fpdf.org/" target="_blank">FPDF</a>, che ha diversi pregi: è molto leggera, è completamente <em>free</em> anche per usi commerciali e modifiche, è ben documentata.</p>
<h3>Un semplice report tabulare</h3>
<p>Per familiarizzare con la libreria consigliamo di installare lo stack <a href="http://www.apachefriends.org/" target="_blank">XAMPP</a> adatto al proprio sistema (Win o Linux), perché di base ha già installato FPDF come modulo PEAR.</p>
<p>In questo primo script vediamo come sia possibile creare un report in forma tabulare:</p>
<pre>&lt;?php
include ('fpdf/fpdf.php');

define('EURO', chr(128));

// dati di test

$data = array(
  array(
    'product_code' =&gt; 'S284056',
    'product_name' =&gt; 'Ferrary F1234',
    'customer_code' =&gt; 'CUST1234',
    'customer_name' =&gt; 'Gino Ginetti',
    'amount' =&gt; 250000),
  array('product_code' =&gt; 'S284056',
    'product_name' =&gt; 'Ferrary F1234',
    'customer_code' =&gt; 'CUST1100',
    'customer_name' =&gt; 'Gongolo Nannolo',
    'amount' =&gt; 270000 ),
  array('product_code' =&gt; 'S292383',
    'product_name' =&gt; 'Lardonghini Mucila',
    'customer_code' =&gt; 'CUST0120',
    'customer_name' =&gt; 'Pasquale Pasqualini',
    'amount' =&gt; 352000 ),
  array('product_code' =&gt; 'S292383',
    'product_name' =&gt; 'Lardonghini Mucila',
    'customer_code' =&gt; 'CUST1234',
    'customer_name' =&gt; 'Gino Ginetti',
    'amount' =&gt; 352000 ),
  array('product_code' =&gt; 'S898964',
    'product_name' =&gt; 'Porsck Paprika',
    'customer_code' =&gt; 'CUST0120',
    'customer_name' =&gt; 'Pasquale Pasqualini',
    'amount' =&gt; 352000 ),
  array('product_code' =&gt; 'S898964',
    'product_name' =&gt; 'Porsck Paprika',
    'customer_code' =&gt; 'CUST0054',
    'customer_name' =&gt; 'Pino Pinerati',
    'amount' =&gt; 175000 )
);

// crea PDF

$pdf = new FPDF();
$pdf-&gt;AddPage();
$pdf-&gt;SetFont('Arial', 'B', 16);
$pdf-&gt;Cell(40, 10, 'Report vendite');
$pdf-&gt;Ln();

$pdf-&gt;Ln(5);

$pdf-&gt;SetFont('Helvetica', 'B', 10);
$pdf-&gt;Cell(30, 7, 'Cod. prodotto', 1);
$pdf-&gt;Cell(40, 7, 'Nome prodotto', 1);
$pdf-&gt;Cell(30, 7, 'Cod. cliente', 1);
$pdf-&gt;Cell(40, 7, 'Nome cliente', 1);
$pdf-&gt;Cell(40, 7, 'Prezzo pagato', 1);
$pdf-&gt;Ln();

$pdf-&gt;SetFont('Helvetica', '', 10);

foreach($data as $row) {
  $pdf-&gt;Cell(30, 7, $row['product_code'], 1);
  $pdf-&gt;Cell(40, 7, $row['product_name'], 1);
  $pdf-&gt;Cell(30, 7, $row['customer_code'], 1);
  $pdf-&gt;Cell(40, 7, $row['customer_name'], 1);
  // formattazione italiana
  $pdf-&gt;Cell(40, 7, EURO . ' ' . number_format($row['amount'], 2, ',', '.'), 1, 0, 'R');
  $pdf-&gt;Ln();
}

$pdf-&gt;Output();</pre>
<p>&nbsp;</p>
<p>In questo breve script ci sono molti elementi da notare:</p>
<ul>
<li>l&#8217;istruzione <em>include (&#8216;fpdf/fpdf.php&#8217;);</em> funziona con XAMPP, in un&#8217;applicazione reale potrebbe essere necessario utilizzare un path differente. Verificare la documentazione o l&#8217;amministratore di sistema per chiarire eventuali dubbi;</li>
<li>L&#8217;istruzione <em>define(&#8216;EURO&#8217;, chr(128));</em> definisce il carattere &#8220;euro&#8221;, in modo da non doversi ricordare il codice carattere (128);</li>
<li>l&#8217;array <em>$data</em> contiene i dati prelevati dal (ipotetico) database;</li>
<li>per creare il PDF viene istanziato un oggetto di tipo <em>FPDF</em>;</li>
<li>per creare i vari elementi del report abbiamo fatto uso praticamente di soli tre metodi: <em>SetFont()</em>, <em>Cell()</em> e <em>Ln()</em>;</li>
<li>l&#8217;istruzione <em>$pdf-&gt;Output()</em>, infine, invia al browser i byte del PDF prodotto.</li>
</ul>
<p>Il risultato è un semplice file PDF, aperto direttamente nella finestra del browser:</p>
<p><a href="http://www.internetpost.it/wp-content/uploads/2012/01/01_php_fpdf_01.png"><img class="alignnone size-medium wp-image-1160" src="http://www.internetpost.it/wp-content/uploads/2012/01/01_php_fpdf_01-300x108.png" alt="" width="300" height="108" /></a></p>
<p>&nbsp;</p>
<p>Da notare come la colonna degli importi sia stata allineata a destra grazie al parametro &#8216;R&#8217; nel metodo <em>Cell()</em>. Sul sito ufficiale c&#8217;è la documentazione completa della libreria (anche in italiano!) alla quale vi rimandiamo per scoprire i dettagli di utilizzo dei vari metodi.</p>
<h3>Raggruppamenti</h3>
<p><strong>Una delle funzionalità più utili dei report sono sicuramente i <em>raggruppamenti</em></strong>, perché consentono di estrarre degli indicatori sintetici da una lunga fila di dati. Affinché si possano raggruppare i dati, è necessario che questi siano ordinati per la caratteristica che si vuole raggruppare. Nell&#8217;esempio sopra possiamo notare che i rapporti di vendita sono già ordinati per prodotto: non ci resta che creare un report che sfrutti questo raggruppamento:</p>
<pre>&lt;?php
include ('fpdf/fpdf.php');

define('EURO', chr(128));

function report_table_header($pdf) {
  $pdf-&gt;SetFont('Helvetica', 'B', 10);
  $pdf-&gt;Cell(30, 7, 'Cod. prodotto', 1);
  $pdf-&gt;Cell(40, 7, 'Nome prodotto', 1);
  $pdf-&gt;Cell(30, 7, 'Cod. cliente', 1);
  $pdf-&gt;Cell(40, 7, 'Nome cliente', 1);
  $pdf-&gt;Cell(40, 7, 'Prezzo pagato', 1);
  $pdf-&gt;Ln();
}

function report_product_total($pdf, $productTotal) {
  if (isset($productTotal)) {
    $pdf-&gt;SetFont('Helvetica', 'B', 10);
    $pdf-&gt;Cell(100, 7, '', 3);
    $pdf-&gt;Cell(40, 7, 'Totale', 0, 0, 'R');
    $pdf-&gt;Cell(40, 7, EURO . ' ' . number_format($productTotal, 2, ',', '.'), 1, 0, 'R');
    $pdf-&gt;Ln();
  }
}

// dati di test

NB: COPIARE LA SEZIONE DI DATI DALL'ESEMPIO N. 1

// crea PDF

$pdf = new FPDF();
$pdf-&gt;AddPage();
$pdf-&gt;SetFont('Arial', 'B', 16);
$pdf-&gt;Cell(40, 10, 'Report vendite - per modello');
$pdf-&gt;Ln();

$pdf-&gt;Ln(5);

$pdf-&gt;SetFont('Helvetica', '', 10);

$lastProductCode = null;
$breakProduct = true;
$productTotal = null;

foreach($data as $row) {
  $breakProduct = $row['product_code'] != $lastProductCode;

  if ($breakProduct) {
    // mostra totali del prodotto precedente (se c'è)
    report_product_total($pdf, $productTotal);

    // mostra titolo prodotto
    $pdf-&gt;SetFont('Helvetica', 'B', 10);
    $pdf-&gt;Cell(40, 10, $row['product_code'] . ' - ' . $row['product_name']);
    $pdf-&gt;Ln();
    // mostra header tabella
    report_table_header($pdf);
  }

  $pdf-&gt;SetFont('Helvetica', '', 10);
  $pdf-&gt;Cell(30, 7, $row['product_code'], 1);
  $pdf-&gt;Cell(40, 7, $row['product_name'], 1);
  $pdf-&gt;Cell(30, 7, $row['customer_code'], 1);
  $pdf-&gt;Cell(40, 7, $row['customer_name'], 1);
  // formattazione italiana
  $pdf-&gt;Cell(40, 7, EURO . ' ' . number_format($row['amount'], 2, ',', '.'), 1, 0, 'R');
  $pdf-&gt;Ln();

  $lastProductCode = $row['product_code'];
  $productTotal += $row['amount'];
}

// totale dell'ultimo prodotto
report_product_total($pdf, $productTotal);

$pdf-&gt;Output();</pre>
<p>&nbsp;</p>
<p>NB: Per limitare la lunghezza del sorgente abbiamo omesso la dichiarazione dell&#8217;array $data, che può essere copiata dall&#8217;esempio n. 1. Da notare:</p>
<ul>
<li>abbiamo spostato il codice che crea l&#8217;intestazione della tabella nella funzione <em>report_table_header()</em>, poiché questa intestazione andrà ripetuta per ogni prodotto;</li>
<li>la funzione <em>report_product_total()</em> mostra l&#8217;ammontare totale; da notare in questo caso l&#8217;uso di una cella che occupa tre spazi (l&#8217;quivalente del colspan in HTML);</li>
<li>le variabili <em>$lastProductCode </em>, <em>$breakProduct</em> e <em>$productTotal</em> sono utilizzate per capire se mostrare una nuova tabella e il riassunto della precedente, oppure no.</li>
</ul>
<p>L&#8217;output di questo report è il seguente:</p>
<p><a href="http://www.internetpost.it/wp-content/uploads/2012/01/01_php_fpdf_02.png"><img class="alignnone size-medium wp-image-1161" src="http://www.internetpost.it/wp-content/uploads/2012/01/01_php_fpdf_02-300x203.png" alt="" width="300" height="203" /></a></p>
<p>&nbsp;</p>
<h3>Links</h3>
<ul>
<li><a href="http://www.fpdf.org/" target="_blank">FPDF</a>;</li>
<li><a href="http://www.apachefriends.org/" target="_blank">XAMPP</a>;</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.internetpost.it/2012/01/creare-dei-report-in-pdf-con-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gestione degli errori in PHP</title>
		<link>http://www.internetpost.it/2012/01/gestione-degli-errori-in-php/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=gestione-degli-errori-in-php</link>
		<comments>http://www.internetpost.it/2012/01/gestione-degli-errori-in-php/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 16:13:35 +0000</pubDate>
		<dc:creator>Dimitri De Franciscis</dc:creator>
				<category><![CDATA[Programmazione web]]></category>
		<category><![CDATA[catch]]></category>
		<category><![CDATA[errori]]></category>
		<category><![CDATA[exception]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[try]]></category>

		<guid isPermaLink="false">http://www.internetpost.it/?p=1152</guid>
		<description><![CDATA[La corretta gestione degli errori è un aspetto tanto fondamentale quanto trascurato dello sviluppo software che fin troppo spesso viene affrontato troppo tardi o senza la dovuta attenzione. In questo articolo vedremo come gestire gli errori sfruttando i meccanismi delle Exception (eccezioni) di PHP. Exception in PHP PHP con la versione 5 ha acquisito la [...]]]></description>
			<content:encoded><![CDATA[<p><strong>La corretta gestione degli errori è un aspetto tanto fondamentale quanto trascurato dello sviluppo software</strong> che fin troppo spesso viene affrontato troppo tardi o senza la dovuta attenzione. In questo articolo vedremo come gestire gli errori sfruttando i meccanismi delle <em>Exception</em> (eccezioni) di PHP.</p>
<h3>Exception in PHP</h3>
<p>PHP con la versione 5 ha acquisito la nozione di <em>Exception</em> prendendo spunto da altri linguaggi di programmazione object-oriented come Java o C#. Il meccanismo di base è il seguente:</p>
<pre>try {
    // (1) codice che lancia un'eccezione
    throw new Exception('Errore di tipo bla bla bla', CODICE_ERRORE);
}
catch(Exception $e) {
    // (2) gestione dell'eccezione
}</pre>
<p>&nbsp;</p>
<p>Quando una funzione PHP fallisce viene lanciata un&#8217;eccezione, ovvero un&#8217;istanza della classe <em>Exception</em> o una sua sotto-classe. Il lancio dell&#8217;eccezione può avvenire durante una chiamata ad una funzione di libreria o nel nostro stesso codice, utilizzando il comando <em>throw</em> come nella sezione <em>(1)</em> dell&#8217;esempio qui sopra.</p>
<p>Strutturando il codice in questo modo, è facile gestire molteplici situazioni di errore in un modo molto semplice e facilmente estendibile. <strong>È possibile infatti definire le proprie eccezioni estendendo la classe Exception</strong> ed utilizzando più di un blocco <em>catch</em>. Ipotizziamo ad esempio di dover gestire l&#8217;upload di file, per distinguere i vari errori potremmo definire queste eccezioni:</p>
<ul>
<li><em>ConfigurationException</em> nel caso il server o l&#8217;applicazione non sia stata configurata correttamente per gestire l&#8217;upload;</li>
<li><em>FileTooBigException</em> nel caso l&#8217;utente abbia tentato di inviare un file troppo grande;</li>
<li><em>WriteException</em> nel caso non sia possibile scrivere sul filesystem, per problemi di permessi o altro.</li>
</ul>
<p>Supponiamo inoltre che l&#8217;upload vero e proprio sia gestito da una funzione <em>upload_file()</em>; il codice che chiama la funzione avrà dunque questa forma:</p>
<pre>try {
  upload_file();
}
catch(ConfigurationException $e) {
  echo 'Errore di configurazione';
}
catch(FileTooBigException $e) {
  echo 'File troppo grande';
}
catch(WriteException $e) {
  echo 'Impossibile scrivere su filesystem';
}
catch(Exception $e) {
  echo 'Errore inaspettato: ' . $e-&gt;getMessage();
}</pre>
<p>&nbsp;</p>
<p>Nell&#8217;ultimo <em>catch</em>, come potete notare, catturiamo le eccezioni che non rientrano nella casistica sopra esposta; <strong>aggiungere un blocco <em>catch(Exception $e)</em> generico rappresenta quindi una &#8220;rete di protezione&#8221; efficace contro gli errori inaspettati</strong>.</p>
<h3>Qualche consiglio utile</h3>
<p><strong>Saper catturare le eccezioni non basta</strong>, ma <strong>è necessario che l&#8217;applicazione stessa sia strutturata correttamente</strong>. In caso contrario, la gestione stessa degli errori potrebbe provocarne altri! Una situazione davvero pericolosa, soprattutto se la nostra applicazione è un gestionale.</p>
<p>Uno degli errori che si commettono più di frequente è il seguente:</p>
<pre>try {
  // codice che fallisce
  $risultati = funzione_che_genera_eccezione();
}
catch(Exception $ex) {
  // mostra messaggio d'errore
  $errorMessage = "Si è verificato un errore: " . $ex-&gt;getMessage();
}

// SBAGLIATO: continuo come se non fosse successo nulla!
echo 'Risultato: ' . $risultati;</pre>
<p>&nbsp;</p>
<p>Qui lo sbaglio è che, nonostante l&#8217;eccezione sia stata catturata e l&#8217;errore sia stato notificato, l&#8217;applicazione agisce come se non ci sia stato alcun problema. A seconda dell&#8217;applicazione, questo potrebbe portare a:</p>
<ul>
<li>ulteriori eccezioni lanciate durante l&#8217;esecuzione della pagina, per variabili non inizializzate o con valori non corretti;</li>
<li>l&#8217;utente potrebbe non accorgersi dell&#8217;errore e continuare a combinare danni.</li>
</ul>
<p>Il <em>pattern</em> che vedremo ora è perfettamente lecito e si riferisce alla classica pagina PHP &#8220;tutto in uno&#8221;, solitamente presente in applicazioni molto semplici o siti web; questo tipo di pagina contiene sia il codice PHP per la logica di business che l&#8217;HTML per presentare i contenuti. Un modo molto efficace per struttura una pagina simile è di suddividere la logica dalla presentazione, in questo modo:</p>
<pre>&lt;?php
try {
  /* (1) logica di business dell'applicazione:
   * - lettura dei parametri;
   * - esecuzione di funzioni;
   * - lettura / scrittura da database;
   * - ecc.
   */
}
catch(Exception $ex) {
  // (2) gestione errori
  $errorMessage = "Si è verificato un errore (" . $ex-&gt;getCode() . "):\n" . $ex-&gt;getMessage();
  $errorMessage = nl2br(htmlspecialchars($errorMessage, ENT_NOQUOTES, 'UTF-8'));
}
?&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;Esempio gestione eccezioni&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php
if (isset($errorMessage)) {
?&gt;
  &lt;div class="errorMessage"&gt;
    &lt;?php echo $errorMessage; ?&gt;
  &lt;/div&gt;
&lt;?php
}
else {
?&gt;

&lt;h3&gt;Risultato dell'elaborazione&lt;/h3&gt;

[...]

&lt;?php
}
?&gt;
&lt;/body&gt;</pre>
<p>&nbsp;</p>
<p>In questo modo il codice PHP che si occupa della presentazione verrà eseguito solo se non si sono verificati errori; in caso contrario verrà mostrato un messaggio con i dettagli dell&#8217;eccezione verificasi.</p>
<h3>Links</h3>
<ul>
<li><a href="http://www.php.net/manual/en/language.exceptions.php" target="_blank">PHP: Exceptions</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.internetpost.it/2012/01/gestione-degli-errori-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creazione di bottoni Twitter personalizzati per condividere pagine web</title>
		<link>http://www.internetpost.it/2012/01/creazione-di-bottoni-twitter-personalizzati-per-condividere-pagine-web/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=creazione-di-bottoni-twitter-personalizzati-per-condividere-pagine-web</link>
		<comments>http://www.internetpost.it/2012/01/creazione-di-bottoni-twitter-personalizzati-per-condividere-pagine-web/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 10:02:29 +0000</pubDate>
		<dc:creator>Dimitri De Franciscis</dc:creator>
				<category><![CDATA[Programmazione web]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[content management system]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[link]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[share]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[web 2.0]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://www.internetpost.it/?p=1145</guid>
		<description><![CDATA[Twitter non ha certo bisogno di presentazioni, è infatti uno dei social network più celebri ed utilizzati; dopo un breve periodo di flessione infatti è tornato a crescere, sia per quando riguarda il volume di &#8220;tweet&#8221; prodotti che per numero di iscritti. In questo articolo vedremo come costruire bottoni personalizzati per condividere pagine web. Una [...]]]></description>
			<content:encoded><![CDATA[<p>Twitter non ha certo bisogno di presentazioni, è infatti uno dei social network più celebri ed utilizzati; dopo un breve periodo di flessione infatti è tornato a crescere, sia per quando riguarda il volume di <em>&#8220;tweet&#8221;</em> prodotti che per numero di iscritti. In questo articolo vedremo come costruire bottoni personalizzati per condividere pagine web.</p>
<h3>Una soluzione &#8220;facile &amp; veloce&#8221;, ma non molto leggera</h3>
<p>Creare un pulsante per condividere le pagine su Twitter è davvero molto semplice, Twitter stesso infatti mette a disposizione <a href="https://twitter.com/about/resources/buttons#tweet" target="_blank">uno strumento apposito</a> per la creazione facilitata del codice HTML da incorporare nel proprio sito web. <strong>Questo strumento ufficiale è molto comodo</strong>, perché ci mette a disposizione in un attimo tutte le funzionalità di cui abbiamo bisogno: URL della pagina in automatico, menzioni, hashtag. <strong>Purtroppo però appesantisce la pagina</strong>, per diversi motivi:</p>
<ul>
<li>inserisce del codice Javascript;</li>
<li>il Javascript stesso fa partire una richiesta HTTP per scaricare il file <em>widget.js</em>. Questo file, nonostante sia minimizzato, occupa quasi 50kb ed è ricco di funzioni: un po&#8217; troppo per un semplice link!</li>
<li>il pulsante che viene generato è un <em>&lt;iframe&gt;</em>, questo vuol dire che al suo interno c&#8217;è una pagina HTML completa. Ciò infierisce ulteriormente sul &#8220;peso&#8221; della pagina, soprattutto per quanto riguarda l&#8217;occupazione di RAM nel computer dell&#8217;utente.</li>
</ul>
<h3>Generare il link</h3>
<p>Se esaminiamo la pagina <a href="https://twitter.com/about/resources/buttons#tweet" target="_blank">Twitter Buttons</a> con uno strumento di sviluppo (come Firebug o il debugger incluso in Google Chrome) ci accorgiamo che <strong>il bottone di condivisione non è altro che un normalissimo link</strong>, stilizzato opportunamente e ri-generato ogni volta che cambiamo uno dei parametri del form.</p>
<p><strong>È quindi possibile generare da sè questo link</strong>, soprattutto se il nostro sito è composto da pagine dinamiche: PHP, ma anche Content Management System (CMS) come Drupal, Joomla, WordPress, eccetera. Sul sito dedicato agli sviluppatori c&#8217;è <a href="https://dev.twitter.com/docs/tweet-button" target="_blank">la documentazione specifica per creare i Tweet Buttons</a>, contiene la descrizione di tutti i parametri da inviare per condividere pagine su questa piattaforma. Ecco un breve riassunto con i parametri più importanti:</p>
<ul>
<li>la URL da chiamare deve essere <em>https://twitter.com/share</em>;</li>
<li>parametro <em>url</em>: è la URL della pagina da condividere. Per risparmiare spazio nel tweet è possibile accorciarla tramite uno dei molti servizi di <em>URL shortening</em>;</li>
<li>parametro <em>counturl</em>: se avete utilizzato lo URL shortening, conviene inserire in questo parametro il link esteso della pagina, in questo modo la piattaforma attribuirà correttamente i conteggi;</li>
<li>parametro <em>via</em>: è il <em>twitter name</em> a cui attribuire il tweet;</li>
<li>parametro <em>text</em>: testo del tweet;</li>
<li>parametro <em>related</em>: con questo parametro è possibile proporre all&#8217;utente alcuni account twitter da seguire (<em>follow</em>);</li>
<li>parametro <em>hashtags</em>: lista di <em>hashtag</em> correlati.</li>
</ul>
<p>Armati di questa conoscenza, è stato facile ricreare un <em>Twitter Link Builder</em> semplicemente utilizzando HTML e jQuery:</p>
<p><a href="http://www.internetpost.it/wp-content/uploads/2011/12/25_twitter_button_01.png"><img class="alignnone size-medium wp-image-1146" src="http://www.internetpost.it/wp-content/uploads/2011/12/25_twitter_button_01-276x300.png" alt="Screenshot" width="276" height="300" /></a></p>
<p>Ecco il codice sorgente della pagina:</p>
<pre>&lt;!DOCTYPE html&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;
&lt;head&gt;
  &lt;meta http-equiv="content-type" content="text/html;charset=UTF-8" /&gt;
  &lt;title&gt;Twitter Link Builder&lt;/title&gt;
  &lt;script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"&gt;&lt;/script&gt;
  &lt;script type="text/javascript"&gt;
  function reset() {
    $("#form").each(function() {
      this.reset();
    });
    $('#output').html('&lt;em&gt;clicca su "Crea link" per generare la URL del bottone&lt;/em&gt;');
  }

  function create_twitter_link() {

    link = 'https://twitter.com/share?' + $('#form').serialize();
    output = $('#output');
    output.empty();

    anchor = document.createElement('a');
    anchor.setAttribute('target', '_blank');
    anchor.setAttribute('href', link);
    anchor.appendChild(document.createTextNode(link));

    output.append(anchor);
  }

  $(document).ready(function() {

    reset();

    $("#bt_reset").click(function(e) {
      e.preventDefault();
      reset();
    });

    $("#bt_create").click(function(e) {
      e.preventDefault();
      create_twitter_link();
    });
  });
 &lt;/script&gt;
 &lt;style type="text/css"&gt;
body {
  color: #333;
  font-family:'lucida grande',verdana,helvetica,arial,sans-serif;
  font-size:90%;
}
 &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;h1&gt;Twitter Link Builder&lt;/h1&gt;

&lt;form id="form" action="https://twitter.com/share"&gt;

  &lt;label for="url"&gt;url&lt;/label&gt;&lt;br /&gt;
  &lt;input id="url" name="url" type="text" /&gt;
  &lt;span class="input_help"&gt;#&lt;/span&gt;&lt;br /&gt;

  &lt;label for="via"&gt;via&lt;/label&gt;&lt;br /&gt;
  &lt;input id="via" name="via" type="text" /&gt;
  &lt;span class="input_help"&gt;#&lt;/span&gt;&lt;br /&gt;

  &lt;label for="text"&gt;text&lt;/label&gt;&lt;br /&gt;
  &lt;input id="text" name="text" type="text" /&gt;
  &lt;span class="input_help"&gt;#&lt;/span&gt;&lt;br /&gt;

  &lt;label for="related"&gt;related&lt;/label&gt;&lt;br /&gt;
  &lt;input id="related" name="related" type="text" /&gt;
  &lt;span class="input_help"&gt;#&lt;/span&gt;&lt;br /&gt;

  &lt;label for="counturl"&gt;counturl&lt;/label&gt;&lt;br /&gt;
  &lt;input id="counturl" name="counturl" type="text" /&gt;
  &lt;span class="input_help"&gt;#&lt;/span&gt;&lt;br /&gt;

  &lt;label for="hashtags"&gt;hashtags&lt;/label&gt;&lt;br /&gt;
  &lt;input id="hashtags" name="hashtags" type="text" /&gt;
  &lt;span class="input_help"&gt;#&lt;/span&gt;&lt;br /&gt;

  &lt;button id="bt_reset"&gt;Reset&lt;/button&gt;
  &lt;button id="bt_create"&gt;Crea link&lt;/button&gt;
&lt;/form&gt;

&lt;h3&gt;Link risultante&lt;/h3&gt;
&lt;div id="output"&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;</pre>
<p>&nbsp;</p>
<h3>Links</h3>
<ul>
<li><a href="https://twitter.com/about/resources/buttons#tweet" target="_blank">tool semplificato per creare i Tweet Button</a>;</li>
<li><a href="https://dev.twitter.com/docs/tweet-button" target="_blank">documentazione Tweet Button</a> per creare il link.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.internetpost.it/2012/01/creazione-di-bottoni-twitter-personalizzati-per-condividere-pagine-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FTP disponibile su Cloud Storage HostingSolutions.it</title>
		<link>http://www.internetpost.it/2012/01/ftp-disponibile-su-cloud-storage-hostingsolutions-it/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ftp-disponibile-su-cloud-storage-hostingsolutions-it</link>
		<comments>http://www.internetpost.it/2012/01/ftp-disponibile-su-cloud-storage-hostingsolutions-it/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 11:51:32 +0000</pubDate>
		<dc:creator>HostingSolutions.it</dc:creator>
				<category><![CDATA[Cloud Storage]]></category>
		<category><![CDATA[HostingSolutions.it]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[cloud storage]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[hostingsolutions]]></category>

		<guid isPermaLink="false">http://www.internetpost.it/?p=1149</guid>
		<description><![CDATA[Iniziamo il nuovo anno con il migliore dei propositi: rendere più facile l&#8217;utilizzo di uno dei nostri servizi di punta, il Cloud Object Storage. Da oggi è possibile collegarsi al servizio direttamente tramite FTP, per facilitare così l&#8217;accesso al sistema da parte dei nostri clienti e rendere per loro più utilizzabile lo spazio disco a [...]]]></description>
			<content:encoded><![CDATA[<p>Iniziamo il nuovo anno con il migliore dei propositi: rendere più facile l&#8217;utilizzo di uno dei nostri servizi di punta, il <strong><a title="Cloud Storage HostingSolutions.it" href="http://www.hostingsolutions.it/cloud">Cloud Object Storage</a></strong>. Da oggi è possibile collegarsi al servizio direttamente tramite <strong>FTP</strong>, per facilitare così l&#8217;accesso al sistema da parte dei nostri clienti e rendere per loro più utilizzabile lo spazio disco a disposizione.</p>
<p>Il protocollo FTP è sicuramente la strada più semplice per inviare e gestire file all&#8217;interno dello spazio del Cloud Object Storage. Vediamo insieme come dovete fare per accedere al vostro spazio direttamente da FTP, questi i parametri utilizzabili:</p>
<p><strong>hostname</strong>: <em>ftp.cloudaccess.it</em></p>
<p><strong>username</strong>:  ID chiave di successo</p>
<p><strong>password</strong>: Chiave di accesso segreta</p>
<p>I dati relativi a username e password sono quelli che ricevete in fase di attivazione del servizio direttamente per email e vengono identificati come chiavi di accesso S3. Una volta impostati nel proprio client FTP questi dati è possibile collegarsi e iniziare a gestire i file anche da questo punto di accesso. FTP è un protocollo implementato in molti software gestionali, per questo può essere la soluzione ideale per utilizzare il nostro Cloud Storage anche per eseguire il backup dei dati di una o piu&#8217; applicazioni della vostra attività, o il backup dei server fisici/virtuali presenti nella vostra azienda o all&#8217;esterno di essa.</p>
<p>Il servizio di Cloud Object Storage parte da un<strong><a title="Cloud Object Storage HostingSolutions.it" href="http://www.hostingsolutions.it/cloud"> canone di soli 3 Euro al mese per 20 GB di spazio disco</a></strong>, una volta acquistato potete utilizzarlo da subito per lo storage dei vostri file. Per maggiori informazioni non esitare a scriverci a <strong>info@hostingsolutions.it</strong> o chiama direttamente il numero <strong>031-30312626</strong></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.internetpost.it/2012/01/ftp-disponibile-su-cloud-storage-hostingsolutions-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

