<?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>Il blog di webEngine &#187; PHP</title>
	<atom:link href="http://blog.webeng.it/category/sviluppo/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.webeng.it</link>
	<description>Blog dedicato alle tecnologie Web e alle notizie dal mondo della rete...</description>
	<lastBuildDate>Thu, 17 Dec 2009 13:07:15 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Configurare Apache e Php per l&#8217;invio di email</title>
		<link>http://blog.webeng.it/2009/12/17/configurare-apache-e-php-per-invio-di-email/</link>
		<comments>http://blog.webeng.it/2009/12/17/configurare-apache-e-php-per-invio-di-email/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 12:59:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Sviluppo Web]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[estensioni]]></category>
		<category><![CDATA[Link utili]]></category>

		<guid isPermaLink="false">http://blog.webeng.it/?p=1112</guid>
		<description><![CDATA[Dunque, se siete arrivati su questa pagina, state sicuramente progettando o comunque vi sarà già capitato, di imbattervi nella creazione di uno script di invio email in automatico&#8230; Inviare automaticamente email con php è possibile grazie alla funzione nativa mail descritta abbondantemente nella guida ufficiale del php e utilizzata da tutti gli script di più [...]]]></description>
			<content:encoded><![CDATA[<p>Dunque, se siete arrivati su questa pagina, state sicuramente progettando o comunque vi sarà già capitato, di imbattervi nella creazione di uno script di invio email in automatico&#8230; Inviare automaticamente email con php è possibile grazie alla funzione nativa <a href="http://php.net/manual/en/function.mail.php">mail</a> descritta abbondantemente nella guida ufficiale del php e utilizzata da tutti gli script di più alto livello presenti in rete.</p>
<p><span id="more-1112"></span>Potrebbe capitarvi che PHP non sia correttamente configurato per l&#8217;invio delle email e che quindi tutti i tentativi di eseguire il vostro script correttamente, falliscano miseramente e senza darvi troppe spiegazioni. Questo perchè PHP di default ,non effettua la configurazione del &#8220;modulo&#8221; sendmail, necessario per l&#8217;invio dell&#8217;email da PHP.</p>
<p>Eccovi una breve descrizione di come configurare il server web Apache per l&#8217;invio di email dagli script php sviluppati localmente, l&#8217;approccio di risoluzione è il medesimo sia che ci si trovi in ambienti Windows che Linux/Unix.</p>
<p>Per tutti gli utenti linux/unix effettuare una ricerca del comando sendmail:</p>
<p><span style="color: #339966;">luca@lincelnx:~$ locate /sendmail<br />
/home/luca/.ies4linux/ie6/drive_c/windows/system32/sendmail.dll<br />
/usr/lib/sendmail<br />
/usr/sbin/sendmail<br />
/usr/share/gnome-pilot/conduits/sendmail.conduit<br />
/usr/share/man/man8/sendmail.8.gz<br />
/usr/share/perl5/Mail/Mailer/sendmail.pm</span></p>
<p>Prendiamo come buoni tutti i risultati contenuti nelle cartelle dove risiedono i binari</p>
<p>/usr/sbin o usr/bin (varia da sistema a sistema)</p>
<p>Gli utenti di Microsoft Windows non devono effettuare questo passaggio in quanto l&#8217;invio di email avviene grazie alla configurazione integrata di So/Outlook e account utente.</p>
<p>Individuare il file php.ini e aprirlo per modificarne la configurazione.</p>
<p>Per gli utenti Linux/Unix individuare con una ricerca testuale il sendmail_path e settarlo correttamente e in modo esteso es:</p>
<p><span style="color: #339966;">; For Unix only.  You may supply arguments as well (default: &#8220;sendmail -t -i&#8221;).<br />
sendmail_path =</span> <span style="color: #800000;">/usr/sbin/sendmail</span></p>
<p>Per gli utenti Windows settare il proprio account locale di posta elettronica in modo che php riesca a utilizzarlo per l&#8217;invio delle email.</p>
<p><span style="color: #666699;">[mail function]<br />
; For Win32 only.<br />
SMTP = localhost<br />
smtp_port = 25</span></p>
<p><span style="color: #666699;">; For Win32 only.<br />
sendmail_from =</span><span style="color: #800000;"> luca@webeng.it</span></p>
<p>Salvare il file, riavviare Apache ed effettuare un test del vostro script di invio.</p>
<p>Spero vi sia stato utile.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.webeng.it/2009/12/17/configurare-apache-e-php-per-invio-di-email/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Box Fluido con Ombra</title>
		<link>http://blog.webeng.it/2009/11/10/box-fluido-con-ombra/</link>
		<comments>http://blog.webeng.it/2009/11/10/box-fluido-con-ombra/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 16:19:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Articoli Generici]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[box fluido]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.webeng.it/?p=1101</guid>
		<description><![CDATA[Ecco un breve esempio di una funzione PHP che ci permette di generare un box fluido in HTML con l&#8217;effetto ombreggiatura. La funzione è scritta in PHP ma il codice HTML generato è valido per qualsiasi tipo di linguaggio di programmazione. L&#8217;effetto ombra è ottenuto tramite un immagine creata con GIMP.
Le immagini che fanno da [...]]]></description>
			<content:encoded><![CDATA[<p>Ecco un breve esempio di una funzione PHP che ci permette di generare un box fluido in HTML con l&#8217;effetto ombreggiatura. La funzione è scritta in PHP ma il codice HTML generato è valido per qualsiasi tipo di linguaggio di programmazione. L&#8217;effetto ombra è ottenuto tramite un immagine creata con GIMP.</p>
<p><span id="more-1101"></span>Le immagini che fanno da angolo sinistro (superiore e inferiore) devono essere opportunamente dimensionate in modo da poter coprire una qualsiasi lunghezza (nel nostro caso fino a un massimo di 2000px) .</p>
<pre class="brush: php">

&lt;html&gt;
&lt;head&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/style.css&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php
function get_box($header, $content){
$box = &quot;&lt;div class=\&quot;box\&quot;&gt;&lt;div class=\&quot;hd\&quot;&gt;&lt;div class=\&quot;c\&quot;&gt;&lt;/div&gt;&lt;/div&gt;&quot;;
$box .= &quot;&lt;div class=\&quot;bd\&quot;&gt;&lt;div class=\&quot;c\&quot;&gt;&lt;div class=&#039;s&#039;&gt;&quot;;
$box .= &quot;&lt;!-- content area --&gt;&quot;;
$box .= &quot;&lt;h1&gt;&quot;.$header.&quot;&lt;/h1&gt;&quot;;
$box .=    &quot;&lt;hr/&gt;&quot;;
$box .= $content;
$box .= &quot;&lt;!-- content area --&gt;&quot;;
$box .= &quot;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&quot;;
$box .= &quot;&lt;div class=\&quot;ft\&quot;&gt;&lt;div class=\&quot;c\&quot;&gt;&lt;/div&gt;&lt;/div&gt;&quot;;
$box .= &quot;&lt;/div&gt;&quot;;
return $box;
}
?&gt;

&lt;?php
echo get_box(&quot;Questo &amp;amp;amp;amp;amp;egrave; un box fluido&quot;, &quot;Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old.&quot;);
?&gt;
&lt;/body&gt;
</pre>
<p>Ora veniamo al css.</p>
<pre class="brush: css">

/* stili per le box */
.box {
width:100%;
margin:1em 0 0em 0;
min-width:5em;
color:#fff;
}

.box .hd .c,
.box .ft .c {
font-size:1px; /* ensure minimum height */
height:13px;
}

.box .ft .c {
height:14px;
}

.box .hd {
background:transparent url(../images/box_top_left.png) no-repeat 0px 0px;
}

.box .hd .c {
background:transparent url(../images/box_top_right.png) no-repeat right 0px;
}

.box .bd {
background:transparent url(../images/box_left.png) repeat-y 0px 0px;
}

.box .bd .c {
background:transparent url(../images/box_right.png) repeat-y right 0px;
}

.box .bd .c .s {
margin:0px 8px 0px 4px;
background:#8193a7 repeat-x 0px 0px;
padding:1em;
}

.box .ft {
background:transparent url(../images/box_bottom_left.png) no-repeat 0px 0px;
}

.box .ft .c {
background:transparent url(../images/box_bottom_right.png) no-repeat right 0px;
}

/* content-specific */
.box h1 {
/* header */
font-size:1em;
margin:0px;
padding:0px;
margin-top:-1.0em;
}

.box p {
margin:0.5em 0px 0px 0px;
padding:0px;
font-size: 0.9em;
line-height: 1;
}

.box hr {
color: white;
}
</pre>
<p><a href="http://blog.webeng.it/wp-content/uploads/2009/11/box.rar">L&#8217;intero esempio è scaricabile da qui</a>.</p>
<p>Un grazie a Daniele.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.webeng.it/2009/11/10/box-fluido-con-ombra/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installare Apache, Php, Mysql, PhpMyAdmin per Ubuntu</title>
		<link>http://blog.webeng.it/2009/04/21/installare-apache-php-mysql-phpmyadmin-per-ubuntu/</link>
		<comments>http://blog.webeng.it/2009/04/21/installare-apache-php-mysql-phpmyadmin-per-ubuntu/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 21:55:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Articoli Generici]]></category>
		<category><![CDATA[MySql]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.webeng.it/?p=1064</guid>
		<description><![CDATA[Eccovi riassunti in questa piccola guida i pochi e semplici passi da effettuare per configurare un ambiente di sviluppo web sulla propria postazione o su un server basato su ubuntu linux. Come potete notare l&#8217;installazione risulta molto più immediata che su windows con l&#8217;unica differenza che i nostri file di configurazione saranno posizionati diversamente sul [...]]]></description>
			<content:encoded><![CDATA[<p>Eccovi riassunti in questa piccola guida i pochi e semplici passi da effettuare per configurare un ambiente di sviluppo web sulla propria postazione o su un server basato su ubuntu linux. Come potete notare l&#8217;installazione risulta molto più immediata che su windows con l&#8217;unica differenza che i nostri file di configurazione saranno posizionati diversamente sul filesystem.<br />
<span id="more-1064"></span><br />
<strong><span style="text-decoration: underline;">Installare Apache2</span></strong></p>
<p>Aprire una shell bash e digitare il comando:</p>
<p><code>sudo apt-get install apache2</code></p>
<p>A questo punto abbiamo installato il server web, per verificare che tutto funzioni correttamente apriamo Firefox e mandiamolo su http://localhost , il risultato visualizzato nel caso l&#8217;installazione sia andata a buon fine sarà questo.</p>
<p><img class="alignnone size-full wp-image-1065" title="apache-1" src="http://blog.webeng.it/wp-content/uploads/2009/04/apache-1.jpg" alt="apache-1" width="580" height="210" /></p>
<p>Per effettuare personalizzazioni varie alla nostra configurazione di Apache possiamo editare con un semplice blocco note il file apache2.conf contenuto nella directory /ect/apache2 . Le nostre applicazioni web saranno posizionate invece nella directory di default /var/www .</p>
<p>Per controllare il servizio possiamo utilizzare i comandi</p>
<ol>
<li><code>sudo /etc/init.d/apache2 restart</code> (per restartare apache ad esempio dopo il caricamento di moduli o cambiamento di file di configurazione)</li>
<li><code>sudo /etc/init.d/apache2 start</code> (per startare il servizio in caso di avvio manuale)</li>
<li><code>sudo /etc/init.d/apache2 stop</code> (per stoppare il servizio in caso di necessità)</li>
</ol>
<p><strong><span style="text-decoration: underline;">Installare PHP</span></strong></p>
<p>Aprire una shell bash e digitare il comando:</p>
<p><code>sudo apt-get install php5</code></p>
<p>A questo punto testiamo la capacità di apache di comprendere il php creando una pagina d&#8217;esempio, avendo cura prima di restartare apache in modo da poter caricare php con il comando:</p>
<p>sudo /etc/init.d/apache2 restart</p>
<ol>
<li>Creare una directory con il comando <code>sudo mkdir /var/www/phpinfo</code></li>
<li>Creare una nuova pagina con il comando <code>sudo gedit /var/www/phpinfo/phpinfo.php</code></li>
<li>Incollare il testo &lt;?php phpinfo(); ?&gt; e salvare</li>
<li>Recarsi su http://localhost/phpinfo/phpinfo.php e verificare la stampa a video dei paramentri di php.</li>
</ol>
<p><span style="text-decoration: underline;"><strong>Installare MySql Server</strong></span></p>
<p>Aprire una shell bash e digitare il comando:</p>
<p><code>sudo apt-get install mysql-server-5.0</code></p>
<p>Per controllare il servizio possiamo utilizzare i comandi</p>
<ol>
<li><code>sudo /etc/init.d/mysql restart</code> (per restartare apache ad esempio dopo il caricamento di moduli o cambiamento di file di configurazione)</li>
<li><code>sudo /etc/init.d/mysql start</code> (per startare il servizio in caso di avvio manuale)</li>
<li><code>sudo /etc/init.d/mysql stop</code> (per stoppare il servizio in caso di necessità)</li>
</ol>
<p><strong><span style="text-decoration: underline;">Installare PhpMyAdmin, MySql Query Browser, MySql Administrator</span></strong></p>
<p><code>sudo apt-get install phpmyadmin</code></p>
<p>Al termine dell&#8217;installazione dovreste avere a disposizione la vostra maschera di login su http://localhost/phpmyadmin , nel caso non fosse così aprite una shell e digitate il comando:</p>
<p><code>sudo ln -s /usr/share/phpmyadmin /var/www/phpmyadmin</code></p>
<p>questo comando crerà un link simbolico nella cartella di apache che punterà al percorso reale dell&#8217;applicazione, infatti può succedere che lo script di installazione non riesca ad effettuare automaticamente questa operazione.</p>
<p>Opzionalmente possiamo installare questi pacchetti molto noti per lo sviluppo di applicazioni lato DB con i seguenti comandi:</p>
<p><code>sudo apt-get install mysql-query-browser</code><br />
<code>sudo apt-get install mysql-admin</code><br />
<code>sudo apt-get install mysql-navigator</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.webeng.it/2009/04/21/installare-apache-php-mysql-phpmyadmin-per-ubuntu/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Guida Introduttiva a PHP 5</title>
		<link>http://blog.webeng.it/2008/12/09/guida-introduttiva-a-php-5/</link>
		<comments>http://blog.webeng.it/2008/12/09/guida-introduttiva-a-php-5/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 11:00:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Articoli Generici]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Sviluppo Web]]></category>
		<category><![CDATA[sviluppo web]]></category>

		<guid isPermaLink="false">http://blog.webeng.it/?p=115</guid>
		<description><![CDATA[Lo scopo di questa guida è quello di portare le conoscenze di un neofita del PHP, a livello professionale.
Anche chi non ha mai programmato in PHP puo&#8217; tranquillamente avvicinarsi a questo fantastico linguaggio, per la prima volta, con questa guida che illustrerà passo passo e in modo dettagliato tutte le caratteristiche di PHP 5.
Dalla struttura [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.webeng.it/wp-content/uploads/2008/12/php.jpg"><img class="alignnone size-full wp-image-350" style="float: left; margin-right: 5px;" title="php" src="http://blog.webeng.it/wp-content/uploads/2008/12/php.jpg" alt="" width="140" /></a>Lo scopo di questa guida è quello di portare le conoscenze di un neofita del PHP, a livello professionale.</p>
<p>Anche chi non ha mai programmato in PHP puo&#8217; tranquillamente avvicinarsi a questo fantastico linguaggio, per la prima volta, con questa guida che illustrerà passo passo e in modo dettagliato tutte le caratteristiche di PHP 5.</p>
<p><span id="more-115"></span>Dalla struttura del linguaggio, alle nozioni necessarie per creare delle vere e proprie applicazioni web.</p>
<p>PHP è un linguaggio Server-Side che vi permetterà di creare delle pagine dinamiche, scrivendo il vostro codice anche in mezzo alla stessa pagina HTML.</p>
<p>Server-Side significa che il vostro codice risiederà solo sul server, e che non sarà pertanto possibile accedere ai sorgenti dal lato client, come invece accade con linguaggi Client-Side come JavaScript.</p>
<p>In pratica, quando un utente apre una vostra pagina PHP, il Web Server viene interrogato e restituisce al client niente altro che una semplice pagina HTML o XHTML ecc&#8230;</p>
<p>La pagina HTML che il client visualizzerà, sarà prodotta da PHP grazie alle vostre direttive.</p>
<p>Prima di iniziare a programmare, è necessario che vi procuriate il software necessario.</p>
<p>Per testare le vostre applicazioni, AppServ andrà più che bene.<br />
E&#8217; un pacchetto autoinstallante per piattaforma Windows, che installerà e configurerò automaticamente tutti i pacchetti di cui avrete bisogno, nel vostro PC.</p>
<p>Al momento in cui scrivo è disponibile la versione <strong>AppServ 2.5.10</strong> :</p>
<ul>
<li>Apache 2.2.8</li>
<li>PHP 5.2.6</li>
<li>MySQL 5.0.51b</li>
<li>phpMyAdmin-2.10.3</li>
<li>MySQL Root Password Reset</li>
</ul>
<p>Una volta installato AppServ, aprite il vostro browser e digitate questo indirizzo per vedere se l&#8217;installazione ha avuto successo :</p>
<div class="codebox">
<pre>http://localhost/</pre>
</div>
<p>Se vi appare una pagina rosa con la scritta <strong>&#8220;The AppServ Open Project&#8221;</strong> allora è tutto ok.</p>
<p>Ora vi serve solo un editor con cui scrivere e modificare il vostro codice, e al riguardo vi segnalo l&#8217;ottimo e gratuito PSPad con cui ho realizzato questo sito, in concomitanza con Aptana.</p>
<p>Nella prossima pagina vedremo come configurare in modo ottimale PSPad, per programmare in PHP.</p>
<ul>
<li class="leaf first"><a href="http://blog.webeng.it/guida-php-configurare-pspad/">1. Guida Php &#8211; Configurare PSPad</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-applicazione-hello-world/">2. Guida Php &#8211; Hello World!</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-lessico/">3. Guida Php &#8211; Lessico</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-spazi-e-commenti/">4. Guida Php &#8211; Spazi e commenti</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-variabili/">5. Guida Php &#8211; Variabili</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-tipi-di-dato/">6. Guida Php &#8211; Tipi di dato</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-costanti/">7. Guida Php &#8211; Costanti</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-array/">8. Guida Php &#8211; Array</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-array-multidimensionali/">9. Guida Php &#8211; Array multidimensionali</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-stringhe/">10. Guida Php &#8211; Stringhe</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-operatori/">11. Guida Php &#8211; Operatori</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-strutture-di-controllo/">12. Guida Php &#8211; Strutture di controllo</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-funzioni/">13. Guida Php &#8211; Funzioni</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-librerie-e-file-esterni/">14. Guida Php &#8211; Librerie e file esterni</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-oggetti/">15. Guida Php &#8211; Oggetti</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-gli-oggetti-e-i-membri-statici/">16. Guida Php &#8211; Gli Oggetti e i Membri Statici</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-oggetti-e-costanti/">17. Guida Php &#8211; Oggetti e Costanti</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-gli-oggetti-e-lereditarieta/">18. Guida Php &#8211; Gli oggetti e l&#8217;Ereditarietà</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-gli-oggetti-e-il-polimorfismo/">19. Guida Php &#8211; Gli oggetti e il Polimorfismo</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-clonare-gli-oggetti/">20. Guida Php &#8211; Clonare gli Oggetti</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-classi-astratte/">21. Guida Php &#8211; Classi Astratte</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-interfacce/">22. Guida Php &#8211; Interfacce</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-esempio-pratico-per-luso-di-interfacce/">23. Guida Php &#8211; Esempio pratico per l&#8217;utilizzo di interfacce</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-classi-e-metodi-final/">24. Guida Php &#8211; Classi e metodi Final</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-gestione-degli-errori/">25. Guida Php &#8211; Gestione degli Errori</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-la-classe-exception/">26. Guida Php &#8211; La Classe Exception</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-gestione-avanzata-delle-eccezioni/">27. Guida Php &#8211; Gestione avanzata delle eccezioni</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-serializzare-gli-oggetti/">28. Guida Php &#8211; Serializzare gli oggetti</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-metodi-magici/">29. Guida Php &#8211; Metodi Magici</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-il-metodo-magico-__set/">30. Guida Php &#8211; Il metodo magico __set()</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-il-metodo-magico-__get/">31. Guida Php &#8211; Il metodo magico __get()</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-overload-di-__isset-e-__unset/">32. Guida Php &#8211; Overload di __isset() e __unset()</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-il-metodo-magico-__call/">33. Guida Php &#8211; Il metodo magico __call()</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-la-funzione-magica-__autoload/">34. Guida Php &#8211; La funzione magica __autoload()</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-i-metodi-magici-__sleep-__wakeup-e-__set_state/">35. Guida Php &#8211; I metodi magici __sleep() __wakeup e __set_state()</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-overload-delloperatore-di-accesso-degli-array/">36. Guida Php &#8211; Overload dell&#8217;operatore di accesso degli array</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-overload-dellinterfaccia-di-iterazione/">37. Guida Php &#8211; Overload dell&#8217;interfaccia di operazione</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-osservazioni-finali-sugli-oggetti/">38. Guida Php &#8211; Osservazioni finali sugli oggetti</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-codice-php-nelle-pagine-html/">39. Guida Php &#8211; Codice PHP nelle pagine HTML</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-inviare-dati-coi-metodi-get-e-post/">40. Guida Php &#8211; Inviare dati coi metodi GET e POST</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-i-cookie/">41. Guida Php &#8211; I Cookie</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-i-cookie/">42. Guida Php &#8211; Una classe per i cookie</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-le-sessioni/">43. Guida Php &#8211; Le Sessioni</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-gestione-avanzata-delle-sessioni/">44. Guida Php &#8211; Gestione avanzata delle sessioni</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-upload-di-file/">45. Guida Php &#8211; Upload di file</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-classi-per-lupload-di-file/">46. Guida Php &#8211; Classi per l&#8217;upload di file</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-inviare-email/">47. Guida Php &#8211; Inviare email</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-inviare-email-con-allegati/">48. Guida Php &#8211; Inviare email con allegati</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-classi-per-inviare-email/">49. Guida Php &#8211; Classi per inviare email</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-i-database/">50. Guida Php &#8211; I Database</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-sicurezza/">51. Guida Php &#8211; Sicurezza</a></li>
<li class="leaf"><a href="http://blog.webeng.it/guida-php-conclusioni/">52. Guida Php &#8211; Conclusioni</a></li>
</ul>
<p class="leaf">Articolo e intera guida tratta da : <a href="http://www.realizzazione-sito.info/guide/php_5">http://www.realizzazione-sito.info/guide/php_5</a></p>
<p class="leaf">Ringraziamo l&#8217;autore della guida (Francesco Casula) ricordando che la stessa è stata rilasciata sotto licenza <span><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.5/it/">Creative Commons Attribuzione-Non commerciale-Non opere derivate 2.5 Italia License</a>.</span></p>
<p class="leaf">Alla prossima.</p>
<p class="leaf">
]]></content:encoded>
			<wfw:commentRss>http://blog.webeng.it/2008/12/09/guida-introduttiva-a-php-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurare PHP, Apache, MySql, PhpMyAdmin su Windows</title>
		<link>http://blog.webeng.it/2007/10/30/configurare-php-apache-mysql-phpmyadmin-su-windows/</link>
		<comments>http://blog.webeng.it/2007/10/30/configurare-php-apache-mysql-phpmyadmin-su-windows/#comments</comments>
		<pubDate>Tue, 30 Oct 2007 16:06:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MySql]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[apache]]></category>

		<guid isPermaLink="false">http://blog.webeng.it/2007/10/30/configurare-php-apache-mysql-phpmyadmin-in-ambiente-windows/</guid>
		<description><![CDATA[Ecco una breve guida per la configurazione di un server web basato su Apache PHP e Mysql in ambiente Windows; al termine del tutorial sarete in grado di montare un sito web in locale dove potrete sviluppare e testare il codice PHP delle vostre applicazioni web.
Per prima cosa dotiamoci del software di cui abbiamo bisogno&#8230;

Per installare l&#8217;Apache HTTP Server andare su http://httpd.apache.org/download.cgi, [...]]]></description>
			<content:encoded><![CDATA[<p>Ecco una breve guida per la configurazione di un server web basato su Apache PHP e Mysql in ambiente Windows; al termine del tutorial sarete in grado di montare un sito web in locale dove potrete sviluppare e testare il codice PHP delle vostre applicazioni web.</p>
<p><span id="more-24"></span>Per prima cosa dotiamoci del software di cui abbiamo bisogno&#8230;</p>
<ol>
<li>Per installare l&#8217;Apache HTTP Server andare su <a href="http://httpd.apache.org/download.cgi">http://httpd.apache.org/download.cgi</a>, una volta entrati clicchiamo su &#8220;other files&#8221; ed entriamo nella directory binaries/win32, scarichiamo quindi l&#8217;installer (msi) dell&#8217;ultima versione disponibile (2.2.6) .</li>
<li>Possiamo ora scaricare l&#8217;interprete del PHP dal sito <a href="http://www.php.net/downloads.php">http://www.php.net/downloads.php</a> , avendo cura di scaricare il pacchetto zip dei binari per windows.</li>
<li> Scaricare il database mysql per windows all&#8217;indirizzo <a href="http://dev.mysql.com/downloads/">http://dev.mysql.com/downloads/</a> .</li>
<li> Scaricare il software phpMyAdmin dal sito <a href="http://www.phpmyadmin.net/">http://www.phpmyadmin.net/</a> .</li>
</ol>
<p>Per prima cosa avviare l&#8217;installer di apache, durante l&#8217;esecuzione dell&#8217;installer dopo avervi sottoposto la licenza, il programma vi chiederà se volete configurare il servizio sulla porta 80 (default) in modalità di avvio automatico oppure sulla porta 8080 in modalità di avvio manuale.</p>
<p><img src="http://blog.webeng.it/wp-content/uploads/2007/10/apache_2055-win32-x86-no_ssl-install.jpg" alt="apache install" /></p>
<p>Se sceglierete la prima opzione assicuratevi di avere la porta 80 a disposizione o a meno di modifiche nella configurazione dell httpd.conf, il vostro server web non salirà (idem per la 8080). Nel caso invece si seguisse la strada di installarlo settando la seconda opzione bisognerà aver cura di avviare il servizio manualmente.</p>
<p>Effettuare la scelta e proseguire con l&#8217;installazione, dopotutto sarete comunque in grado di configurare la porta di ascolto successivamente editando il file di configurazione httpd.conf disponibile nella directory conf di Apache.</p>
<p>A questo punto estrarre il contenuto dei binari PHP e rinominare la cartella in php. Metterla per comodità sulla root di del disco rigido, in C:\php .</p>
<p>Passiamo ora ad installare il server di database MySql, estrarre l&#8217;archivio scaricato e avviare l&#8217;installer. Al termine della procedura di installazione eseguire la configurazione immediata, proseguire scegliendo una configurazione standard e selezionando le opzioni <strong>Install As Windows Service</strong> e <strong>Include Bin Directory in Windows Path</strong>.</p>
<p><img src="http://blog.webeng.it/wp-content/uploads/2007/10/mysql-configuration-wizard.png" alt="mysql configuration" /></p>
<p>A questo punto prima di concludere l&#8217;installazione scegliere la password di root (amministratore) e terminare effettuando la scrittura del file di configurazione mysql.ini .</p>
<p>Occupiamoci ora di configurare il php, a tal fine andare nella cartella C:\PHP e creare il file di configurazione php rinominando il file php.ini-recommended (effettuare prima una copia di backup) in php.ini, possiamo ora gestire la configurazione del php editando il file php.ini .</p>
<p>Per installare PHP come modulo su Apache, e consentire al server di interpretare il codice php, aprire il file httpd.conf presente nel path di installazione di Apache sotto la directory conf e scorrere il file con un editor fino alle direttive LoadModule&#8230; Aggiungere in coda le seguenti direttive&#8230;</p>
<p>LoadModule php5_module &#8220;c:/php/php5apache2_2.dll&#8221;<br />
AddType application/x-httpd-php .php</p>
<p># configure the path to php.ini<br />
PHPIniDir &#8220;C:/php&#8221;</p>
<p>Per chiarezza nella prima direttiva si aggiunge ad apache il modulo di php, nella seconda si aggiunge il tipo di applicazione e nella terza si comunica ad apache dove trovare il file di configurazione di php.</p>
<p>Apache e PHP ora dovrebbero funzionare insieme, per effettuare una prova :</p>
<ol>
<li>creare un file chiamato phpinfo.php contenente il codice sottostante e spostarlo nella directory htdocs (document root) sotto apache
<pre class="brush: php">
&lt;?php
phpinfo();
?&gt;
</pre>
</li>
<li>avviare/riavviare apache, aprire un browser e digitare <a href="http://localhost/phpinfo.php">http://localhost/phpinfo.php</a> (nel caso avessimo configurato apache su un altra porta/ip usare <a href="http://host:porta/phpinfo.php">http://host:porta/phpinfo.php</a>)</li>
</ol>
<p>Se tutto è andato bene dovremmo visualizzare un risultato simile.</p>
<p><img src="http://blog.webeng.it/wp-content/uploads/2007/10/phpinfo.jpg" alt="phpinfo" /></p>
<p>Provvediamo ora alla configurazione delle estensioni di mysql per php; apriamo il php.ini e occupiamoci di togliere i puntievirgola iniziali dalle seguenti estensioni:</p>
<p>extension=php_mysql.dll<br />
extension=php_mysqli.dll</p>
<p>Troviamo all&#8217;interno del file la direttiva che configura il path dove php cercherà le estensioni&#8230;</p>
<p>extension_dir = &#8220;./&#8221;</p>
<p>Questo parametro indica il percorso relativo o assoluto a partire dal quale php cercherà le estensioni. Nel caso si avessero delle esigenze specifiche modificarlo opportunamente tenendo conto che se si specifica un percorso relativo php cercherà le estensioni a partire dalla stessa directory del php.ini .</p>
<p>Copiamo il file C:\php\libmysql.dll in C:\php\ext e modifichiamo l&#8217;extension_dir in questo modo:</p>
<p>extension_dir = &#8220;C:\php\ext&#8221;</p>
<p>Infine copiare il file C:\php\libmysql.dll dentro C:\windows\system32 , salviamo il php.ini e riavviamo il server.</p>
<p>A questo punto possiamo testare la connessione con il seguente script:</p>
<pre class="brush: php">&lt;?php
&lt;span style=&quot;color: #008080;&quot;&gt;// Connessione a MySQL
&lt;/span&gt;$link = mysql_connect(&#039;localhost&#039;, &#039;root&#039;, &#039;password_root_mysql&#039;) or die(&#039;Connessione fallita: &#039; . mysql_error());
echo &#039;Connesso.&#039;;
mysql_close($link);
?&gt;</pre>
<p>Salviamo il codice precedente in un file chiamato test.php e mettiamolo nella directory htdocs.</p>
<p>Aprire un browser e digitare <a href="http://localhost/phpinfo.php">http://localhost/test.php</a> (nel caso avessimo configurato apache su un altra porta/ip usare <a href="http://host:porta/phpinfo.php">http://host:porta/test.php</a>) e verificare che la connessione sia riuscita.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.webeng.it/2007/10/30/configurare-php-apache-mysql-phpmyadmin-su-windows/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Come proteggere un form html dall&#8217;invio di SPAM</title>
		<link>http://blog.webeng.it/2007/10/13/impedire-linvio-di-spam-da-un-form-html/</link>
		<comments>http://blog.webeng.it/2007/10/13/impedire-linvio-di-spam-da-un-form-html/#comments</comments>
		<pubDate>Sat, 13 Oct 2007 13:29:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Sicurezza]]></category>
		<category><![CDATA[Sviluppo Web]]></category>

		<guid isPermaLink="false">http://blog.webeng.it/2007/10/13/impedire-linvio-di-spam-da-un-form-html/</guid>
		<description><![CDATA[In questo articolo proveremo ad illustrarvi come proteggere un form HTML dall&#8217;invio di SPAM mediante la tecnica del CAPTCHA. I form html non gestiti in modo ottimale possono essere causa di problemi sia nel caso in cui il modulo invii delle informazioni tramite email che nel caso inserisca le informazioni in un database.
Il rischio principale [...]]]></description>
			<content:encoded><![CDATA[<p>In questo articolo proveremo ad illustrarvi come proteggere un form HTML dall&#8217;invio di SPAM mediante la tecnica del CAPTCHA. I form html non gestiti in modo ottimale possono essere causa di problemi sia nel caso in cui il modulo invii delle informazioni tramite email che nel caso inserisca le informazioni in un database.</p>
<p><span id="more-5"></span>Il rischio principale è costituito dagli SPAMBOT ovvero dei software in grado di effettuare richieste http allo scopo di bucare i form non protetti. Le conseguenze di un attacco di questo tipo possono essere il sovraccarico del server web, malfunzionamenti del server di posta nonchè il rapido accumularsi di informazioni inutili sul Database.Il potenziale pericolo è rappresentato dal fatto che analizzando i tag di una pagina html, si possono analizzare facilmente le variabili usate per il passaggio delle informazioni, il metodo utilizzato (POST/GET) e la pagina che elabora la richiesta di invio email.</p>
<p>Quindi un qualsiasi individuo che vuole crearvi una grana, può, mediante un banale programmino che invia richieste HTTP effettuare la medesima richiesta infinite volte e intasarvi la posta o riempirvi il database. Per questo problema nasce l&#8217;esigenza di validare lato server le richieste effettuate tramite la pagina che si occupa nello specifico di elaborare la richiesta.</p>
<p>La tecnica del Captcha Code &#8220;completely automated public Turing test to tell computers and humans apart&#8221; è uno dei metodi più utilizzati per verificare se chi effettua la richiesta è un umano oppure un BOT.</p>
<p>A questo punto mostriamo un esempio di come implementare tale tecnica all&#8217;interno del proprio sito web:</p>
<p>Iniziamo con la creazione di una tabella sul nostro DB MySql che contenga le informazioni necessarie per implementare la tecnica del Captcha. Connettiamoci al nostro DB tramite PhpMyAdmin o tramite linea di comando e creiamo la tabella captcha con il seguente script:</p>
<pre class="sql">CREATE TABLE `captcha` (
`captcha_id` varchar(255) character set latin1 collate latin1_general_ci NOT NULL,
`code` varchar(255) character set latin1 collate latin1_general_ci NOT NULL,
`timestamp` varchar(255) character set latin1 collate latin1_general_ci NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;</pre>
<p>Occupiamoci ora della pagina dove verrà visualizzato il FORM, preleviamo il codice e salviamolo in un file di testo index.php (per comodità si consiglia di posizionare tutti i file creati all&#8217;interno della stessa directory nella root del web server) :</p>
<pre class="php">&lt;?php
echo "&lt;html&gt;";
echo "&lt;head&gt;";

// genero un identificativo criptato md5 da associare al codice di sicurezza
$captcha_id = md5(microtime().mt_rand().'super1segreto2segretissimo3');

// creo un codice di controllo per la verifica dell'identificativo
$sale = "frase super segreta da cambiare a discrezione.";

// cripto in md5 i due codici generati
$chk = md5($sale.$captcha_id);

echo "&lt;/head&gt;";
echo "&lt;body&gt;";

//Creo il form

echo "&lt;form method=\"post\" action=\"email.php\"&gt;";
echo "Cognome : &lt;input type=\"text\" name=\"surname\"/&gt;";
echo "&lt;br/&gt;";
echo "Nome : &lt;input type=\"text\" name=\"name\"/&gt;";
echo "&lt;br/&gt;";
echo "E-mail : &lt;input type=\"text\" name=\"mail\"/&gt;";
echo "&lt;br/&gt;";
echo "&lt;img src=\"captcha.php?id=".$captcha_id."&amp;chk=".$chk."\" width=\"110\" height=\"70\"/&gt;";
echo "&lt;input type=\"text\" name=\"captcha_code\"/&gt;";
echo "&lt;br/&gt;";
echo "&lt;input name=\"captcha_id\" type=\"hidden\" id=\"captcha_id\" value=\"".$captcha_id."\"/&gt;";
echo "&lt;br/&gt;";
echo "&lt;input type=\"submit\" name=\"submit\" value=\"Submit\"/&gt;";
echo "&lt;br/&gt;";
echo "&lt;/form&gt;";

echo "&lt;/body&gt;";
?&gt;</pre>
<p>Notare bene che nello script precedente:</p>
<p>l&#8217;immagine Captcha è stata generata dalla richiesta presente nell&#8217;attributo src dell&#8217;immagine<br />
il campo captcha_code conterrà il codice di sicurezza che l&#8217;utente dovrà inserire per validare l&#8217;elaborazione<br />
il campo captcha_id contiene il captcha_id generato precedentemente nella head<br />
Ecco il listato della pagina che genera l&#8217;immagine CAPTCHA, salviamo il codice in un file di testo avendo l&#8217;accortezza di salvarlo come captcha.php :</p>
<pre class="php">&lt;?php
// controllo se è stato fornito l identificativo del codice captcha
if(!isset($_GET['id'])) exit();

// controllo la validità dell identificativo
$captcha_id = $_GET['id'];
if(!preg_match("/^[a-f0-9]{32}$/",$captcha_id)) exit();

// ricreo il codice di controllo e lo confronto con quello passato via GET
$sale = "frase super segreta da cambiare a discrezione.";
$chk = md5($sale . $captcha_id);
if($chk != $_GET['chk']) exit();

// creo l immagine
// ---------------------------------------------------------------

// le dimensioni dell immagine
$size_x = 110;
$size_y = 70;

$img = imagecreatetruecolor($size_x,$size_y);

// alloco un colore per lo sfondo
$backgroung = imagecolorallocate($img,255, 255, 255);

// alloco 3 colori per le 3 lettere da decifrare
// utilizzo il canale alpha per impostare la trasparenza
$color[] = imagecolorallocatealpha($img,110,110,110,60);
$color[] = imagecolorallocatealpha($img,3,187,63,60);
$color[] = imagecolorallocatealpha($img,255,0,0,70);

// mischio l ordine dei colori
shuffle($color);

// coloro lo sfondo creando un rettangolo
imagefilledrectangle($img,0,0,$size_x-1,$size_y-1,$backgroung);

// i caratteri da utilizzare per il codice di sicurezza
$caratteri = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";

// inizializzo la variabile che conterrà il codice
$codice = '';

// per ciascuno dei 3 caratteri
for ($i=0 ; $i &lt; 3 ; $i++){
// estraggo un carattere a caso
$codice .= $caratteri{rand(0,34)};
// disegno il carattere
imagettftext(
$img,
50,
-5+rand(0,10), // rotazione casuale
($i+0.3)*24,
60,
$color[$i],
'./VeraMono.ttf',
$codice{$i});
}

// inserisco identificativo e codice nel DB
// ---------------------------------------------------------------
mysql_connect('IP_MIO_SERVER_MYSQL','USER_MYSQL','PASS_MYSQL');
mysql_select_db('NOME_DB_MYSQL');

mysql_query("REPLACE INTO captcha (captcha_id,code,`timestamp`)
values ('$captcha_id','$codice',UNIX_TIMESTAMP())");

// con prob. impostata da $probabilità cancello i record più vecchi
$probabilità = 5; // 5%
if(mt_rand(1,100) &lt;= $probabilità){
$durata_captcha = 60*60;
mysql_query("DELETE FROM captcha WHERE `timestamp`&lt;(UNIX_TIMESTAMP()-$durata_captcha)");
}

// invio l immagine al browser
// ---------------------------------------------------------------
header("Content-type: image/png");
imagepng($img);
?&gt;</pre>
<p>Da notare che nello script precedente si utilizza un font per generare l&#8217;immagine (VeraMono.ttf)  il quale può essere modificato a proprio piacimento con un qualsiasi font installato nel proprio pc o scaricato da internet. Per scaricare il font utilizzato nell&#8217;esempio cliccare qui. Nell&#8217;esempio il font in questione è posizionato all&#8217;interno della stessa cartella dove sono stati posizionati gli script.</p>
<p>Passiamo ora ad esaminare la pagina che invierà l&#8217; e-mail e che si occuperà anche di verificare la validità dell&#8217;elaborazione, copiamo il codice sottostante e incolliamolo su un file di testo avendo l&#8217;accortezza di salvarlo come email.php.</p>
<pre class="php">&lt;?php
//Inclusione file esterni
 require_once('send_mail.php');

// Recupero dei dati POST
$surname = $_POST['surname'];
$name = $_POST['name'];
$mail = $_POST['mail'];

// dopo quanto tempo i dati nella tabella del DB scadono
$durata_captcha = 60*60;

// ci sono tutti i dati?
if(!isset($_POST['captcha_code']) OR !isset($_POST['captcha_id'])) exit;
$captcha_code = $_POST['captcha_code'];
$captcha_id = $_POST['captcha_id'];

// controlla la validità del $captcha_id
if(!preg_match("/^[a-f0-9]{32}$/",$captcha_id)){
// se il $captcha_id non è valido termino la procedura
echo '$captcha_id non valido';
}else{
// controlla la validità del $captcha_code
if (!preg_match("/^[a-zA-Z0-9]{3}$/", $captcha_code)){
// se il $captcha_code non è valido non faccio la ricerca nel DB
echo '$captcha_code non valido';
}else{
// $captcha_id e $captcha_code sono ben formattati, posso fare la verifica
// rendo tutte le lettere del $captcha_code maiuscole e
// sostituisco gli zeri con le O
$captcha_code = strtoupper($captcha_code);
$captcha_code = str_replace('0','O',$captcha_code);

mysql_connect('IP_MIO_SERVER_MYSQL','USER_MYSQL','PASS_MYSQL') or die(mysql_error());
mysql_select_db('NOME_DB_MYSQL') or die(mysql_error());

// nella verifica non considero dati più vecchi di $durata_captcha secondi
$res = mysql_query("SELECT code FROM captcha WHERE captcha_id = '$captcha_id' AND code = '$captcha_code' AND `timestamp` &gt; (UNIX_TIMESTAMP() - $durata_captcha)") or die (mysql_error());
if(mysql_num_rows($res) != 1){
// verifica fallita
echo '$captcha_code errato';
}else{
// cancello i vecchi codici e quello corrente
mysql_query("DELETE FROM captcha WHERE captcha_id = '$captcha_id' OR `timestamp` &lt; (UNIX_TIMESTAMP() - $durata_captcha)");

//Scrittura parametri email
$from_name  = $name." ".$surname;
$from_email = $mail;
$to_name    = "NOME_DEL_DESTINATARIO";
$to_email   = "MAIL_DEL_DESTINATARIO";
$subject    = "Invio email sicura dal tuo sito";
$text_message = "This is HTML email and your email client software ain't support HTML email.";
$html_message = "&lt;!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"&gt;\n";
$html_message.= "&lt;html&gt;&lt;head&gt;&lt;title&gt;&lt;/title&gt;\n";
$html_message.= "&lt;meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\"&gt;\n";
$html_message.= "&lt;/head&gt;\n";
$html_message.= "&lt;body&gt;";
$html_message.= "Ciao, questa è un email sicura inviata dal tuo sito";
$html_message.= "&lt;/body&gt;&lt;/html&gt;";

//Creo l'allegato
$attachment = array ("PATH_ALLEGATO_SUL_SERVER");

//Invio l'email con la funzione sendmail
sendmail ($from_name, $from_email, $to_name, $to_email, $subject, $text_message, $html_message, $attachment);

echo "&lt;script language=\"Javascript\"&gt;";
echo "&lt;!–-";
echo "alert (\"e-mail inviata con successo\");";
echo "history.go(-1);";
echo "–-&gt;";
echo "&lt;/script&gt;";
}
}
}
?&gt;</pre>
<p>I controlli effettuati all&#8217;inizio del codice illustrato permettono al server web di distinguere se si tratta di una richiesta valida o di una richiesta effettuata da un BOT.</p>
<p>Se i controlli saranno superati si passerà ad invocare la funzione sendmail che si occuperà dell&#8217;invio di una mail in formato HTML con allegati. Alternativamente a questa funzione si pùo invocare la classica funzione mail disponibile nel linguaggio PHP.</p>
<p>Ecco ora il listato della funzione sendmail invocata nel precedente script, che si occupa di inviare una mail in formato HTML. Copiare il codice e salvarlo in un file denominato send_mail.php.</p>
<pre class="php">&lt;?php
function sendmail ($from_name, $from_email, $to_name, $to_email, $subject, $text_message="", $html_message, $attachment=""){
$from = "$from_name &lt;$from_email&gt;";
$to   = "$to_name &lt;$to_email&gt;";
$main_boundary = "----=_NextPart_".md5(rand());
$text_boundary = "----=_NextPart_".md5(rand());
$html_boundary = "----=_NextPart_".md5(rand());
$headers  = "From: $from\n";
$headers .= "Reply-To: $from\n";
$headers .= "X-Mailer: Hermawan Haryanto (<a href="http://hermawan.com)\n">http://hermawan.com)\n</a>";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed;\n\tboundary=\"$main_boundary\"\n";
$message .= "\n--$main_boundary\n";
$message .= "Content-Type: multipart/alternative;\n\tboundary=\"$text_boundary\"\n";
$message .= "\n--$text_boundary\n";
$message .= "Content-Type: text/plain; charset=\"ISO-8859-1\"\n";
$message .= "Content-Transfer-Encoding: 7bit\n\n";
$message .= ($text_message!="")?"$text_message":"Text portion of HTML Email";
$message .= "\n--$text_boundary\n";
$message .= "Content-Type: multipart/related;\n\tboundary=\"$html_boundary\"\n";
$message .= "\n--$html_boundary\n";
$message .= "Content-Type: text/html; charset=\"ISO-8859-1\"\n";
$message .= "Content-Transfer-Encoding: quoted-printable\n\n";
$message .= str_replace ("=", "=3D", $html_message)."\n";
if (isset ($attachment) &amp;&amp; $attachment != "" &amp;&amp; count ($attachment) &gt;= 1){
for ($i=0; $i&lt;count ($attachment); $i++){
$attfile = $attachment[$i];
$file_name = basename ($attfile);
$fp = fopen ($attfile, "r");
$fcontent = "";
while (!feof ($fp)){
$fcontent .= fgets ($fp, 1024);
}
$fcontent = chunk_split (base64_encode($fcontent));
@fclose ($fp);
$message .= "\n--$html_boundary\n";
$message .= "Content-Type: application/octetstream\n";
$message .= "Content-Transfer-Encoding: base64\n";
$message .= "Content-Disposition: inline; filename=\"$file_name\"\n";
$message .= "Content-ID: &lt;$file_name&gt;\n\n";
$message .= $fcontent;
}
}
$message .= "\n--$html_boundary--\n";
$message .= "\n--$text_boundary--\n";
$message .= "\n--$main_boundary--\n";
@mail ($to, $subject, $message, $headers);
}
?&gt;</pre>
<p>A questo punto possiamo testare lo script chiamando la pagina index.php dal nostro browser.</p>
<p>Alla prossima&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.webeng.it/2007/10/13/impedire-linvio-di-spam-da-un-form-html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
