Ecco come applicare un testo di watermark a una immagine con php
Leggi l'articolo: http://smashingcoding.com/2007/12/14/un-watermak-png-propre-en-php/
Ecco come applicare un testo di watermark a una immagine con php
Leggi l'articolo: http://smashingcoding.com/2007/12/14/un-watermak-png-propre-en-php/

Ottimi tutorial su come gestire la cache con php
Sito web: http://smashingcoding.com/2007/10/23/les-techniques-de-cache-en-php/
Vediamo come installare e configurare:
Premetto che Leopard è già dotato di Apache 2.2 e del PHP. Ma per esigenze personali ho compilato il PHP dai sorgenti distribuiti da PHP.net. E questo mi ha costretto anche a compilare Apache, in quanto quello compreso in Leopard è a 64bit mentre la libphp5.so compilata dai sorgenti è a 32bit ed impedisce al web server persino di avviarsi.
E' necessario installare i tool di sviluppo che trovate direttamente nel DVD di installazione di Leopard. Inseritelo nel lettore del vostro Mac, aspettate che parta lo splashscreen.
Cliccate su Optional Install per installare i tool XCode mediante il pacchetto XcodeTools.mpkg.
In questo modo saremo in grado di compilare tutti i sorgenti necessari senza particolari problemi. Avremo installato, fra l'altro, il compilatore gcc che ci servirà sia per Apache che per PHP.
Niente di più semplice. Leopard è già pronto con Apache 2.2. Dovete solo attivare la condivisione web nelle preferenze di sistema.

