<?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>blogink</title>
	<atom:link href="http://www.blogink.it/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.blogink.it</link>
	<description>Il blog di Webink.it</description>
	<lastBuildDate>Tue, 06 Mar 2012 12:24:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>HowTo Solve eval base64_decode hack &#8211; Risolvere l&#8217;hacking eval base64_decode</title>
		<link>http://www.blogink.it/howto-solve-eval-base64_decode-hack-risolvere-lhacking-eval-base64_decode/</link>
		<comments>http://www.blogink.it/howto-solve-eval-base64_decode-hack-risolvere-lhacking-eval-base64_decode/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 12:00:19 +0000</pubDate>
		<dc:creator>Giovanni Manuel Toppi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[base64_decode]]></category>
		<category><![CDATA[eval]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[solve]]></category>

		<guid isPermaLink="false">http://www.blogink.it/?p=596</guid>
		<description><![CDATA[Purtroppo può capitare di essere vittima di un attacco sul proprio server che inietta codice malevolo all&#8217;interno delle proprie pagine php. Se siete stati vittima di un attacco di questa tipologia potrete creare un file .php e copiare il codice seguente.
Questo script di seguito dovrebbe risolvere il problema. La chiamata a iter(dirname(__FILE__).&#8221;/admin&#8221;); non fa altro [...]]]></description>
			<content:encoded><![CDATA[<p>Purtroppo può capitare di essere vittima di un attacco sul proprio server che inietta codice malevolo all&#8217;interno delle proprie pagine php. Se siete stati vittima di un attacco di questa tipologia potrete creare un file .php e copiare il codice seguente.</p>
<p>Questo script di seguito dovrebbe risolvere il problema. La chiamata a <em>iter(dirname(__FILE__).&#8221;/admin&#8221;); </em>non fa altro che iterare su tutte le cartelle ed i file presenti, in questo caso, nella cartella admin. Si può quindi anche iterare direttamente sulla root directory del proprio dominio web.</p>
<p>Siate comunque cauti nell&#8217;utilizzarlo sapendo che va a modificare il contenuto delle pagine con estensione php. Potrebbero essere necessarie delle modifiche rispetto al tipo di attacco che vi è stato fatto.</p>
<p>&#8212;-</p>
<p>Unfortunately it can happen to be the victim of an attack on your server that injects malicious code within php pages. If you encountered an attack of this type you can create a .php file and copy the following code.</p>
<p>This script below should solve the problem. Calling <em>iter(dirname(__FILE__).&#8221;/admin&#8221;);</em> it will iterate over all the folders and files, in this case, the admin folder. We can therefore iterate directly on the root directory of your web domain.</p>
<p>Be cautious in using it anyway knowing that it change the content of the pages with php. Maybe you need to modify the script because the type of attack can be different.</p>
<pre class="php">function rep($fileinfo){
        $fn = $fileinfo---&gt;getFilename();
	$parts = explode(".", $fn);
	$fn = $fileinfo-&gt;getPath().'/'.$fileinfo-&gt;getFilename();
	if($parts[1] == 'php'){
		$f=fopen($fn,"r");
		$contents = fread($f,filesize($fn));
		fclose($f);
		if(strpos($contents,'eval(base64_decode("aWY') !== false){
			$contents = preg_replace('%&lt;\?php /\*\*/ eval\(base64_decode\("aWY.*?\?&gt;%',"",$contents);
			$f = fopen($fn,"w");
			fwrite($f,$contents);
			fclose($f);
		}
	}
}

function iter($dir){
	$directory = $dir;
	$filenames = array();
	$iterator = new DirectoryIterator($directory);
	foreach ($iterator as $fileinfo) {
	    if ($fileinfo-&gt;isFile()) {
	    	rep($fileinfo);
	    } else if($fileinfo-&gt;isDir()){
	    	if($fileinfo-&gt;getPath().'/'.$fileinfo-&gt;getFilename() !== $directory.'/.' and
	    	   $fileinfo-&gt;getPath().'/'.$fileinfo-&gt;getFilename() !== $directory.'/..' and
			   $fileinfo-&gt;getPath().'/'.$fileinfo-&gt;getFilename() !== $directory.'.' and
			   $fileinfo-&gt;getPath().'/'.$fileinfo-&gt;getFilename() !== $directory.'..'){
	    		iter($fileinfo-&gt;getPath().'/'.$fileinfo-&gt;getFilename());
			}
	    }
	}
}

iter(dirname(__FILE__)."/admin");</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.blogink.it/howto-solve-eval-base64_decode-hack-risolvere-lhacking-eval-base64_decode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Richieste cross-domain con JSONP</title>
		<link>http://www.blogink.it/richieste-cross-domain-con-jsonp/</link>
		<comments>http://www.blogink.it/richieste-cross-domain-con-jsonp/#comments</comments>
		<pubDate>Sun, 08 May 2011 20:15:25 +0000</pubDate>
		<dc:creator>Giovanni Manuel Toppi</dc:creator>
				<category><![CDATA[Articoli generici]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[cross domain]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[jsonp]]></category>
		<category><![CDATA[xhr]]></category>

		<guid isPermaLink="false">http://www.blogink.it/?p=575</guid>
		<description><![CDATA[In questo articolo tratteremo la possibilità di effettuare richieste asincrone con javascript eliminando la limitazione che si ha utilizzando richieste AJAX con l&#8217;oggetto XMLHttpRequest (e suoi corrispondenti su Internet Expolorer) per la quale non posso effettuare richieste su domini diversi da quello in cui è ospitata la pagina web richiedente. La soluzione è chiamata JSONP [...]]]></description>
			<content:encoded><![CDATA[<p>In questo articolo tratteremo la possibilità di effettuare richieste asincrone con javascript eliminando la limitazione che si ha utilizzando richieste AJAX con l&#8217;oggetto XMLHttpRequest (e suoi corrispondenti su Internet Expolorer) per la quale non posso effettuare richieste su domini diversi da quello in cui è ospitata la pagina web richiedente. La soluzione è chiamata JSONP (JSON with Padding). Ovviamente questo sistema ha implicazioni sulla sicurezza, e quindi bisognerà essere cauti nel suo utilizzo.</p>
<p>Nel nostro esempio andremo a calcolare l&#8217;area di un cerchio, creando un servizio web che, preso un parametro <em>raggio</em>, restituirà il valore dell&#8217;area.</p>
<p>Il formato di comunicazione tra il servizio web ed il client che fa la richiesta sarà JSON.</p>
<p>Ipotizziamo di avere una pagine web simile alla seguente, dove ci sarà una div risultato nella quale apparirà il risultato dell&#8217;elaborazione. Prima della chiusura del body è presente l&#8217;inclusione del file javascript.</p>
<pre class="xhtml" name="code">
&lt;!doctype html&gt;
&lt;html lang="it"&gt;
	&lt;head&gt;
		&lt;meta charset="utf-8" /&gt;
		&lt;title&gt;Calcolo area cerchio JSONP&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;h1&gt;Calcolo area cerchio&lt;/h1&gt;
		&lt;div id="risultato"&gt;

		&lt;/div&gt;
	&lt;script src="cerchio.js"&gt;&lt;/script&gt;
	&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Il file javascript cerchio.js ha al suo interno un oggetto cerchio con due metodi: uno per effettuare la richiesta al servizio web, ed un altro (callback) che visualizzerà il risultato nella pagina web. Potete notare come, oltre a passare il parametro <em>raggio</em> al servizio web, verrà passato anche un riferimento alla funzione javascript che vogliamo eseguire una volta ricevuta la risposta. Si creerà quindi una vera e propria chiamata a questa funzione creando un inclusione di script che ha come indirizzo quello del servizio web. Lanciamo la richiesta al caricamento della pagina tramite <em>cerchio.creaRichiesta();</em>. </p>
<pre name="code" class="javascript">

var cerchio = {
	visualizzaRisultato: function(data) {
		var contenitoreRisultato = document.getElementById("risultato");
		contenitoreRisultato.innerHTML = data.area;
	},

	creaRichiesta: function() {
		var script = document.createElement("script");
		script.src = "http://www.dominiodelservizio.com/area_cerchio.php?callback=cerchio.visualizzaRisultato&#038;raggio=5";
		document.body.appendChild(script);
	}
}

window.onload = function(){
	cerchio.creaRichiesta();
}
</pre>
<p>Una possibile implementazione lato server del servizio web sarà la seguente:</p>
<pre name="code" class="php">
$raggio = isset($_GET['raggio']) ? $_GET['raggio'] : 1;
$area = $raggio * $raggio * pi();
echo $_GET['callback'].'({"area" : "'.$area.'"})';
</pre>
<p>in questo modo un esempio di risposta del server sarà: <em>cerchio.visualizzaRisultato({&#8221;area&#8221; : &#8220;78,539816339745&#8243;});</em></p>
<p>A patto di creare sistemi sicuri lato server, JSONP è un ottimo metodo per creare richieste dai nostri javascript. Ha anche lati negativi, come la limitazione nell&#8217;utilizzo del formato JSON ed il fatto che per i nostri script sarà difficile intercettare errori 404. Nei casi in cui i nostri servizi sono tutti residenti sullo stesso dominio, il metodo &quot;classico&quot; per creare richieste AJAX rimane quello preferibile.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogink.it/richieste-cross-domain-con-jsonp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Canonical tag: evitare i contenuti duplicati</title>
		<link>http://www.blogink.it/canonical-tag-evitare-i-contenuti-duplicati/</link>
		<comments>http://www.blogink.it/canonical-tag-evitare-i-contenuti-duplicati/#comments</comments>
		<pubDate>Sat, 06 Nov 2010 00:56:44 +0000</pubDate>
		<dc:creator>lndfrg</dc:creator>
				<category><![CDATA[Articoli generici]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[canonical tag]]></category>
		<category><![CDATA[redirect 301]]></category>
		<category><![CDATA[rel canonical]]></category>
		<category><![CDATA[tag url canonical]]></category>

		<guid isPermaLink="false">http://www.blogink.it/?p=558</guid>
		<description><![CDATA[Vedremo in questo articolo analizzeremo il canonical tag dandone descrizione e modalità di utilizzo.
Che cos&#8217;è il canonical tag?
Il canonical tag è un meta tag che troviamo nell&#8217;intestazione html di una pagina web. Ha la funzione di indicare ad i motori di ricerca qual è la versione canonica dell&#8217;URL della pagina in corso di visualizzazione. Il suo [...]]]></description>
			<content:encoded><![CDATA[<p>Vedremo in questo articolo analizzeremo il canonical tag dandone descrizione e modalità di utilizzo.</p>
<h2>Che cos&#8217;è il canonical tag?</h2>
<p>Il canonical tag è un meta tag che troviamo nell&#8217;intestazione html di una pagina web. Ha la funzione di indicare ad i motori di ricerca qual è la versione canonica dell&#8217;URL della pagina in corso di visualizzazione. Il suo scopo è quindi di impedire ad i motori di indicizzare le pagine con contenuto duplicato. Sul web si può trovare indicato anche con il nome &#8216;rel canonical&#8217;, &#8216;rel = canonical&#8217;, &#8216;tag URL canonical&#8217; &#8216;tag rel canonical&#8217; &#8216;tag canonical&#8217;</p>
<h2>Come viene utilizzato il canonical tag?</h2>
<p>Il canonical tag è una nuova soluzione introdotta da Google, Live e Yahoo che fornisce uno strumento (non è l&#8217;unico) per risolvere in maniera “rapida” il problema dei contenuti duplicati.<br />
Sono molti gli esempi di pagine web che generano gli stessi o simili contenuti da diversi URL; in questo senso il  canonical tag può essere utilizzato per scegliere ed indicare al motore la <em>versione master</em> da utilizzare.<br />
Vediamo un elenco di URL che indirizzano alla stessa pagina web e che di conseguenza sarebbero interpretati come contenuti duplicati dai motori di ricerca.</p>
<p>http://www.nomedominio.it/prodotto.php?oggetto=nome-oggetto<br />
http://www.nomedominio.it/prodotto.php?oggetto=nome-oggetto&amp;categoria=nome-categoria<br />
http://www.nomedominio.it/prodotto.php?oggetto=nome-oggetto&amp;id=0123&amp;sessionid=567</p>
<p>Dunque inseriamo in TUTTE le pagine di cui sopra,  l&#8217;indirizzo che vogliamo rendere  principale, ad esempio http://www.nomedominio.it/prodotto.php?oggetto=nome-oggetto</p>
<p>&lt;!&#8211; ESEMPIO UTILIZZO CANONICAL TAG &#8211;&gt;</p>
<p>&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=iso-8859-1&#8243; /&gt;<br />
&lt;title&gt;Titolo pagina web&lt;/title&gt;<br />
&lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; media=&#8221;all&#8221;&gt;fogliostile.css&#8221; /&gt;<br />
<strong> &lt;link rel=&#8221;canonical&#8221; href=&#8221;<a href="http://www.nomedominio.it/prodotto.php">http://www.nomedominio.it/prodotto.php?oggetto=nome-oggetto</a>&#8220;/&gt;</strong><br />
&lt;/head&gt;</p>
<h2>Tag canonical e redirect 301</h2>
<p>L&#8217;attributo Canonical tag è simile ad un reindirizzamento 301. Inserendo il nostro canonical tag stiamo dicendo infatti ad i motori che più pagine devono essere considerate come una sola (e fin qui è identico al 301) ma senza in realtà reindirizzare i visitatori verso il nuovo URL.</p>
<p>La differenza principale sta quindi nel fatto che un reindirizzamento 301 redirige tutto il traffico (sia bot che i visitatori umani) mentre il canonical tag è solo per i motori. Inoltre con una redirect 301 è possibile effettuare reindirizzamenti <em>cross-domain</em>, ossia è possibile reindirizzare una pagina da www.dominio1.com a www.dominio2.com. Questo utilizzo è invece precluso al canonical tag che opera esclusivamente su un dominio singolo.</p>
<h2>Approfondimenti</h2>
<ul>
<li><a title="seomoz - canonical url tag" rel="nofollow" href="http://www.seomoz.org/blog/canonical-url-tag-the-most-important-advancement-in-seo-practices-since-sitemaps " target="_blank">Canonical URL Tag – The Most Important Advancement in SEO Practices Since Sitemaps, Rand Fishkin</a></li>
<li><a title="seomoz - canonical url tag" rel="nofollow" href="http://www.seomoz.org/blog/canonical-url-tag-the-most-important-advancement-in-seo-practices-since-sitemaps " target="_blank"></a><a title="Google Webmaster Central Blog - Canonical tag" href="http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html" target="_blank">Specify Your Canonical, Webmaster Central Blog</a></li>
<li><a title="Google Webmaster Central Blog - Canonical tag" rel="nofollow" href="http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html" target="_blank"></a><a title="VIdeo Matt Cutts" href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;answer=139394 " target="_blank">About rel=”canonical”, Matt Cutts [video]</a></li>
<li><a title="VIdeo Matt Cutts" rel="nofollow" href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;answer=139394 " target="_blank"></a><a title="google, yahoo e microsof annunciano il canonical tag" href="http://searchengineland.com/canonical-tag-16537" target="_blank">Google, Yahoo &amp; Microsoft Unite On “Canonical Tag” To Reduce Duplicate Content Clutter, Vanessa Fox</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.blogink.it/canonical-tag-evitare-i-contenuti-duplicati/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Escludere un indirizzo ip statico dalle statistiche di Google Analitics</title>
		<link>http://www.blogink.it/escludere-un-indirizzo-ip-statico-dalle-statistiche-di-google-analitics/</link>
		<comments>http://www.blogink.it/escludere-un-indirizzo-ip-statico-dalle-statistiche-di-google-analitics/#comments</comments>
		<pubDate>Thu, 28 Oct 2010 20:47:54 +0000</pubDate>
		<dc:creator>lndfrg</dc:creator>
				<category><![CDATA[Articoli generici]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[filtro analitics]]></category>
		<category><![CDATA[gestore filtri analitics]]></category>
		<category><![CDATA[google analitics filtri]]></category>

		<guid isPermaLink="false">http://www.blogink.it/?p=527</guid>
		<description><![CDATA[Come procedere per escludere un indirizzo ip statico dalle statistiche di Google Analitics]]></description>
			<content:encoded><![CDATA[<p>Un ottimo modo per &#8220;pulire&#8221; le statistiche di Google Analitics ed avere quindi della statistiche più affidabili è quello di escludere le visite dal proprio indirizzo IP statico. Per fare questo è necessario <strong>impostare un filtro</strong>.</p>
<p>Nella schermata inziale di Analitics, in basso sulla destra, troviamo il link <strong>&#8220;Gestione filtri&#8221;</strong>. Creiamo ora il nostro filtro ex-novo selezionando  &#8221;<strong>Aggiungi filtro</strong>&#8220;.</p>
<ul>
<li><strong>Nome filtro</strong>: assegnare un nome chiaro e facilmente comprensibile. Questo perché il filtro creato potrà essere utilizzato su più siti web. In sostanza se creiamo un filtro per escludere l&#8217;ip statico ad esempio di un&#8217;azienda, potremmo chiamarlo &#8220;Escludi Ip Nome Azienda&#8221;. Se in futuro volessimo escludere questo stesso  ip da altri siti del nostro Google account, non dovremmo far altro che selezionare &#8220;Escludi Ip Nome Azienda&#8221; fra i filtri memorizzati.</li>
<li><strong>Tipo filtro</strong>: lasciare selezionato &#8220;filtro predefinito&#8221;. Dunque dalla prima select selezionare &#8220;Escludi&#8221;, dalla seconda &#8220;traffico dagli indirizzi IP&#8221; ed infine nella terza select selezionare l&#8217;opzione che si presta meglio alle nostre esigenze. Se conosciamo perfettamente il nostro indirizzo IP selezioneremo quindi &#8220;uguali a&#8221; . Inserire quindi l&#8217;ip nel campo preposto. ( se non lo conoscete <a rel="nofollow" title="my-ip" href="http://www.whatismyip.com/" target="_blank">lo trovate qui</a> )</li>
<li><strong>Applica filtro ai profili dei siti web</strong>: selezionare il sito web su cui vogliamo applicare il filtro ed aggiungerlo.</li>
</ul>
<p><img class="size-full wp-image-540 alignnone" title="escludere-un indirizzo-ip-statico-dalle-statistiche-di-Google-Analitics" src="http://www.blogink.it/wp-content/uploads/2010/10/escludere-un-indirizzo-ip-statico-dalle-statistiche-di-Google-Analitics.png" alt="escludere-un indirizzo-ip-statico-dalle-statistiche-di-Google-Analitics" width="526" height="396" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogink.it/escludere-un-indirizzo-ip-statico-dalle-statistiche-di-google-analitics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.htaccess: redirect page 301</title>
		<link>http://www.blogink.it/htaccess-redirect-page-301/</link>
		<comments>http://www.blogink.it/htaccess-redirect-page-301/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 14:55:38 +0000</pubDate>
		<dc:creator>ed_r4d1cal</dc:creator>
				<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[.htaccess 301 redirect]]></category>
		<category><![CDATA[.htaccess redirect]]></category>

		<guid isPermaLink="false">http://www.blogink.it/?p=508</guid>
		<description><![CDATA[In questo breve articolo vedremo un&#8217;altra interessante direttiva di Apache specificabile nel nostro file .htaccess.
Con la Redirect 301 abbiamo la possibilità di redirigere un qualsiasi URL verso un nuovo URL.
redirect 301 /old/old.html http://mysite/new.html

Aggiungendo questa riga di codice al nostro file .htaccess se dal browser tentiamo di andare alla pagina http://mysite/old/old.html verremo rediretti alla pagina http://mysite/new.html.
Si [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">In questo breve articolo vedremo un&#8217;altra interessante direttiva di Apache specificabile nel nostro file <a href="http://www.blogink.it/apache-i-file-htaccess/">.htaccess</a>.<br />
Con la Redirect 301 abbiamo la possibilità di redirigere un qualsiasi URL verso un nuovo URL.</p>
<pre><span style="font-size: x-small;">redirect 301 /old/old.html http://mysite/new.html
</span></pre>
<p style="text-align: justify;">Aggiungendo questa riga di codice al nostro file .htaccess se dal browser tentiamo di andare alla pagina http://mysite/old/old.html verremo rediretti alla pagina http://mysite/new.html.</p>
<p style="text-align: justify;">Si noti che il comportamento di Apache a questa direttiva in pratica è quello di fare una sorta di &#8220;replace&#8221; del nuovo valore (new.html) sul vecchio (old/old.html). Infatti se spegifichiamo una direttiva di questo tipo:</p>
<pre><span style="font-size: x-small;">redirect 301 /old/ http://mysite/new/
</span></pre>
<p style="text-align: justify;">avremo come effetto quello che tutti gli URL di pagine contenute in old/ (es. old/page1.html, old/page2.html, &#8230;) verranno rediretti ad un corrispondente nella cartella new (new/page1.html, new/page2.html, &#8230;&#8230;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogink.it/htaccess-redirect-page-301/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.htaccess: disabilita directory listing</title>
		<link>http://www.blogink.it/htaccess-disabilita-directory-listing/</link>
		<comments>http://www.blogink.it/htaccess-disabilita-directory-listing/#comments</comments>
		<pubDate>Wed, 13 Oct 2010 14:26:32 +0000</pubDate>
		<dc:creator>ed_r4d1cal</dc:creator>
				<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[directory listing]]></category>
		<category><![CDATA[disabilitare directory listing]]></category>

		<guid isPermaLink="false">http://www.blogink.it/?p=483</guid>
		<description><![CDATA[In un precedente articolo abbiamo visto cosa sono i files .htaccess e come impostare il nostro server Apache al loro uso, mentre in questo vedremo uno degli usi più utili e comuni che si fa dei files in questione.
Spesso quando si sviluppa un sito web si creano diverse directory per contenere files che le pagine [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">In un precedente <a title=".htaccess" href="http://www.blogink.it/apache-i-file-htaccess/">articolo</a> abbiamo visto cosa sono i files .htaccess e come impostare il nostro server Apache al loro uso, mentre in questo vedremo uno degli usi più utili e comuni che si fa dei files in questione.<br />
Spesso quando si sviluppa un sito web si creano diverse directory per contenere files che le pagine html utilizzano come le immagini, i files css, i files di javascript ecc. Supponiamo ad esempio che nella nostra applicazione abbiamo creato una directory images che contiene le immagini del sito. Se proviamo dal browser ad accedere all&#8217;indirizzo di tale cartella avremo un output simile al seguente.</p>
<div id="attachment_492" class="wp-caption aligncenter" style="width: 450px"><img class="size-full wp-image-492" title="directory listing" src="http://www.blogink.it/wp-content/uploads/2010/10/directory-listing.png" alt="directory listing" width="440" height="314" /><p class="wp-caption-text">directory listing</p></div>
<p style="text-align: justify;">Ciò avviene essenzialmente per il fatto che sovente tali cartelle non contengono un file index.html.<br />
Spesso si ha l&#8217;esigenza, anche per questioni di sicurezza, di disabilitare tale comportamento e per farlo basta specificare una semplice direttiva nel file .htaccess.</p>
<pre><code>Options -Indexes
</code></pre>
<p style="text-align: justify;">Il risultato dell&#8217;uso di tale direttiva è che accedendo all&#8217;URL adesso si riceve un messaggio di errore 403.</p>
<div id="attachment_493" class="wp-caption aligncenter" style="width: 450px"><img class="size-full wp-image-493" title="403 error directory listing" src="http://www.blogink.it/wp-content/uploads/2010/10/403-dir-listing.png" alt="403 error directory listing" width="440" height="313" /><p class="wp-caption-text">403 error directory listing</p></div>
<pre><code>
</code></pre>
<pre><code>
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.blogink.it/htaccess-disabilita-directory-listing/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Apache: i file .htaccess</title>
		<link>http://www.blogink.it/apache-i-file-htaccess/</link>
		<comments>http://www.blogink.it/apache-i-file-htaccess/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 17:23:43 +0000</pubDate>
		<dc:creator>ed_r4d1cal</dc:creator>
				<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[abilita .htaccess]]></category>
		<category><![CDATA[Apache]]></category>

		<guid isPermaLink="false">http://www.blogink.it/?p=489</guid>
		<description><![CDATA[1. I file htaccess.
I file .htaccess sono dei file che contengono &#8220;direttive&#8221; di Apache. In quanto tali con essi è possibile specificare svariati comportamenti ed impostazioni del web server. Ad esempio li si può usare per proteggere directory con user e pass, limitare l&#8217;accesso a determinati files e cartelle, riscrivere gli URL e cambiare alcune [...]]]></description>
			<content:encoded><![CDATA[<h2>1. I file htaccess.</h2>
<p style="text-align: justify;">I file .htaccess sono dei file che contengono &#8220;direttive&#8221; di Apache. In quanto tali con essi è possibile specificare svariati comportamenti ed impostazioni del web server. Ad esempio li si può usare per proteggere directory con user e pass, limitare l&#8217;accesso a determinati files e cartelle, riscrivere gli URL e cambiare alcune variabili di configurazione del PHP.</p>
<h2>2. Funzionamento</h2>
<p style="text-align: justify;">Apache quando riceve una richiesta, prima di eseguirla, verifica se  esiste un file .htaccess nella cartella del file richiesto o in una  cartella precedente. In tal caso lo interpreta a run-time e si  configura in modo coerente alle direttive presenti all&#8217;interno del file. Dato che apache ricarica il file ad ogni richiesta non è necessario riavviarlo in caso di modifiche del file .htaccess.</p>
<h2>3. Problematiche</h2>
<p style="text-align: justify;">Se il vostro server non funziona correttamente con i files .htaccess la causa potrebbe risiedere nella sua configurazione.  A tal proposito ricordiamo che affinché il vostro web server Apache funzioni correttamente con i files .htaccess è necessario che nel file di configurazione di Apache la direttiva <em>AllowOverride</em> si impostata su ALL<em>.</em></p>
<p><em><br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogink.it/apache-i-file-htaccess/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guida introduttiva di Google all&#8217;ottimizzazione per motori di ricerca</title>
		<link>http://www.blogink.it/guida-introduttiva-google-ottimizzazione-motori-ricerca/</link>
		<comments>http://www.blogink.it/guida-introduttiva-google-ottimizzazione-motori-ricerca/#comments</comments>
		<pubDate>Sat, 02 Oct 2010 00:12:21 +0000</pubDate>
		<dc:creator>lndfrg</dc:creator>
				<category><![CDATA[Articoli generici]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google SEO Starter Guide]]></category>

		<guid isPermaLink="false">http://www.blogink.it/?p=468</guid>
		<description><![CDATA[Versione italiana della Guida introduttiva di Google all'ottimizzazione per motori di ricerca]]></description>
			<content:encoded><![CDATA[<p><span>Circa due anni fa Google pubblicò il  primo SEO Starter Guide in inglese. Da pochi giorni lo troviamo tradotto in  40 lingue fra cui l&#8217;italiano. </span></p>
<p><span><a href="http://static.googleusercontent.com/external_content/untrusted_dlcp/www.google.com/en//intl/it/webmasters/docs/search-engine-optimization-starter-guide-it.pdf">Guida introduttiva di Google all&#8217;ottimizzazione per motori di ricerca (SEO)</a></span></p>
<p>Per coloro che già conoscevano la versione in inglese, segnalo che ne è disponibile una nuova ed aggiornata  rispetto alla precedente. Le novità predominanti sono la presenza di un <span>glossario di termini, l&#8217;utilizzo di ulteriori immagini di</span><span> esempio e le linee base sui modi per </span><span>ottimizzare il sito per dispositivi mobili (probabilmente l&#8217;integrazione più interessante e degna di nota rispetto alla prima guida)</span></p>
<p><span><a href="http://static.googleusercontent.com/external_content/untrusted_dlcp/www.google.com/en//webmasters/docs/search-engine-optimization-starter-guide.pdf">Search Engine Optimization Starter Guide NUOVA VERSIONE IN INGLESE</a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogink.it/guida-introduttiva-google-ottimizzazione-motori-ricerca/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Riconoscimento browser smartphone con javascript</title>
		<link>http://www.blogink.it/riconoscimento-browser-smartphone-con-javascript/</link>
		<comments>http://www.blogink.it/riconoscimento-browser-smartphone-con-javascript/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 11:06:56 +0000</pubDate>
		<dc:creator>Giovanni Manuel Toppi</dc:creator>
				<category><![CDATA[Articoli generici]]></category>
		<category><![CDATA[Funzioni]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[blackberry]]></category>
		<category><![CDATA[classe javascript]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[ipod]]></category>
		<category><![CDATA[Riconoscimento browser]]></category>
		<category><![CDATA[symbian]]></category>
		<category><![CDATA[windows ce]]></category>

		<guid isPermaLink="false">http://www.blogink.it/?p=437</guid>
		<description><![CDATA[In questo breve articolo spiegheremo come sviluppare una semplice classe javascript per il riconoscimento del browser di uno smartphone.
Partiamo con la base, ovvero su come avere informazioni sul browser. Questo può essere facilmente realizzato tramite la chiamata a navigator.userAgent che, nel caso del&#8217;iPhone, restituirà una stringa simile alla seguente:
HTTP_USER_AGENT=Mozilla/5.0 (iPhone; U; CPU like Mac OS [...]]]></description>
			<content:encoded><![CDATA[<p>In questo breve articolo spiegheremo come sviluppare una semplice classe javascript per il riconoscimento del browser di uno smartphone.<br />
Partiamo con la base, ovvero su come avere informazioni sul browser. Questo può essere facilmente realizzato tramite la chiamata a <em>navigator.userAgent</em> che, nel caso del&#8217;iPhone, restituirà una stringa simile alla seguente:</p>
<p style="text-align: center;"><span style="color: #993300;">HTTP_USER_AGENT=Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1C25 Safari/419.3</span></p>
<p>Per ogni dispositivo dovrò quindi avere un&#8217;istuzione condizionale che mi permetta di capire qual&#8217;è il browser utilizzato in quel momento. Nella nostra classe andremo a distinguere tra i dispositivi mobili più comuni: iphone, ipod, symbian S60, symbian, webkit, android, windows cs, blackberry e palm.</p>
<p>Per riconoscere ad esempio un iPhone, non dovrò far altro che scrivere</p>
<pre name="code" class="javascript">var uagent = navigator.userAgent.toLowerCase();
if (uagent.search("iphone") &gt; -1)
	alert("Siamo su iPhone");
else
	alert("Non siamo su iPhone");</pre>
<p>E allora, riportando tutto in una classe avrò:</p>
<pre name="code" class="javascript">var SmartphoneDetector = {
	deviceIphone : "iphone",
	deviceIpod : "ipod",
	deviceS60 : "series60",
	deviceSymbian : "symbian",
	engineWebKit : "webkit",
	deviceAndroid : "android",
	deviceWinMob : "windows ce",
	deviceBB : "blackberry",
	devicePalm : "palm",
	uagent : navigator.userAgent.toLowerCase(),

	// function list
	detectIPhone : function(){
		if (this.uagent.search(this.deviceIphone) &gt; -1)
			return true;
		else
			return false;
	},
	detectIPod : function(){
		if (this.uagent.search(this.deviceIpod) &gt; -1)
			return true;
		else
			return false;
	},
	detectIphoneOrIpod : function(){
		if (this.detectIphone())
			return true;
		else if (this.detectIpod())
			return true;
		else
			return false;
	},
	detectS60OssBrowser : function(){
		if (this.uagent.search(this.engineWebKit) &gt; -1)
		{
			if ((this.uagent.search(this.deviceS60) &gt; -1 ||
					this.uagent.search(this.deviceSymbian) &gt; -1))
				return true;
			else
				return false;
		}
		else
			return false;
	},
	detectAndroid : function(){
		if (this.uagent.search(this.deviceAndroid) &gt; -1)
			return true;
		else
			return false;
	},
	detectWebkit : function(){
		if (uagent.search(engineWebKit) &gt; -1)
			return true;
		else
			return false;
	},
	detectAndroidWebKit : function(){
		if (this.detectAndroid())
		{
			if (this.detectWebkit())
				return true;
			else
				return false;
		}
		else
			return false;
	},
	detectWindowsMobile : function(){
		if (this.uagent.search(this.deviceWinMob) &gt; -1)
			return true;
		else
			return false;
	},
	detectBlackBerry : function(){
		if (this.uagent.search(this.deviceBB) &gt; -1)
			return true;
		else
			return false;
	},
	detectPalm : function(){
		if (this.uagent.search(this.devicePalm) &gt; -1)
			return true;
		else
			return false;
	}
}</pre>
<p>Una volta salvato il file ed incluso nella nostra pagina, potrò utilizzare la classe in questo modo:</p>
<pre name="code" class="javascript">if(SmartphoneDetector.detectIPhone()){
	alert("Siamo su iPhone");
}
if(SmartphoneDetector.detectAndroid()){
	alert("Siamo su Android");
}
if(SmartphoneDetector.detectWindowsMobile()){
	alert("Siamo su Windows Mobile");
}</pre>
<p>Potete scaricare direttamente la classe <a title="Classe javascript riconoscimento browser smartphone" href="http://www.blogink.it/materiale/SmartphoneDetector.js">SmartphoneDetector.js</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogink.it/riconoscimento-browser-smartphone-con-javascript/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>gRaphaël &#8211; Creazione di grafici</title>
		<link>http://www.blogink.it/graphael-creazione-di-grafici/</link>
		<comments>http://www.blogink.it/graphael-creazione-di-grafici/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 09:10:03 +0000</pubDate>
		<dc:creator>Giovanni Manuel Toppi</dc:creator>
				<category><![CDATA[Articoli generici]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.blogink.it/?p=418</guid>
		<description><![CDATA[In questo articolo introduciamo le librerie gRaphaël, un set di utiity per la creazione di grafici sulle proprie pagine web che ha come base la libreria RaphaëlJS già introdotta in questo blog.
L&#8217;utilizzo di gRaphaël ci consentirà la creazione di vari tipi di grafici in maniera molto semplice. Useremo per ora soltanto due tipologie di grafici: [...]]]></description>
			<content:encoded><![CDATA[<p>In questo articolo introduciamo le librerie <strong>gRaphaël</strong>, un set di utiity per la creazione di grafici sulle proprie pagine web che ha come base la libreria RaphaëlJS già introdotta in questo blog.<br />
L&#8217;utilizzo di gRaphaël ci consentirà la creazione di vari tipi di grafici in maniera molto semplice. Useremo per ora soltanto due tipologie di grafici: grafico a barre e grafico a torta. Innanzitutto prepariamoci a scrivere il codice scaricando la libreria di base RaphaëlJS dal sito <a title="Download RaphaelJS" href="http://raphaeljs.com/">http://raphaeljs.com/</a>. Poi andiamo sul sito <a title="Download gRaphael" href="http://g.raphaeljs.com/">http://g.raphaeljs.com/</a> e scarichiamo il file <strong>g.raphael.js</strong>. Questi due file saranno la base per la costruzione dei grafici, infatti basterà poi scegliere il tipo di grafico di cui avremo necessità, e scaricarne il relativo file javascript. Nel nostro esempio avremo bisogno di un grafico a barre e di un grafico a torta. Scaricheremo allora i file <strong>g.bar.js</strong> e <strong>g.pie.js</strong>.</p>
<p>Siamo ora pronti a visualizzare il codice del nostro esempio</p>
<pre class="xhtml" name="code">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
&lt;title&gt;GRaphael&lt;/title&gt;
&lt;style type="text/css"&gt;
	#bar-canvas{
		width:500px;
		height:300px;
		margin: 0 auto;
	}
	#pie-canvas{
		width:500px;
		height:300px;
		margin: 0 auto;
	}
&lt;/style&gt;
&lt;script type="text/javascript" src="js/raphael-min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="js/g.raphael-min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="js/g.bar-min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="js/g.pie-min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
	var sorgenteDati = [150, 200, 90, 180, 40];
	window.onload = function(){
		var barCanvas = new Raphael("bar-canvas", 500, 300);
		barCanvas.g.barchart(0, 0, 500, 300, sorgenteDati, {type: "soft"});

		var pieCanvas = new Raphael("pie-canvas", 500, 300);
		pieCanvas.g.piechart(250, 150, 100, sorgenteDati);
	}

&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="bar-canvas"&gt;&lt;/div&gt;
&lt;div id="pie-canvas"&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Abbiamo innazitutto incluso nell&#8217;ordine la libreria di base raphael-min.js e la libreria di base per i grafici g.raphael-min.js. Successivamente sono stati inclusi g.bar-min.js e g.pie-min.js in quanto andremo a creare due tipologie di grafico. Come valori (variabile sorgenteDati) per i grafici abbiamo utilizzato quelli di un <a title="Creazione  grafico a barre con RaphaelJS" href="http://www.blogink.it/?p=299">precedente articolo</a> nel quale avevamo creato un grafico a barre con il solo utilizzo delle RaphaëlJS. Confrontando il codice dei due articoli si vedrà come l&#8217;utilizzo delle gRaphaël semplifichi di molto il nostro lavoro. L&#8217;uilizzo è molto semplice: come sempre andremo a creare una div per ogni canvas che vorremo creare, assegnadogli un id. Nel codice javascript inizializzeremo i due riquadri tramite <em>var barCanvas = new Raphael(&#8221;bar-canvas&#8221;, 500, 300);</em> e <em>var pieCanvas = new Raphael(&#8221;pie-canvas&#8221;, 500, 300);</em>. Al primo riquadro assegneremo un grafico a barre tremite <em>barCanvas.g.barchart(0, 0, 500, 300, sorgenteDati, 0, {type: &#8220;soft&#8221;});</em> che ci dice di creare un grafico a barre che parta dalla coordinata 0,0 ed abbia dimensioni 500&#215;300, che utilizzi come dati l&#8217;array sorgenteDati, ed abbia la caratteristica grafica <em>soft</em> (è possibile utilizzare anche <em>round</em> e <em>sharp</em>, che creeranno angoli più o meno arrotondati). Al secondo riquadro assegneremo un grafico a torta tramite  <em>pieCanvas.g.piechart(250, 150, 100, sorgenteDati);</em> che crea una torta con centro nelle coordinate 250,150 e raggio 100, e che ha come dati quelli provenienti dall&#8217;array sorgenteDati.</p>
<p>Il risultato sarà il seguente</p>
<p style="text-align: center;">
<div id="attachment_423" class="wp-caption aligncenter" style="width: 488px"><img class="size-full wp-image-423 " title="graphel_base" src="http://www.blogink.it/wp-content/uploads/2010/07/graphel_base.jpg" alt="Esempio utilizzo gRaphael" width="478" height="558" /><p class="wp-caption-text">Esempio di utilizzo delle librerie gRaphael</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.blogink.it/graphael-creazione-di-grafici/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