Fatto questo accedete via browser a http://localhost (o http://127.0.0.1). Vi si aprirà la pagina di conferma di installazione del webserver. Ma a noi non piace la DocumentRoot configurata di default, ed allora come prima cosa la cambieremo
Apriamo una finestra del terminale ed accediamo alla directory di Apache:
cd /etc/apache2
Il file di configurazione del webserver è il solito httpd.conf. Apriamolo con vim ed apportiamo le seguenti modifiche.
sudo vim httpd.conf
password:
Notato niente di strano? Ebbene si. Anche su Leopard è stato implementato il comando sudo per aprire ed accedere a file di sistema con tutti i privilegi.
Cerchiamo la riga:
DocumentRoot "/Library/WebServer/Documents"
E modifichiamola in:
DocumentRoot "/Users/VOSTROUTENTE/Sites"
E successivamente cerchiamo la riga:
<Directory "/Library/WebServer/Documents">
E modifichiamola in:
<Directory "/Users/VOSTROUTENTE/Sites">
Per VOSTROUTETE si intende il nome della directory che indentifica la root di sistema del vostro account. Nel mio caso è "davide". Ed inserendo la URI in questo modo la webroot sarà fisicamente nella directory "Siti" del vostro account. State attenti che nel finder il nome della directory che vedete è proprio "Siti", ma è solo un alias dovuto alla lingua italiana. Il nome di sistema dela directory è "Sites" e questo va scritto in ogni file di sistema che in qualche modo interessa questa direttiva.
Per rendere effettive le modifiche riavviamo il webserver:
sudo apachectl graceful
Ma abbiamo detto che il server Apache compreso nella distribuzione Apple non è compatibile con il php compilato dai sorgenti. Quindi, a configrazione ultimata e testata, ricompiliamo il web server dai sorgenti scaricati direttamente da Apache.org. Se lo fate oggi scaricherete la versione 2.2.8. Scompattate l'archivio un po' dove vi pare, entrate nella directory e digitate il solito trittico di comandi.
sudo apachectl stop
cd httpd-2.2.8
./configure --enable-layout=Darwin --enable-mods-shared=all
make
sudo make install
sudo apachectl start
Fatto questo non ci sarà bisogno di riconfigurare il webserver per modificare la DocumentRoot. Andrà bene e verrà usato il file di configurazione precedentemente editato in /etc/apache2.
Scaricate il pacchetto binario direttamente da MySQL.org. Installate il pacchetto mysql-5.0.51a-osx10.5-x86.pkg. Potete anche evitare di installare MySQLStartupItem, dato che al momento con Leopard non funziona. Ed anche il pannello di controllo aggiuntivo non va. Ma per quest'ultimo è stata rilasciata una versione funzionante, scaricabile qui.
Purtroppo non c'è ancora modo di avviare automaticamente il server all'avvio del sistema. La preferenza spuntata non funziona. Ma quantomeno risulta agevole avviarlo manualmente.
Se abbiamo intenzione di usare le funzionalità date alla libreria GD del php, abbiamo la necessità di installare le librerie libpng e libjpeg. E' possibile farlo direttamente utilizzando un archivio binario scaricabile a questo indirizzo. Per semplicità utilizzate il combo installer che in un sol colpo le installa entrambe.
Bene, siamo arrivati al clou della nostra avventura. Scaricato il pacchetto con i sorgenti, scompattiamo l'archivio ed accediamo alla directory da terminale.
cd php-5.2.5
Importante è la stringa di configurazione. Un ./configure --help può togliervi molti dubbi. In ogni caso la mia stringa è la seguente. Dopo il ./configure, i soliti comandi per compilare ed installare il pacchetto.
./configure --prefix=/usr/local/php5 --enable-calendar --with-apxs2=/usr/sbin/apxs --enable-mbstring --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql=/usr/local/mysql/ --with-gd --enable-soap --with-zlib --with-jpeg-dir=/usr/local/bin --with-png-dir=/usr/local/bin
make
sudo make install
sudo apachectl graceful
Il comando install si occuperà anche di editare il file di configurazione di Apache per permettere il running della libreria libphp5.so. L'ultimo comando serve a far riavviare il webserver in modo da fargli caricare tutte le librerie necessarie.
Non ri rimane che testare l'installazione! Accediamo alla DocumentRoot e creiamo uno nuovo file. Chiamiamolo info.php. Con un qualsiasi editor di testo, scriviamo:
<?php phpinfo(); ?>
Salviamo e chiudiamo il file ed accediamo via browser a http://localhost/info.php.
phpMyAdmin
Anche qui è tutto molto semplice. Basta scaricare l'ultima release del web tool di amministrazione del server MySQL, scompattare l'archivio in /Users/VOSTROUTETE/Sites e magari rinominare la directory in phpmyadmin per maggior comodità.
Avendo avuto cura che il server MySQL sia avviato, accedete via browser a http://localhost/phpmyadmin/scripts/setup.php ed utilizzate l'interfaccia web per la configurazione.
Per un uso in locale, senza troppo star a pensare alla sicurezza di un pc che non sarà mai utilizzato come web server pubblico, basta selezionare:
Da ajaxray un ottimo script per generare feed RSS 1.0, RSS 2.0, atom.
<?
function cutText($string, $length) {
while ($string{$length} != " ") {
$length--;
}
return substr($string, 0, $length);
}
?>
<base href="http://www.rai.it/">
<script>
window.onload=intercetta;
function intercetta() {
for (var i=0; i<document.links.length; i++)
document.links[i].target="_blank";
}
</script>
<?
$news=fopen("http://www.rai.it/notizietelevideo/0,,,00.html","r");
$i=0;
while (!feof($news)) {
$buffer = fgets($news, 4096);
if($i>70 && $i<116){
$buffer=str_replace("<h4 class=\"StrilloTelevideo\">","",$buffer);
$buffer=str_replace("</h4>","<br>",$buffer);
echo "$buffer"; //riga letta
}
$i++;
}
fclose ($news); #chiude il file
?>
Il formato RTF
RTF (acronimo di RICH TEXT FORMAT) è un formato per documenti multipiattaforma, sviluppato da Microsoft nel lontano 1987. La maggior parte degli editor di testo e dei word processor disponibili per Microsoft Windows, Mac OS e Linux sono in grado di leggere e scrivere documenti RTF.
RTF permette di mantenere la formattazione dei caratteri, dei paragrafi e tutte le immagini presenti in un documento, impostare informazioni di impaginazione molto precise (la dimensione e l'orientamento del foglio per esempio) senza includere nessuna macro. Inoltre le specifiche possono essere consultate liberamente, e Microsoft ad ogni nuova versione, rilascia l’ opportuna documentazione. Dalla versione 1.0 del 1987 siamo giunti alla 1.9 del Febbraio 2007.
La soluzione: PhpRtf
PhpRtf è una libreria php free in grado di generare file RTF in modo dinamico. Il suo utilizzo è molto semplice, e ciò è dovuto anche al fatto che il codice è ben strutturato.
Di seguito sono elencate alcune delle funzionalità che la libreria mette a disposizione:
Sul sito ufficiale del progetto, www.phprtf.com, è possibile trovare tutta la documentazione e il dettaglio delle funzioni disponibi nella libreria.
Analizziamo il classico esempio: HelloWord !
| <?php require_once("../rtf/Rtf.php"); $rtf = new Rtf(); $sect = &$rtf->addSection(); $sect->writeText('<i>Hello <b>World</b></i>.', new Font(12), new ParFormat('center')); $rtf->sendRtf('Hello World'); ?> |
Innanzitutto bisogna includere il sorgente della libreria, Rtf.php, e istanziare l’oggetto Rtf. A questo punto si aggiunge una pagina al documento attraverso il metodo addSection(), e si scrive al suo interno utilizzando writeText. Come è posisibile vedere, per scrivere sul file bisogna definire 2 attributi: il font, attraverso il quale applichiamo una formattazione di stile al carattere, e la formattazione del paragrafo che contiene il testo. In questo caso il paragrafo dispone il testo con allineamento centrato. Per salvare il documento, utilizziamo il metodo sendRtf(‘HelloWord’), che ci permette di scaricare il file col nome HelloWord.rtf
Il primo articolo riguardo il formato RTF (Creare RTF da Php - Introduzione) ci ha insegnato le basi, ora passiamo ad un esempio un po’ piu complesso:
realizziamo una griglia dati, introducendo anche le funzioni per impostare gli attributi del foglio.
In questo esempio generiamo una tabella di 10 righe e 3 colonne al centro del documento. Ogni riga ha altezza 2cm e larghezza 5cm.
Il codice è il seguente:
| require_once("../rtf/Rtf.php");
$rtf = new Rtf();
//aggiungo la pagina, imposto formato A4 pagina e margini $sect = &$rtf->addSection(); $sect->setPaperWidth(21); $sect->setPaperHeight(29.7); $marginTop = 1; $marginBottom = 1; $marginLeft = 3; $marginRight = 3; $sect->setMargins($marginLeft, $marginTop, $marginRight, $marginBottom); |
Dopo aver istanziato l’ oggetto Rtf e creato la pagina, definiamo il formato A4 e impostiamo i margini della pagina attraverso il medoto setMargins.
| $columns = 4; $rows = 10; $cell_h = 2; $cell_w = 5; //creo la tabella con 10 righe e 3 colonne $table = &$sect->addTable(); $table->addRows($rows, $cell_h); $table->addColumn($cell_w); $table->addColumn($cell_w); $table->addColumn($cell_w); |
Per creare la tabella abbiamo utlizzato il metodo addTable(). La definizione delle righe è molto semplice e si possono utilizzare 2 metodi: il primo è addRow(), che riceve in ingresso l’ altezza e appende una riga alla tabella. Il secondo che abbiamo utlizzato noi è una miglioria del metodo precedente, in quanto addRows permette in un colpo solo di inserire un preciso numero di righe, ma con la STESSA altezza. Per definire le colonne invece, si utilizza il metodo addColumn() che riceve in ingresso la larghezza della colonna.
Facciamo attenzione ad inserire i giusti centimetri altrimenti si esce fuori dal foglio.
| //stile per il contenuto interno della cella $innerPar = new ParFormat('left'); $innerPar->setIndentLeft(0.64); $innerPar->setIndentRight(0.64); $innerFont = new Font(10, 'Times New Roman'); //riempio la tabella for($row_index = 1; $row_index <= $rows; $row_index++){ for($col_index = 1; $col_index <= $columns; $col_index++){ $text = 'ROW:'.$row_index.'COL:'.$col_index; $table->writeToCell($row_index, $col_index, $text, $innerFont, $innerPar); unset($text); }//end rows for }//end cols for //outputting rtf ... $rtf->sendRtf('test'); |
A questo punto, con un doppio ciclo (quello esterno scandisce le righe, il più interno le colonne) andiamo a posizionarci nelle celle, e con writeToCell settiamo il contenuta della cella corrente. Anche qui dobbiamo definire sia font che stile del paragrafo.
Questi sono 2 esempi molto semplici che mettono in evidenza la semplicità e versatilità della libreria … ma c’è molto altro! Alla pagina www.phprtf.com/index.php/samples/ è presente una modesta carrellata di esempi, dove vengono esposte la maggior parte delle funzionalità. Enjoy!
Via: http://www.codicefacile.it
In questo articolo vedremo come creare un modulo contatti in php che invia i dati via email. Le informazioni che vogliamo memorizzare sono: nome, email e messaggio.
Creaimo il modulo:
<form method="post" action="invia.php"><INPUT NAME="op" TYPE="hidden" VALUE="send">
<table>
<tr>
<td><p>Nome:</p></td>
<td>
<input name="name" type="text" size="30" maxlength="150">
</td>
</tr>
<tr>
<td><p>E-mail:</p></td>
<td>
<input name="email" type="text" size="30" maxlength="150">
</td>
</tr>
<tr>
<td valign="top"><p>Messaggio:</p></td>
<td><textarea name="message" cols="40" rows="6"></textarea></td>
</tr>
<tr><td></td> <td><input name="submit" type="submit" value="Invia"></td></tr>
</table>
</form>
Quello che adesso serve è il file invia.php che recupera i dati e li invia per email:
<?php
if (isset($_POST["op"]) && ($_POST["op"]=="send")) {
/******** START OF CONFIG SECTION *******/
$sendto = "";
$subject = "Website Contact Enquiry";
// Select if you want to check form for standard spam text
$SpamCheck = "Y"; // Y or N
$SpamReplaceText = "*content removed*";
// Error message prited if spam form attack found
$SpamErrorMessage = "<p align=\"center\"><font color=\"red\">Malicious code content detected.
</font><br><b>Your IP Number of <b>".getenv("REMOTE_ADDR")."</b> has been logged.</b></p>";
/******** END OF CONFIG SECTION *******/
$name = $HTTP_POST_VARS['name'];
$email = $HTTP_POST_VARS['email'];
$message = $HTTP_POST_VARS['message'];
$headers = "From: $email\n";
$headers . "MIME-Version: 1.0\n"
. "Content-Transfer-Encoding: 7bit\n"
. "Content-type: text/html; charset = \"iso-8859-1\";\n\n";
if ($SpamCheck == "Y") {
// Check for Website URL's in the form input boxes as if we block website URLs from the form,
// then this will stop the spammers wastignt ime sending emails
if (preg_match("/http/i", "$name")) {echo "$SpamErrorMessage"; exit();}
if (preg_match("/http/i", "$email")) {echo "$SpamErrorMessage"; exit();}
if (preg_match("/http/i", "$message")) {echo "$SpamErrorMessage"; exit();}
// Patterm match search to strip out the invalid charcaters, this prevents the mail injection spammer
$pattern = '/(;|\||`|>|<|&|^|"|'."\n|\r|'".'|{|}|[|]|\)|\()/i'; // build the pattern match string
$name = preg_replace($pattern, "", $name);
$email = preg_replace($pattern, "", $email);
$message = preg_replace($pattern, "", $message);
// Check for the injected headers from the spammer attempt
// This will replace the injection attempt text with the string you have set in the above config section
$find = array("/bcc\:/i","/Content\-Type\:/i","/cc\:/i","/to\:/i");
$email = preg_replace($find, "$SpamReplaceText", $email);
$name = preg_replace($find, "$SpamReplaceText", $name);
$message = preg_replace($find, "$SpamReplaceText", $message);
// Check to see if the fields contain any content we want to ban
if(stristr($name, $SpamReplaceText) !== FALSE) {echo "$SpamErrorMessage"; exit();}
if(stristr($message, $SpamReplaceText) !== FALSE) {echo "$SpamErrorMessage"; exit();}
// Do a check on the send email and subject text
if(stristr($sendto, $SpamReplaceText) !== FALSE) {echo "$SpamErrorMessage"; exit();}
if(stristr($subject, $SpamReplaceText) !== FALSE) {echo "$SpamErrorMessage"; exit();}
}
// Build the email body text
$emailcontent = "
-----------------------------------------------------------------------------
WEBSITE CONTACT ENQUIRY
-----------------------------------------------------------------------------
Name: $name
Email: $email
Message: $message
_______________________________________
End of Email
";
// Check the email address enmtered matches the standard email address format
if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,6}$", $email)) {
echo "<p>It appears you entered an invalid email address</p><p><a href='javascript: history.go(-1)'>Click here to go back</a>.</p>";
}
elseif (!trim($name)) {
echo "<p>Please go back and enter a Name</p><p><a href='javascript: history.go(-1)'>Click here to go back</a>.</p>";
}
elseif (!trim($message)) {
echo "<p>Please go back and type a Message</p><p><a href='javascript: history.go(-1)'>Click here to go back</a>.</p>";
}
elseif (!trim($email)) {
echo "<p>Please go back and enter an Email</p><p><a href='javascript: history.go(-1)'>Click here to go back</a>.</p>";
}
// Sends out the email or will output the error message
elseif (mail($sendto, $subject, $emailcontent, $headers)) {
echo "<br><br><p><b>Thank You $name</b></p><p>We will be in touch as soon as possible.</p>";
}
}
else {
?>
<p align="center">Uno o piu campi vuoti</p>
<?php } ?>