Estrazione dei dati da un DB e visualizzazione in una pagina web impaginato in una Tabella Estrazione dei dati da un DB e visualizzazione in una pagina Web
Un semplice REDIRECT Controllo della lunghezza di un campo
Controllo che due campi siano differenti tra loro Controllo dei dati di un form
Un menu a partire da un file di testo (txt) Scrittura di informazioni da un form a un file di testo
Recupero dei dati da un form Scelta multipla utilizzando le caselle di controllo, in un modulo
Leggere i contenuti di una cartella e creare il link ai files contenuti nella cartella stessa Includere nelle pagine PHP pagine esterne
Collegamento ad un database MySQL Connessione e controllo ad un database ed inserimento dei dati
Ottenere l'indirizzo IP della macchina Inserire data e ora
Creare un semplice contatore Generare file Excel da PHP (esempio delle tabelline)
La data in PHP Inviare email da ambiente locale
Installazione di php5 e convivenza con php 4 [moduli di apache su windows] Installare come modulo PHP 4.3.2 su Windows 
Installare PHP 5.0.0b  Configurazione di PHP 4.3.2 in Apache 2.0.46 per Windows
Configurazione di Apache Web Server User Authentication from a MySQL database
Autenticazione utenti con MySQL (con demo) The Mail funcion
Random Image with Database Tips per EasyPHP

 

 

 

 

 

 

 

 

 

 

 

Estrazione dei dati da un db e visualizzazione in una pagina web impaginato in una TABELLA  (da "pagine web dinamiche")
<?php
*** EFFETTUARE UN COLLEGAMENTO AL PROPRIO SERVER MYSQL ***

#EFFETTUARE UNA SELECT PER SELEZIONARE I CAMPI DALLA TABLE
$sql="SELECT campo1, campo2, campo3 FROM <table>  ORDER BY campo1";

$risultati_mysql=mysql_query($sql,$connessione);
$num_righe=mysql_num_rows($risultati_mysql);

if ( $num_righe == 0 ) {
echo "Spiacente, non ci sono informazioni";
} else {
# SE CI SONO DEI DATI, CREAIAMO UNA TABELLA GRAFICA
echo "<TABLE ALIGN=\"CENTER\" BORDER=\"8\">";
echo "<TR><TH>CAMPO1</TH><TH>CAMPO2</TH><TH>CAMPO3</TH></TR>";

while ($riga=mysql_fetch_array($risultati_mysql))
{
$nome=$riga["CAMPO1"];
$indirizzo=$riga["CAMPO2"];
$paese=$riga["CAMPO3"];
echo "<TR><TD>$nome</TD><TD>$indirizzo</TD><TD>$paese</TD></TR>";
}
}
mysql_close($connessione);
?>
</TABLE>

OPPURE

*** EFFETTUARE UN COLLEGAMENTO AL PROPRIO SERVER MYSQL ***
#EFFETTUARE UNA SELECT PER SELEZIONARE I CAMPI DALLA TABLE
$query = "select * from <table>";
$dbrisultato = mysql_query($query, $<nome database>);
print "<table border=\"1\">\n";
while ($line = mysql_fetch_array($dbrisultato, MYSQL_NUM))  {
print "\t<tr>\n";
foreach ($line as $col_value) {
print "\t\t<td>$col_value<\td>/n";
}
print "\t</tr>\n";
}
print "</table>\n";
mysql_free_result($dbrisultato();
mysql_close($db);
?>
</body>
</html>

Estrazione dei dati da un db e visualizzazione in una pagina web (da "pagine web dinamiche")
<?php
*** EFFETTUARE UN COLLEGAMENTO AL PROPRIO SERVER MYSQL ***


$sql="SELECT * FROM <table>";

$risultati_mysql=mysql_query($sql,$connessione);
#FUNZIONE CHE RESTITUISCE IL NUMERO DI RIGHE CONTENUTE NEL DB
$num_righe=mysql_num_rows($risultati_mysql);

if ( $num_righe == 0 ) {
echo "Spiacente, non ci sono informazioni";
} else {
# SE CI SONO DEI DATI CREA UN ARRAY (UNIONE DI RIGHE O COLONNE)
while ($riga=mysql_fetch_array($risultati_mysql))
{
#campo è quello che compare nel db
$nome=$riga["campo1"];
$indirizzo=$riga["campo2"];
$città=$riga["campo3"];
$paese=$riga["campo4"];
$ID=$riga["ID"];
# mostra i risultati sulla pagina web
echo "$nome : $indirizzo $città $paese<BR>";
}
}
mysql_close($connessione);
?>

Un semplice REDIRECT

Form HTML Form PHP
<FORM METHOD=POST ACTION="redirect.php">
Dove vuoi andare?<br>
<SELECT NAME=url SIZE="3">
<OPTION SELECTED VALUE="http://www.yahoo.it"> Yahoo
<OPTION VALUE="http://www.repubblica.it"> La Repubblica
<OPTION VALUE="http://www.virgilio.it"> Virgilio
<OPTION VALUE="http://www.php.net"> Sito PHP
</SELECT>
<INPUT TYPE="submit" VALUE="Go!">
</FORM>
<?php
header ("Location: $url");
#redirect.php
?>

==================
Redirect in Php
Per effettuare il redirect in Php è sufficiente utilizzare il comando
<?PHP
header("location: http://www.sito.it/pagina.php");
?>
E' importante sottolineare il fatto che debba trattare di un URL assoluto e non solo il nome di un documento (anche se sullo stesso server).

 

Controllo della lunghezza di un campo
<?php
$lungh_nome=strlen($campo del modulo);
if ($lungh_nome <= 3) {
echo "Spiacente, il campo deve contenere almeno 3 caratteri";
echo "<BR><A HREF#\ "nome file.html\ ">Ritorna</A> al form";
} else {
echo "$campo del modulo va bene";
}
?>

Controllo che due campi siano differenti tra loro
if ( $ora_fine <= $ora_inizio ) {
echo "Spiacente, i due campi devono essere differenti";

Controllo dei dati di un form
<?php
$errore=false;
#controlla che il campo non sia vuoto
if ( $nome_campo == "" ) {
$errore=true;
echo "<BR>Spiacente, devi inserire il qualcosa";
} else {
echo " Grazie $nome_campo<BR>";
}
#controllo del campo "giorno della settimna"
if (sizeof($giorno_settimana) < "1") {
$errore=true;
echo "<BR> Spiacente, devi selezionare almeno un giorno";
} else {
echo "<BR> Confermiamo i giorni da te indicati ";
foreach ( $giorno_settimana as $valore ) {
echo "<BR><B>$valore</B>";
} # fine foreach
} # fine if
if ( $errore) {
echo "<BR>Non hai compilato tutti i campi, devi tornare al <A HREF=\"pagina precedente.html\" >modulo</A> ";
}
?>

OPPURE

if (( !$primo_campo ) || ( !$secondo_campo ) || ( !$terzo_campo)) {
echo "Devi inserire i nomi in TUTTI i campi";
echo "Non tutti i campi sono stati riempiti, devi ritornare al <A HREF=\"names.html\" >form</A>";
} else {
echo "Sto elaborando i campi";
}
?>

Un menu a partire da un file di testo (txt) - da Pagine web dinamiche

Form HTML Form PHP
EMPLOYEE.PHP

<FORM METHOD=GET ACTION=nomination.php>
<?php
echo (date("[F]"));
#deve esistere un file nomi.txt (contenente i nomi)
if (!$p_file_nomi = fopen("nomi.txt","r")) {
echo "Spiacente, non posso aprire il file nomi.txt";
echo "<BR>Si è verificato un errore, per favore avvisa l'amministratore";
exit;
}
#deve esistere un file dipartimenti.txt (contenente delle ifnormazioni)
if (!$p_file_dipartimenti = fopen("dipartimenti.txt","r")) {
echo "Spiacente, non posso aprire il file dipartimenti.txt";
echo "<BR>Si è verificato un errore, per favore avvisa l'amministratore";
exit;
}
$linee=file("nomi.txt");
echo "<BR><B>Nome impiegato:<B>";
echo "<SELECT NAME=nome >";
echo "<OPTION>-- Nome Impiegato --";
for ($ciclo=0; $ciclo < count($linee); $ciclo++)
{
echo "<OPTION>$linee[$ciclo]";
}
echo "</SELECT>";

# legge una linea dal file e la inserisce nel menu
$linee=file("dipartimenti.txt");
echo "<B>&nbsp;&nbsp;Dipartimento dell'impiegato:</B>";
echo "<SELECT NAME=dipartimento>";
echo "<OPTION>-- Dipartimento --";
for ($ciclo=0; $ciclo < count($linee); $ciclo++)
{
echo "<OPTION>$linee[$ciclo]";
}
echo "</SELECT>";

fclose($p_file_nomi);
fclose($p_file_dipartimenti);
?>

<?php
# nomination.php
if (( $nome == "-- Nome Impiegato --" ) || ( $dipartimento == "-- Dipartimento --" ) || ($commento == "" )) {
header ("Location: http://server/employee.php");
exit;
}
echo "<HTML>";
echo "<BODY>";

if (!$p_file = fopen("voti_impiegati.txt","w+")) {
echo "Spiacente, non posso aprire il file voti_impiegati.txt";
echo "<BR>Si è verificato un errore, per favore ritorna al <A HREF=\"employee.php\" >form</A> per votare";
}

fputs($p_file,"\n");
fputs($p_file,"Nome impiegato: $nome\n");
fputs($p_file,"Dipartimento impiegato: $dipartimento\n");
fputs($p_file,"Commenti : $commento\n");
fclose($p_file);

echo "Grazie per il tuo voto a $nome";
passthru("cat voti_impiegati.txt | /bin/mail web_admin");
?>
 

Scrittura di informazioni da un form a un file di testo

Form HTML Form PHP
Form.htm

<FORM METHOD=GET ACTION="controllo.php">

<BR>1° campo <INPUT TYPE="TEXT" NAME="primo_campo">
<BR>2° campo <INPUT TYPE="TEXT" NAME="secondo_campo">
<BR>3° campo <INPUT TYPE="TEXT" NAME="terzo_campo">
<BR>
<INPUT TYPE="SUBMIT" VALUE="Invia le informazioni!">
<INPUT TYPE="RESET" VALUE="Cancella!">

<?php
# controllo.php

echo "<HTML><BODY>";

if (!$p_file = fopen("customer_file.txt","a+")) {
echo "Spiacente, non posso aprire il file customer_file.txt";
echo "<BR>Si è verificato un errore, per favore ritorna al <A HREF=\" form.htm\" >form</A>";
}
if (( !$primo_campo ) || ( !$secondo_campo ) || ( !$terzo_campo)) {
echo "<BR>Devi riempire TUTTI i campi";
echo "<BR>Per favore, ritorna al <A HREF=\"form.htm\" >form</A>";
} else {
echo "Sto elaborando i nomi<BR>";
fputs($p_file,"\n");
fputs($p_file,"1° campo # 1: $primo_campo\n");
fputs($p_file,"2° campo # 2: $secondo_campo\n");
fputs($p_file,"3° campo # 3: $terzo_campo\n");
fclose($p_file);

echo "Ecco il contenuto del file...";
echo "<PRE>";
passthru("cat <percorso>/customer_file.txt");
echo "</PRE>";
echo "<BR>Ritorna al
<A HREF=\"form.htm\">form</A>";

}
?>

Recupero dati da un form

Form HTML Form PHP
SELEZIONE MULTIPLA
<SELECT NAME="giorno_settimana[]" Multiple>
<OPTION>Lunedì
<OPTION>Martedì
<OPTION>Mercoledì
<OPTION>Giovedì
<OPTION>Venerdì
<OPTION>Sabato
</SELECT>
echo "I giorni della settimana scelti sono:
if (sizeof($giorno_settimana) >="1") {
foreach (
$giorno_settimana as $valore) {
echo "$valore";
}
} else {
echo "non hai scelto"; {
#fine dell'if sull'esistenza dell'array
SELEZIONE SINGOLA
<SELECT NAME="giorno_settimana">
<OPTION>Lunedì
<OPTION>Martedì
<OPTION>Mercoledì
<OPTION>Giovedì
<OPTION>Venerdì
<OPTION>Sabato
</SELECT>
echo "Il giorno della settimana scelto è: $giorno_settimana
 
I pulsanti Radio sono questi:
Assegno <INPUT TYPE="RADIO" NAME="pagamento" VALUE="Assegno">
Carta di credito<INPUT TYPE="RADIO" NAME="pagamento" VALUE="Carta di credito">
Contanti <INPUT TYPE="RADIO" NAME="pagamento" VALUE="Contanti" CHECKED>
echo "Hai scelto $pagamento";
I pulsanti di controllo (check) sono questi:
<input type="checkbox" name="
pagamento" value="ON">Assegno</p>
<p><input type="checkbox" name="
pagamento" value="ON"> Check</p>
echo "Hai scelto $pagamento";
(Vedi sotto)

Recupero dei dati da un modulo
Il Php lavora spesso e voluntieri con i moduli Html; per questo motivo è molto importante vedere come recuperare i valori immessi dai visitatori nei form loro priposti.
Credo sia ben noto al lettore che i form Html possono inviare i dati con due metodi: il get (che genera una QueryString ed accoda i dati all'indirizzo fisico della pagina) ed il post (invio classico).
Si prenda come riferimento il seguente modulo:
<form method="post" action="form.php">
<input type="text" name="nome_campo">
<input type="submit" value="vai">
</form>
Vediamo un esempio di come recuperare i dati nel caso di un invio classico da un form col metodo post, al file form.php:
<?PHP
echo $HTTP_POST_VARS["nome_campo"];
?>
Se il form fosse stato inviato col metodo get, invece, avremo utilizzato il seguente comando:
<?PHP
echo $HTTP_GET_VARS["nome_campo"];
?>
 

Scelta multipla utilizzando le caselle di controllo in un modulo
Per ottenere la scelta utilizzando la casella di controllo, bisogna utilizzare IF. In parentesi ($a) è la variabile proveniente dalla pagina HTML:
if ($a)
echo "&nbsp;A<br>";
if ($b)
echo "&nbsp;B<br>";
if ($c)
echo "&nbsp;C<br>";
if ($d)
echo "&nbsp;D<br>";
if ($e)
echo "&nbsp;E<br>";
if ($f)
echo "&nbsp;F<br>";
if ($g)
echo "&nbsp;G<br>";

Leggere i contenuti di una cartella e creare il link ai files contenuti nella cartella stessa
<HTML>
<BODY>
<TABLE WIDTH=40% ALIGN=CENTER BORDER=3>
<TR><TH>Elenco dei files disponibili</TH></TR>
<?php
#'.' è la cartella corrente nella quale vi trovate
$cartella = opendir('.');
while ($file=readdir($cartella)) {
$file_array[] = $file; //[] sono due parentesi [ ]
sort ($file_array); //facciamo l'ordine alfabetico
}
foreach ($file_array as $file) {
if ($file == ".." || $file == "." || $file =="download.php") { //evitiamo che il file download.php sia visualizzato)
continue;
}
echo "<tr><td><center>";
echo "<a href=\"$file\">$file</a>";
echo "</center></td></tr>";
}
?>
</TABLE>
</BODY>
</HTML>

Includere nelle pagine PHP pagine esterne
Se noi utilizziamo sempre le stesse diciture per ogni sito (es. richiamo di database, pagine esterne personalizzate), è possibile richiamarle, inserendo nel codice le seguenti righe:
require ("connessione.php");
OPPURE
include ("connessione.php");
Ovviamente nel file connessione ci saranno le righe per il collegamento al database (ad esempio):
<?php
$connessione=mysql_pconnect("localhost","","");
if (!$connessione) {
echo "Impossibile collegarsi al server MySQL!";
exit;
}
$db=mysql_select_db("test_utenti",$connessione);
if (!$db) {
echo "Impossibile selezionare il database test_utenti";
exit;
}
?>

Collegamento ad un database
#collegamento al database con controllo dell'effettivo accesso
$connessione=mysql_connect("localhost","","");
if (!$connessione) {
echo "Impossibile collegarsi al server";
exit;
}

#seleziona il database (calendario) e controlla che effettivamente esista
$db=mysql_select_db("calendario",$connessione);
if (!db) {
echo "impossibile selezionare il db";
}

#inserisce dentro alla <table> (del db aperto - vedi sopra) i campi indicati tra (x,x,x,x,x,x,x) con i <values> (valori) provenienti dalle variabili (possono anche provenire da una pagina HTML). Inoltre, se la <table> lo prevede, è possibile aggiungere campi ulteriori come '$REMOTE_ADDR','$oggi','$orario' (oggi e orario devono essere variabili dichiarate precedentemente - vedi di seguito in questa pagina):
$sql="INSERT INTO <table> (DOM1, DOM2, DOM3, DOM4, IP, DATA, ORA)
VALUES ('$risposta1','$risposta2','$risposta3','$risposta4','$REMOTE_ADDR','$oggi','$orario')";

#CONTROLLA SE LA SCRITTURA E' AVVENUTA CORRETTAMENTE E SEGNALARE CON UN MESSAGGIO DI CORTESIA
if (!mysql_query($sql,$connessione)) {
echo "errore!";
exit;
} else {
echo "<b>LE VOSTRE RISPOSTE SONO STATE MEMORIZZATE CORRETTAMENTE. <BR>";
echo "GRAZIE PER LA COLLABORAZIONE</B>";
}

===================================
Il collegamento al server e a mysql

<?
php
$location = "localhost";
$username = "username";
$password = "password";
$database = "database";
$conn = mysql_connect("$location","$username","$password");

if (!$conn) die ("Could not connect MySQL");
mysql_select_db($database,$conn) or die ("Could not open database");
?>

Connessione e controllo ad un database ed inserimento dei dati
#collegamento al database (senza parentesi uncinate <>). Il mancato collegamento, fornisce esito negativo
$connessione=mysql_connect("<indirizzo IP del server>","<nome utente>","<password>");
if (!$connessione) {
echo "Impossibile collegarsi al server";
exit;
}

#seleziona il database
$db=mysql_select_db("<nome database>",$connessione);
if (!db) {
echo "impossibile selezionare il db";
}

$oggi=(date("d-m-Y"));
$ora=(date("G:i"));

#in questo esempio verranno salvati i dati contenuti in campo1, campo2, oltre all'indirizzo IP della macchina,
#del giorno e dell'ora in cui si effettua l'operazione di salvataggio.
$sql="INSERT INTO <nome tabella> (campo1, campo2, IP, oggi, ora)
VALUES ('$campo1','$campo2','$REMOTE_ADDR','$oggi','$ora')";

#CONTROLLA SE LA SCRITTURA E' AVVENUTA CORRETTAMENTE
if (!mysql_query($sql,$connessione)) {
echo "errore!";
exit;
} else {
#messaggio di cortesia
echo "<b>LE VOSTRE RISPOSTE SONO STATE MEMORIZZATE CORRETTAMENTE. <BR>";
echo "GRAZIE PER LA COLLABORAZIONE</B>";
}

#chiudiamo la connessione al server
mysql_close($connessione);

#fine delle informazioni

Ottenere l'indirizzo IP della macchina
In una pagina PHP basta inserire questa riga:
echo "Il tuo IP Address è: $REMOTE_ADDR<br>";

Inserire data e ora
In una pagina PHP basta inserire questa riga:
$oggi=(date("d-m-Y"));
$orario=(date("G:i"));
E richiamare il tutto con una voce di cortesia
echo "Oggi è il: $oggi e sono le $orario";

Creare un semplice contatore
Creare un file nominato contatore.php, oppure inserire in una pagina "php" il seguente codice:
<?php
$file = ("contatore.txt");
$visite = file($file);
$visite[0]++;
$fp = fopen($file , "w");
fputs($fp , "$visite[0]");
fclose($fp);
echo $visite[0];
?>
Creare un file chiamato contatore.txt e dare i permessi di scrittura (al momento dell'upload) 777 o 666

Generare file excel da PHP (Tabelline)
Sfruttiamo la possibilità di Excel di leggere file HTML per produrre tabelle scaricabili come foglio di lavoro.
Questo script consente di generare dinamicamente documenti Excel senza instanziare oggetti COM lato server. Il tutto è fatto con poche righe di PHP.
Lo script imposta il Mime Type su quello di Excel (application/vnd.ms-excel), sfruttando una caratteristica, presente già in Office 97, che consente a Word ed Excel di leggere senza problemi documenti HTML. Inoltre, impostando l'header Content-Disposition: inline; filename=FILENAME richiede al browser di scaricare il file anziché aprirlo al suo interno. In seguito genera una tabella HTML che verrà interpretata da Excel come un suo foglio di lavoro. Per semplicità generiamo una semplice tabella pitagorica, ma nulla impedisce di prelevare i dati da database o altre fonti.
Il file così generato e scaricato viene aperto correttamente sia da Excel che dallo spreadsheet di OpenOffice.
Ecco il codice:
<?php
$filename="sheet.xls";
header ("Content-Type: application/vnd.ms-excel");
header ("Content-Disposition: inline; filename=$filename");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang=it><head>
<title>Titolo</title></head>
<body>
<table border="1">
<?
for ($i=1;$i < 11; $i++)
{
echo "<tr>";
for ($j=1; $j<11;$j++)
{
$a = $i * $j;
echo "<td>$a</td>";
}
echo "</tr>";
}
?>
</table>
</body></html>

La data in PHP

Codice PHP

Risultato

<?
$data = date("d-m-Y");
$ore = date("H:i");
Print("La data è $data e sono le $ore");
?>

La data è il 14-09-2000 e sono le 15:10

·        a - "am" (mattino) o "pm" (pomeriggio)
·        A - "AM" (mattino) ou "PM" (pomeriggio)
·        d - Giorno del mese, su due cifre (eventualmente con uno zero) : "01" a "31"
·        D - Giorno della settimana, su tre lettere (e in inglese): per esempio "Fri" (per il Venerdì)
·        F - Mese, formato testuale, versione lunga; in inglese, i.e. "January" (per Gennaio)
·        h - Ora, nel formato 12h, "01" a "12"
·        H - Ora, nel formato 24h, "00" a "23"
·        g - Ora, nel formato 12h senza zero iniziale, "1" a "12"
·        G - Ora, nel formato 24h senza zero iniziale, "0" a "23"
·        i - Minuti; "00" a "59"
·        j - Giorno del mese senza zero iniziale: "1" à "31"
·        l - ('L' minuscola) - Giorno della settimana, testuale, versione lunga; in inglese, i.e. "Friday" (per Venerdì)
·        L - Booleano per sapere se l'anno è bisesistile ("1") o no ("0")
·        m - Mese; i.e. "01" à "12"
·        n - Mese senza lo zero iniziale; i.e. "1" à "12"
·        M - Mese, in 3 lettere (e in inglese) : i.e. "Jan" (per Gennaio)
·        s - Secondi; i.e. "00" a "59"
·        S - Suffisso ordinale di un nome

Inviare email da ambiente locale
Quando si sviluppano in locale degli script in PHP che devono inviare email, molto spesso il test in locale non funziona perchè PHP non riesce a trovare il server SMTP da utilizzare per la posta in uscita.
Per fare in modo che PHP utilizzi il server SMTP a nostra disposizione è sufficiente aprire con un editor di testi, il file di configurazione di PHP che si chiama php.ini, situato nella directory principale del proprio sistema operativo (directory WINDOWS per XP), individuare la stringa smtp e settarla con il proprio server SMTP preferito.
Per esempio: se utilizzate Libero.it impostate la riga nel seguente modo:
smtp = smtp.libero.it
In questo modo sarete in grado di testare anche in locale gli script PHP che inviano email...

Installazione di php5 e convivenza con php 4 [moduli di apache su windows] 
Per quanto i passi per l'installazione di php5 siamo molto simili a quelli del php4, immagino che molti di voi gradiranno un paio di linee guida sintetiche e già testate. 
In più potreste voler fare convivere il vostro caro e sicuro php4, con il nuovo e potenzialmente instabile e buggato php5 in modo da poter fare esperimenti con quest'ultimo ma poter ritornare tra le forti e sicure braccia di php4 in caso di problemi di qualsiasi natura. 
Questo propone la pillolina: 
1) Dei passi preliminari da compiere se volete far convivere php4 con php5. 
2) Installazione di php5 come modulo di Apache in pochi semplici passi. 
3) Aggiunta del supporto a mysql [che non è built-in come nella versione 4] 
La guida si riferisce alla RC2 di PHP5 per windows [testato su win xp con apache 1.3.29], rilasciata qualche giorno fa. Se saranno necessari aggiornamenti con le prossime relase provvederò 
Prerequisiti 
Ovviamente do per scontato che abbiate installato già un webserver apache della serie 1.3.x. 
Se non avete già installato Apache procuratevi l'ultima versione della serie 1.3.x ed installatela seguendo ad esempio la guida di freephp.it. 
La versione 2 di Apache risulta ancora troppo instabile nel supporto di PHP quindi ve la sconsiglio a meno che non abbiate voglia/bisogno di testarla 
Convivenza di php4 e php5 
Questa sezione si rivolge a chi, avendo già installato una versione di php4, volesse provare la 5 senza eliminare la versione 4, e avendo la possibilità di alternare facilmente le due versioni. 
Chi non avesse questa necessità può saltare questa parte e passare all'installazione di PHP5. 
I passi da compiere sono davvero pochi: 
1) Rinominare il proprio "httpd.conf" [il file di configurazione di apache che si trova appunto nella directory "conf" all'interno della directory di apache] come "httpd.conf.4"... in questo modo avremo una sorta di backup del file di configurazione di apache già configurato per php4. 
2) Nell'installare php4 avrete messo nella vostra directory "windows" o "winNT" un file "php.ini".. fate un backup anche di questo rinominandolo in "php.ini.4" 
3) Seguire le istruzioni per l'intallazione di php5, avendo però cura di installarlo in una directory diversa da quella di php4 [ad esempio se php4 si trovava in "C:/php", php5 potreste installarlo in "C:/php5" come ho fatto io] 
Una volta installato php5 avremo un "php.ini" e un "httpd.conf" configurati per PHP5, per passare al PHP4 basterà semplicemente: 
1) rinominare questi file in "php.ini.5" e "httpd.conf.5" per backupparli 
2) ripristinare le versioni per php 4 che avevamo precedentemente backuppato [quindi rinominare "httpd.conf.4" in "httpd.conf" e "php.ini.4" in "php.ini"] 
3) riavviare apache. 
Con questo gioco di semplice rinomina dei due file possiamo dunque passare da php4 a 5 e viceversa ogni volta che vogliamo con molta semplicità 
Dopo aver quindi backuppato i files passiamo ad installare php5 in un directory diversa da php4. 
Installazione di PHP5 come modulo di apache 1.3.x su windows 
Scaricate php5 da www.php.net [da qui scaricate la RC2 , ultima versione disponibile al momento], e scompattatela in una directory a scelta, ad esmepio in "C:/php5". 
Entrate nella directory di PHP5 appena creata, copiate il file "php.ini-recommended" nella directory di windows [generalmente "C:\windows" o "C:\winnt"] e rinominatelo in "php.ini". 
Editiamo il file con wordpad o qualsiasi altro editor per cambiare due impostazioni: 
1) Cercate con l'apposita funzione del vostro editor la direttiva "display error", ed impostatela su "On". Questo farà sì che gli errori vengano visualizzati in output sulla vostra pagina, esattamente come eravate abituati con php4. 
2) Adesso cercate la direttiva "log error", ed impostatela su "Off" a meno che non vogliate avere un log degli errori che però nella maggior parte dei casi sarà inutile. 
Altre direttive potete cambiarle in un secondo momento a seconda delle esigenze, a tale scopo consiglio una sempre utile lettura dei commenti inseriti all'interno del file php.ini e che ne spiegano appunto le direttive. 
Adesso andiamo nella directory "conf" contenuta all'interno della directory di apache, individuiamo il file httpd.conf ed editiamolo sempre con il ostro editor preferito [wordpad va benissimo ]. 
A questo punto ci sono due possibilità: 
Se l'httpd.conf risale ad una precedente installazione di apache con PHP4 bisogna fare due modifiche solamente: 
1) individuate la riga "#LoadModule unique_id_module modules/mod_unique_id.so" sotto la quale avrete probabilmente una cosa tipo "LoadModule php4_module C:/PHP/sapi/php4apache.dll" che si riferisce alla vecchia installazione di php4... cancellate questa riga e sostituitela con la seguente: 
LoadModule php5_module C:/PHP5/php5apache.dll 
dove a "C:/PHP5" sostituirete eventualmente il percorso della directory in cui avete scompattato i files di php5. 
2) Individuate la riga "AddModule mod_setenvif.c", subito sotto dovreste avere qualcosa come "AddModule mod_php4.c" che si riferisce anche in questo caso alla precedente installazione di php4.. quindi sostituitela con "AddModule mod_php4.c" 
Salvate e chiudete il file. 
Se invece avete appena installato apache e il vostro httpd.conf è "vergine" dovrete fare le seguenti modifiche: 
1) individuate la riga "#LoadModule unique_id_module modules/mod_unique_id.so" sotto la quale aggiungerete la seguente: 
LoadModule php5_module C:/PHP5/php5apache.dll 
dove a "C:/PHP5" sostituirete eventualmente il percorso della directory in cui avete scompattato i files di php5. 
2) Individuate la riga "AddModule mod_setenvif.c", subito sotto aggiungete 
"AddModule mod_php4.c" 
3) Individuate la riga "AddType application/x-tar .tgz" e subito sotto aggiungete: 
AddType application/x-httpd-php .php 
4) Individuate la riga "<IfModule mod_dir.c>", nella riga successiva troverete qualcosa come "DirectoryIndex index.html index.htm". Questa istruzione indica ad apache quali files cercare quando l'utente non esplicita il file richiesto, ma solo un path, e l'ordine in cui questi files vanno cercati. Sarebbe quindi buona norma avere la seguente riga: 
DirectoryIndex index.php index.html index.htm 
Salvate e chiudete il file. 
A questo punto avviando apache dovrebbe comparire qualcosa come "PHP/5.0.0RC2 running", e potrete sorridere perchè significherà che è andato tutto bene. 
Se invece vi viene riportato qualche errore rileggete un po'.. e se qualcosa non è chiaro chiedete. 
Aggiungere il suppporto a MySql 
PHP5 a questo punto funziona, ma non riuscirete ad usare MYSQl in quanto il supporto non è built-in come per PHP4. 
Se avete quindi necessità di usare MYSQL, sono necessari tre ulteriori passi: 
1) tornate nuovamente al file php.ini che avevamo lasciato nella directory di windows, editatelo, ed individuate la seguente riga che si riferisce all'estensione di mysql: 
;extension=php_mysql.dll 
per attivare l'estensione dovremo decommentare la riga, ovvero eliminare il punto e virgola iniziale. 
2) Questo non basta: dobbiamo anche impostare il percorso della directory delle estensioni, quindi cerchiamo la riga: 
extension_dir = "./" 
e modifichiamola in: 
extension_dir = "C:\php5\ext" 
dove a "C:\PHP5" sostituirete eventualmente il percorso della directory in cui avete scompattato i files di php5. 
3) Chiudiamo il php.ini, andiamo nella directory del PHP5, copiamo il file "libmysql.dll" nella directory di sistema ["system32" se l'avete, altrimenti "system"] sovrascrivendo il vecchio file con lo stesso nome che dovrebbe essere presente [penso sia installato dall'installazione di mysql.. quindi se non avete ancora installato mysql, fatelo, e successivamente ricordatevi di aggiornare la dll]. 
A questo punto avviate apache... e buon PHP5 
Vi prego di segnalare qualsiasi migloria o precuisazione riguardo la pillolina, tnx. 
Ottimo guido.. questa pillola cade proprio, come si sul dire "a fagiuolo". Proprio ieri sera ho installato php5 (con l'ultima versione di apache e l'ultima di mysql) su Windows Xp. 
Se permetti aggiungerei una cosa perchè ieri sera m'è capitato che, tentando di connettermi a mysql mi diceva "Errore non trovata libreria php_mysql.dll", nonostante avessi messo libmysql.dll nella cartella C:\windows\system32... 
Ebbene non so se è una procedura canonica e/o richiesta, ma ho dovuto copiare la php_mysql.dll nella cartella C:\windows e dopo è andato tutto liscio come l'olio. 

Installare come modulo PHP 4.3.2 su Windows 
Questa pillola non vuole assolutamente prendere il posto dell' articolo presente in http://freephp.html.it/ ben piu' dettagliato e approfondito, vuole solo essere un how-to, senza troppe pretese/spiegazioni, di come installare PHP 4.3.2 [la versione stabile piu' recente] su Apache 1.3.28 e su Apache 2.0.47 
Pertanto si suddividera' in 3 punti: 
1 - Passaggi comuni per Apache 1 e 2 
2 - Installazione su Apache 1.3.28 
3 - Installazione su Apache 2.0.47 

1 - Passaggi comuni per Apache 1 e 2 
Create una cartella di nome tmp nel disco principale del vostro computer [che sara' C:\] . 
Create, sempre in C:\, la cartella PHP [C:\PHP\]. Mi raccomando tutto in MAIUSCOLO. 
Scaricate la versione 4.3.2 da questo link o da questo. 
Scompattate il contenuto del file scaricato all' interno della cartella PHP [assicuratevi di averci messo il contenuto e non altre sottocartelle]. 
Per essere sicuri bastera' entrare in C:\PHP\ e vedere se ci sono i files e le varie cartelle e non un'altra sottocartella inutile contenente a sua volta il resto. 
Da questa cartella prendete il file php4ts.dll 
[andate su opzioni cartella, visualizzazione e togliete la spunta da "nascondi le estensioni per i file di tipo conosciuto" nel caso non riusciate a leggere .dll .txt o altro accodato ai vostri files] 
e copiatelo dentro la cartella system32 di windows [in caso di XP/Me/98SE] o winnt [in caso di windows 2000]. 
Ora ad essere sincero non ricordo se Me e 98 hanno la system 32, se non la trovate mettete il file dentro system. 
Tornando nella cartella C:\PHP\ rinominate il file php.ini-recommended in php.ini. 
Ora con un doppio click dovrebbe aprirsi col notepad o il vostro "lettore testo" di default. 
Questo non e' altro che il file di configurazione di PHP. 
Cercate in questo file appena copiato la stringa contenente display_errors e mettete on, sia quella che display_startup_errors. 
Cercate questa stringa ; Windows: "\path1;\path2" e li sotto decommentate [decommentare = cancellare il punto e virgola davanti] e mettete in maiuscolo il nome della cartella PHP [include_path = ".;c:\PHP\includes"]. 
Ancora sotto troverete la scritta extension_dir , mettete tra virgolette quanto segue c:\PHP\extensions. 
Decommentate piu' sotto la riga per upload_tmp_dir se volete testare uploads in locale e indicate tra virgolette la cartella desiderata. 
Ora cercate piu' sotto la serie di extensions e decommentate quanto segue:
extension=php_bz2.dll 
extension=php_cpdf.dll 
extension=php_crack.dll 
;extension=php_curl.dll 
extension=php_db.dll 
extension=php_dba.dll 
extension=php_dbase.dll 
;extension=php_dbx.dll 
;extension=php_domxml.dll 
extension=php_exif.dll 
;extension=php_fdf.dll 
extension=php_filepro.dll 
extension=php_gd2.dll 
;extension=php_gettext.dll 
extension=php_hyperwave.dll 
;extension=php_iconv.dll 
;extension=php_ifx.dll 
;extension=php_iisfunc.dll 
extension=php_imap.dll 
;extension=php_interbase.dll 
extension=php_java.dll 
;extension=php_ldap.dll 
;extension=php_mbstring.dll 
;extension=php_mcrypt.dll 
;extension=php_mhash.dll 
extension=php_mime_magic.dll 
extension=php_ming.dll 
;extension=php_mssql.dll 
;extension=php_msql.dll 
;extension=php_oci8.dll 
;extension=php_openssl.dll 
;extension=php_oracle.dll 
;extension=php_pdf.dll 
;extension=php_pgsql.dll 
;extension=php_printer.dll 
;extension=php_shmop.dll 
;extension=php_snmp.dll 
extension=php_sockets.dll 
;extension=php_sybase_ct.dll 
;extension=php_w32api.dll 
;extension=php_xmlrpc.dll 
;extension=php_xslt.dll 
;extension=php_yaz.dll 
extension=php_zip.dll 
[ un copia e incola sarebbe il suo ... ] 
Ora salvate il file e spostatelo all' interno della cartella windows o winnt ma non chiudete la cartella perche' dobbiamo ancora fare un' ultima modifica a seconda della versione di Apache. 

2 - Installazione su Apache 1.3.28 
Perche' scegliere la versione 1 ??? 
Perche' e' la piu' stabile e la piu' testata, assicurandovi quindi meno problemi e maggior sicurezza. 
Scaricate la versione 1.3.28 da questo link. 
Lanciate con un doppio click l' installazione. 
Clickate su Next 
Clickate su I accept (leggetevi tutto ovviamente prima di accettare ... :quipy: ] e poi su Next. 
Leggete tutto e Next di nuovo. 
Scrivete localhost sul campo Network domain. 
miopc sul campo sottostante e 
miamail@casa.it nel terzo campo. 
Lasciate Run as a service for All Users - Recommended e clickate su next. 
Lasciate Complete e clickate su next. 
Vi consiglio vivamente di lasciare quella cartella per l' installazione, quindi next. 
Ora clickate su install ... ora aspettate ... gia' fatto ?? miii ke skeggia di pc !!!! [ LOL© (daniele©) ] 
Clickate su finish. 
Ora aprite internet explorer o il browser che volete e scrivete come indirizzo http://localhost/ [se clickate qui dovrebbe essere la stessa cosa]. 
Provate anche http://miopc/ , sara' la stessa identica pagina e per entrambi i casi ci sara' scritto: 
Funziona! Il server Web Apache e' stato installato su questo sito Web!. 
In caso contrario siete fagiani o lo e' il vostro PC, buttate via tutto e andate a giocare con il cerchio in giardino [oppure rileggete e fate il secondo tentativo]. 
Ora andate su: 
Start -> Programmi -> Apache HTTP Server -> Configure Apache Server -> Edit the Apache httpd.conf Configuration file 
Se vi chiede con quale programma volete aprirlo, usate notepad e tanti saluti. 
Cercate questa riga 
LoadModule foo_module modules/mod_foo.so 
e li sotto troverete una serie di moduli con un # davanti, quindi commentati. 
Dopo l'ultimo, aggiungete questa riga ovviamente senza il # davanti. 
LoadModule php4_module C:/PHP/sapi/php4apache.dll 
poco sotto c'e' una riga con ClearModuleList, scorrette la lista di AddModule fino all' ultimo e aggiungete quanto segue: 
AddModule mod_php4.c 
Ora cercate la linea contenente AddType application/x-tar .tgz e aggiungete subito sotto quanto segue: 
AddType application/x-httpd-php .php 
Ora cercate la linea contenente questO : <IfModule mod_dir.c> 
e li sotto sostituite la DirectoryIndex con questa: 
DirectoryIndex index.php index.htm index.html 
Aggiungete le estensioni che volete, sara' l'ordine di riconoscimento. 
Salvate e chiudete questo file. 
Ora tornate sul PHP.INI, che se non sbaglio dovrebbe essere dentro la cartella windows o winnt e cercate la linea con scritto: 
doc_root = 
e aggiungete dopo l'uguale, quanto segue: 
"C:\Programmi\Apache Group\Apache\htdocs" 
Salvate e chiudete. 
Ora tornate su 
Start -> Programmi -> Apache HTTP Server -> Control Apache Server -> Restart 
Se tutto e' andato bene non dovrebbe dare errori e la finestra dos dovrebbe andar via in pochi secondi. 
Ora andate nella cartella htdocs all' interno di C:/Programmi/Apache Group/Apache/ e create un nuovo file che chiamerete info.php 
Apritelo con notepad se non avete ancora un editor per i vostri files .php e scrivete 
<?php phpinfo(); ?> 
salvate e chiudete. 
Ora andate al seguente indirizzo: 
http://localhost/info.php 
e se vedete una schermata chilometrica, significa che e' tutto OK, avete installato. 

3 - Installazione su Apache 2.0.47 
Perche' scegliere la versione 2 ??? 
Perche' siete pionieri e volete essere sempre aggiornati all' ultima velocissima release !!! 
Scaricate la versione 2.0.47 da questo link. 
Lanciare il file di installazione di Apache2 con un doppio click. 
Premere next, scrivere localhost nel primo spazio, il nome del PC nel secondo e il vostro indirizzo email nel terzo. 
Scegliere se farlo funzionare per tutti gli utenti [maledettamente consigliato] o solo per questo. 
Clickare next, next e ancora next, fino al tasto finish [isi no ???]. 
Lanciare IE o il browser preferito e scrivere http://localhost/ [ puoi anche clickare qui ] 
oppure http://nomesceltoperilpc/ 
Se leggete qualcosa, significa che e' tutto OK, altrimenti siete fagiani o lo e' il vostro PC, buttate via tutto e andate a giocare con il cerchio in giardino [oppure rileggete e fate il secondo tentativo]. 
Andate su: 
Start - Programmi - Apache HTTP Server - Configure Apache - Edit Apache HTTPD. 
Se vi chiede con che programma prirlo scegliete il notepad, va benissimo. 
Una volta aperto cerchiamo questa riga LoadModule foo_module modules/mod_foo.so 
Subito sotto noteremo una serie di moduli, andiamo all' ultimo di questa serie ed aggiungiamo: 
LoadModule php4_module C:/PHP/sapi/php4apache2.dll 
Cerchiamo poi la riga contenente 
AddType allows you to add to or override the MIME ed aggiungiamo subito sotto AddType image/x-icon .ico quanto segue: 
AddType application/x-httpd-php .php 
Ora cerchiamo piu' su la seguente voce DirectoryIndex e modifichiamo quella linea in questo modo: 
DirectoryIndex index.php index.htm index.html 
Aggiungete le estensioni che volete, sara' l'ordine di riconoscimento. 
Salvate e chiudete questo file. 
Ora tornate sul PHP.INI, che se non sbaglio dovrebbe essere dentro la cartella windows o winnt e cercate la linea con scritto: 
doc_root = 
e aggiungete dopo l'uguale, quanto segue: 
"C:\Programmi\Apache Group\Apache2\htdocs" 
Salvate e chiudete. 
Ora andate nella cartella htdocs all' interno di C:/Programmi/Apache Group/Apache2/ e create un nuovo file che chiamerete info.php 
Apritelo con notepad se non avete ancora un editor per i vostri files .php e scrivete 
<?php phpinfo(); ?> 
salvate e chiudete. 
Riavviate il vostro PC, non necessario ma spesso utile. 
Ora andate al seguente indirizzo: 
http://localhost/info.php 
e se vedete una schermata chilometrica, significa che e' tutto OK, avete installato. 
Spero non ci siano errori o dimenticanze e che vi sia stata utile  

Installare PHP 5.0.0b 
Scaricate la 5.0.0b
Seguire la procedura identica per la 4.3.2 ma decommentare solo queste extensions nel PHP.INI 
extension=php_bz2.dll 
extension=php_cpdf.dll 
extension=php_crack.dll 
;extension=php_curl.dll 
extension=php_db.dll 
extension=php_dba.dll 
extension=php_dbase.dll 
;extension=php_dbx.dll 
;extension=php_domxml.dll 
extension=php_exif.dll 
;extension=php_fdf.dll 
;extension=php_filepro.dll 
extension=php_gd2.dll 
;extension=php_gettext.dll 
;extension=php_hyperwave.dll 
;extension=php_iconv.dll 
;extension=php_ifx.dll 
;extension=php_iisfunc.dll 
extension=php_imap.dll 
;extension=php_interbase.dll 
;extension=php_java.dll 
;extension=php_ldap.dll 
;extension=php_mbstring.dll 
;extension=php_mcrypt.dll 
;extension=php_mhash.dll 
extension=php_mime_magic.dll 
extension=php_ming.dll 
;extension=php_mssql.dll 
;extension=php_msql.dll 
;extension=php_oci8.dll 
;extension=php_openssl.dll 
;extension=php_oracle.dll 
;extension=php_pdf.dll 
;extension=php_pgsql.dll 
;extension=php_printer.dll 
;extension=php_shmop.dll 
;extension=php_snmp.dll 
extension=php_sockets.dll 
;extension=php_sybase_ct.dll 
;extension=php_w32api.dll 
;extension=php_xmlrpc.dll 
;extension=php_xslt.dll 
;extension=php_yaz.dll 
;extension=php_zip.dll 
Copiare oltre la solita php4ts.dll anche l' iconv.dll nella system32. 
APACHE 1 e 2 
A seconda della versione di Apache scrivere 
LoadModule php5_module C:/PHP/sapi/php4apache2.dll 
// per Apache2 

LoadModule php5_module C:/PHP/sapi/php4apache.dll 
// per Apache 1, aggiungere in questo caso anche 
AddModule mod_php5.c 
per il resto e' tutto uguale, installare a vostro rischio e pericolo. 
Per la versione compilata con MySQL, viso che in questa beta e' stato tolto il built-in dello stesso, vedere questo link 
http://forum.html.it/forum/showthre...&highlight=PHP5 
gentilmente offerto dall' utonto .. ehm ..utanto . ehm utente pixer 
Io usavo easyphp, oggi ho deciso di installare io php... non ho nessun problema... solo il fatto che mi autoapre solo le pagine index.php... nella wwwroot ... tutto qui.
io ho la htdocs, mi apre le pagine li e in tutte le sottocartelle della htdocs, perche' e' quella la directory di default o la directory base, la htdocs

Installing PHP for Apache as module

Now that version 4.1 introduces a safer sapi module, we recommend 
that you configure PHP as a module in Apache. 
To accomplish this, you have to load the php4apache.dll in your 
Apache httpd.conf. 
!! NOTE !! 
Whereever you load php4apache.dll from, php4apache.dll also 
needs the php4ts.dll also included in the PHP4 distribution. 
php4apache.dll depends on php4ts.dll which is loaded as soon as 
Apache loads php4apache.dll. If php4ts.dll can't be found, you 
usually get an error like (also see the "Problems?" section at 
the end of the file): 
Cannot load c:/php/sapi/php4apache.dll into server 
Mi sembra abbastanza importante.... 

So where does php4ts.dll has to be to be properly loaded ? 
php4ts.dll is searched in the following order: 
1) in the directory where apache.exe is start from 
2) in the directory where php4apache.dll is loaded from 
3) in your %SYSTEMROOT%\System32, %SYSTEMROOT%\system and 
%SYSTEMROOT% directory. 
Note: %SYSTEMROOT%\System32 only applies to Windows NT/2000/XP) 
4) in your whole %PATH% 
Note: What is %SYSTEMROOT% ? Depending on your Windows 
installation this may be for example c:\winnt or C:\windows 
Usually you would just copy it over to %SYSTEMROOT%\System32. 
But if you want to have multiple PHP installations (for 
whatever reason) this is a bad idea. For this circumstance the 
safest thing is to let php4ts.dll reside in the same directory 
where php4apache.dll is loaded from (see point 2 above).
direi che la metti in system32 la php4ts.dll
Ho istallato tutto. php funziona correttamente ma se c'è un errore nello script mi visualizza una pagina bianca e non mi descrive l'errore. 
cosa ho sbagliato?
devi avere le estensioni dei files visibili, senno' il .dll non lo vedi ( cmq icona con le rotelle ... ) 
php.ini devi rinominare il recommended e metterlo nella cartella di windows, in quella PHP puoi anche non lasciarla, li non serve.

Configurazione di PHP 4.3.2 in Apache 2.0.46 per Windows
da http://naufraghi.free.fr/php/apache2_e_php.php
Questo è un mini corso per l'installazione e la configurazione di PHP 4.3.2 (come filtro) su macchine equipaggiate con Windows 9x/NT/ME/2000/XP e il web server Apache 2.
Il supporto per Apache 2 è non è stabile da molto ed è supportato solo dalle ultime release di PHP, che potete scaricare qua PHP 4.3.2 (mirror italiano).
Installazione PHP 4.3.2.
Dopo esserti procurato una copia della distribuzione di PHP (ad esempio su it.php.net, mirror italiano) devi scompattarla in una directory di tua scelta, ad esempio "C:\PHP\" (devi scaricare i binari per win32, e fra i due il pacchetto più grosso, circa 6 Mb, quello completo di tutti i moduli).
Configurazione di PHP.
Individua il file "php.ini-dist" e copialo col nome "php.ini" nella directory nella quale è installato il tuo sistema operativo (solitamente "C:\WINDOWS" per Windows 9x oppure "C:\WINNT" o "C:\WINNT40" per Windows NT/2000/XP)
Modifica il file "php.ini" (ad esempio usando il notepad di Windows) effettuando le seguenti operazioni:

Configurazione di Apache Web Server
Per informazioni più dettagliate sull'installazione di Apache controlla questa pagina: Installazione di Apache 2
Scarica Apache, ho provato la versione la 2.0.46 funziona proprio bene, voi scaricate comunque l'ultima disponibile.
Una volta installato Apache (supponiamo in "C:\Programmi\Apache Group\Apache2\"):

Vi ricordo che dalla versione 4.1 di PHP le variabili ricevute con GET e POST non diventano più globali.
Cioè se chiamate "http://localhost/prova.php?var=12", non avrete una variabile $var con valore 12, ma avrete una voce var nel dizionario _REQUEST (scorrete fino in fondo alla pagine per vederlo).
Per maggiori informazioni su questo cambiamento leggete qua: Release notes PHP 4.1

Come si installa Php4
L'installazione su Apache per Win9x del nuovo PHP 4 è molto simile alla precedente. Infatti ci sono delle piccole differenze al file di configurazione di Apache rispetto alla versione precedente. Per questo di base partiremo da quella seconda lezione in cui vi ho spiegato come installare il PHP 3, spiegandovi le differenze e mettendo a confronto le operazioni.
Le prime operazioni, quelle che riguardava il file php3.ini (ricordate che adesso quel file è cambiato e si chiama solo php.ini), la sua configurazione, il caricamento dei moduli e la scompattazione della distribuzione in formato binario è sostanzialmente la stessa.
Ma c'è da far un appunto. Ho notato che tutti i moduli sono caricati di default anche se sono commentati. Infatti, cercando di attivare il modulo mySQL, ho decommentato quella riga e mi sono ritrovato con l'engine piantato. Ho ricommentato quella riga e tutto ha funzionato. Infatti anche nella pagina delle info del server (ricordate: ) ho trovato che il supporto mySQL era attivo, nonstante la riga che caricasse il modulo fosse commentata... vabbo', poco male!!
Se ricordate nella precedente installazione vi ho fatto settare i parametri "extension_dir" e "doc_root" nel file php3.ini. Questa volta vi basterà settare solo nel file php.ini il parametro "extension_dir"... e ricordate quello che vi ho detto sui moduli!!
Ora tocca alla parte differente rispetto alla versione precedente (ho fatto la rima!!). Nel file httpd.conf di Apache le righe da inserire sono leggermente differenti.
Nella versione precedente abbiamo aggiunto questo:
ScriptAlias /php3/ "c:/path-to-php-dir/"
AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3 .phtml
Action application/x-httpd-php3 "/php3/php.exe"
Ora dobbiamo aggiungere questo (o basterà rimpiazzarlo se si sta facendo un upgrade):
ScriptAlias /php4/ "c:/php4/"
AddType application/x-httpd-php .php3 .php
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php-source .phps
Action application/x-httpd-php "/php4/php.exe"
Ora se riprovate a far ripartire il server tutto dovrebbe non funzionare... perché?
Perché c'è una differenza molto importante con la versione precedente che non fa funzionare niente se non è svolta a dovere. Infatti ci sono due *.dll da mettere nella odiata cartella c:\windows\system, altrimenti niente parte. I file sono "Msvcrt.dll" e "php4ts.dll", che sono all'interno del pacchetto zip che avete scompattato.
Adesso, riavviando il web server tutto dovrebbe partire. Testate con la solita pagina .
Tutto ok? Allora, è stato facile? Come sempre!!
Il supporto Zend
Come molti di voi avranno notato da quando è sorto lo sviluppo del nuovo PHP 4 una nuova casa produttrice di software sta accompagnando questo sviluppo. E' la Zend. Questa società si è fatta carica della completa riscrittura dell'engine che adesso utilizza un diverso sistema di lavoro che velocizza di molto la restituzione delle pagine al client. Un enorme passo avanti per il PHP che avevo proprio il suo punto debole nella velocità.
Ma non solo, Zend lavora ad altri software che accompagnano l'engine PHP. Ma per questo vi invita a visitaro il loro sito: http://www.zend.com/. Vorrei solo soffermarmi un attimo su uno solo dei componenti aggiuntivi del nuovo PHP. E' lo Zend Optimizer. Installando questo software sul mio engine ho visto un miglioramento sul già più che ottimo rendimento dell'engine senza accelleratore.
In due righe vi dico come farlo funzionare anche sul vostro engine. Andate al sito della Zend, scaricate lo Zend Optimizer (ricordate che ci sono delle versioni precise per ogni versione del PHP 4) che è gratis e scompattatelo in una cartella a vostra scelta (io ho scelto c:\php4\zend ... giusto per non riempire la root dell'hard disk con troppa roba!!). A questo punto prendete questo codice:
zend_optimizer.optimization_level=7
zend_extension_ts="C:\php4\Zend\ZendOptimizer.dll"
ed inseritelo nel file php.ini... e siete a cavallo!! Non dovete fare più niente... è già tutto ok! Il miglioramento in termini di velocità è sensibile e si nota ad occhio! Provare per credere!!

User Authentication from a MySQL database
There are many ways to go about authenticating a user for your site, some are more secure than others. The one that will be discussed here is doing the authentication from a MySQL database.
To begin with, we will help you create the database that we will use to authenticate off of. Keep in mind, this is a very simple tutorial and there are many other ways for you to do this. Obviously, you'll need MySQL up and running on your machine and know a bit about how to use it. If you don't know how to use MySQL yet, poke around on the net and look for an introduction. I'm sure there is one somewhere.
So, now that we have it up and running and ready to go, get to the mysql> prompt, get into the databse that you want to use (use <database>) and type in the following:

CREATE TABLE user (
name VARCHAR (20),
password VARCHAR (20),
ID INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (ID));

This will create a table with a name field for the username and a password field, well, for the password. Right now, we will not worry with encrypting the password or anything. It will just be plain text in there, viewable to anyone that can view the database. You can change this later very easily if you want, just encrypt it somehow.
Now, on to more important matters - how do I get the user's input? Easy. Just whip up a little form that will do the work for you. Here's a sample example for you: (this one includes a table around the form to make it look nice)

<form method=post action="<?echo $PHP_SELF?>">
<table cellpadding=2 cellspacing=0 border=0>
<td>Username:</td><td><input type="text" name="username" size=10></td><tr>
<td>Password:</td><td><input type="password" name="password" size=10></td><tr>
<td>&nbsp;</td><td><input type="submit" name="submit" value="Log In"></td>
</table></form>

This form has spots for a username and a password with text boxes for both of them. The last form item is the "submit" button. This allows the user to send off the information when they have completed the form. Now, you'll notice that not only does that button have a name of "submit" but that the form also references the same page with the <?echo $PHP_SELF ?>. This allows you to do the authentication on the same page as the form, reducing the number of pages required on the site.
Next, we come to the actual script for the authentication. It's relatively simple, especially if you have any experience with pulling information from a MySQL database.

Here's some sample code for you to work with:
if ($submit) {
$db=mysql_connect("localhost","user") or die ("cant connect");
mysql_select_db("database",$db) or die ("cant change");
$result=mysql_query("select * from user where name='$username'",$db) or die ("cant do it");
while ($row=mysql_fetch_array($result)) {
if ($row["password"]==$password) {
printf("Successfully Logged In!<a href="default.php?"'>Click Here</a>");
}
}
}
Now, let's take a look at this script. The first few lines are what you use to tell the PHP what connection, database and table to look in. The first line makes the connection to the MySQL database and assigns that connection to $db. The next line chooses the database on the server using that connection. And the third line is the part that actually does the query. It looks for all of the records that have the value for $username in their "name" field from the form.
The next section takes those results and checks them against the user input. It gets the "password" field for the record selected and checks it against the user input. If they match, the link will take them to a valid logged in page.
It's that easy! I hope that this tutorial has provided you with a bit of an idea on how to create a user validation form, and again, I know that it is not the most comprehensive, but it is simply an introduction to the idea behind authenticating from a database.

Autenticazione utenti con MySQL (da "pagine web dinamiche") - Scarica qui la demo 
Creare un database UTENTI con la seguente tabella: login (10 caratteri), password (10 caratteri) ed eventualmente un ID (contatore)
La registrazione avviene con una normalissima pagine web (html/php)

<FORM METHOD="POST" ACTION="aggiungi.php">
<B>Inserisce un nome utente</B><BR>
<INPUT TYPE=TEXT NAME="login"><BR>
<B>Inserisci una password</B><BR>
<INPUT TYPE=PASSWORD NAME="password"><BR>
<B>Ripeti la password</B><BR>
<INPUT TYPE=PASSWORD NAME="password2"><BR>

RICHIAMIAMO OVVIAMENTE IL FILE AGGIUNGI.PHP
<?php
*** EFFETTUARE UN COLLEGAMENTO AL PROPRIO SERVER MYSQL ***

echo "<CENTER><B>Registrazione Utente</B><CENTER>";
$errore=false;
$errore_password=false;

#controlliamo che i campi login, password, password2 siano stati riempiti e che password e password2 NON siano differenti
if (( $login == "" ) || ( $password == "" ) || ( $password2 == "" ) ) {
$errore=true;
}
if ( $password != $password2 ) {
$errore_password=true;
}
if ($errore) {
echo "<BR>Devi compilare tutti i campi";
}
if ($errore_password) {
echo "<BR>Le password inserite devono corrispondere";
}
if (($errore) || ($errore_password)) {
echo "<BR>Torna al modulo di<A HREF=\"aggiungi.php\"> registrazione</A>";
exit;
}
# Convalida OK
$sql="INSERT INTO utenti (login,password) VALUES ('$login','$password')";
$sql2="SELECT * FROM utenti WHERE login='$login' AND password='$password'";

# verifica l'esistenza di duplicati nella tabella utenti
$risultati_mysql=mysql_query($sql2,$connessione);
# sopprime gli errori con @
$num_righe=@mysql_num_rows($risultati_mysql);
if ( $num_righe != 0 ) {
echo "<BR>Questo nome utente è già in uso, scegline un altro. <A HREF=\"aggiungi.php\"> Indietro</A>";
exit;
}

# Se non trova dei duplicati inserisce login/password
if (!mysql_query($sql,$connessione)) {
echo "Errore, impossibile inserire il record... Controlla MySQL";
echo "<BR><A HREF=\"register.php\"> Indietro</A>";
exit;
} else {
# inserimento OK, informa l'utente
echo "Tabella aggiornata [".mysql_affected_rows()."] record aggiunti<BR>";
echo "Benvenuto... Prendi nota delle informazioni che ti riguardano:<BR>";
echo "Nome utente:<B>$login</B> Password:<B>$password</B>";
echo "<BR>Vai alla pagina di accesso per gli <A HREF=\"loginpage.php\"> utenti registrati</A>";
}
#chiudiamo la connessione
mysql_close($connessione);
?>

PAGINA DI LOGIN
<?php
*** EFFETTUARE UN COLLEGAMENTO AL PROPRIO SERVER MYSQL ***

$valido=false;
# l'utente ha inserito qualcosa
if (isset($PHP_AUTH_USER) && isset($PHP_AUTH_PW)) {
$sql="SELECT * FROM utenti WHERE login='$PHP_AUTH_USER' AND password='$PHP_AUTH_PW'";

# esegue la query
$risultati_mysql=mysql_query($sql,$connessione);
# elimina gli errori con @
$num_righe=@mysql_num_rows($risultati_mysql);
if ( $num_righe != 0 ) {
$valido=true;
}
} # if isset

if (!$valido) {
header("WWW-Authenticate: Basic realm=\"Ehi! Cartella Riservata\"");
header("HTTP/1.0 401 Unauthorised");
echo "Autorizzazione Richiesta";
exit;
} else {
# OK convalidato
echo "<B>Benvenuto </B>";
echo "<BR>Vai nell'area dedicata agli <A HREF=\"members.php\"> utenti registrati</A>";
}
mysql_close($connessione);
?>

MEMBERS.PHP
<?php
# members.php
if (!isset($PHP_AUTH_USER) && ! isset($PHP_AUTH_PW)) {
header("Location: login.php");
}
?>
#si inizia con un normalissimo documento HTML
<HTML>
<BODY>
<B> Ecco le novità...</B>
Tantissime informazioni riservate da offrire ai soli utenti registrati
</BODY>
</HTML>


The Mail() Function

The purpose of this little tutorial is to tell you all about a spiffy little function. The mail() function is extremely useful when you want to provide that little extra something to your website's users. Why just have a "Thank you generic form" once they sign up when you could have a ultra-spiffy, customized email sent directly to their inbox. There are tons of other possibilities that this, but I'm only going to give you a general overview of the function and how you can use it effectively.
So, let's get started with a few little preliminary things. First off, to be able to use this command fully, you need to have a program such as sendmail or the like running on your machine. If you don't have a default mailer, then your messages will not be sent. Most hosting services provide this as a part of their setup, so hopefully you will not have much trouble with this part.
Another thing to consider is where the messages are coming from. For the most part, they will look like they are coming from some unknown address. For example, when I send an email from my webhosting provider, it looks like it comes from enygma@web5.webpipe.net. Now, obviously, I want it to come from enygma@phpdeveloper.org. Now, unless you put a little thing in the headers section of the mail() function, then it will still look like it's coming from the other, unwanted address. I'll show you where to put this later on.
So, now that you've taken these things into consideration, we'll get started with the actual function.
Here's the syntax:

bool mail (string to, string subject, string message [, string additional_headers])

Now, let's break this down. First we have the fact that this is a boolean function. This means that we can use the value of it (once it's done trying) to tell whether or not the message was sent. (This is pretty useful in itself). Next, the "string to" part is where you put who you want the email to go to (duh). This can even be a list separated by a comma. The "string subject" part is self explanitory, and the "string message" part is too. That last part is a bit tricky, and also optional. You can stop with just the message part, but if you want to add in any cool little header tricks, that last section is where they go. Right here is, for example, where you can tell the emailer to make it seem as if the message came from a certain email account. In this example:

mail("nobody@aol.com", "the subject", $message, "From: webmaster@$SERVER_NAMEnReply-To: webmaster@$SERVER_NAME);

you can see how you can place multiple
things in the "additional_headers" section. This specific line tells the email program to send an email to "nobody@aol.com" with the subject "the subject" and containing the message of whatever the value of $message is. Then, when it hits the header stuff, it tells it to make it look like it's coming from "webmaster@$SERVER_NAME" where $SERVER_NAME is a variable that contains the machine's name. The second part makes doubly sure that the email client knows where to send the email back to. It specifies "webmaster@$SERVER_NAME" again for the "reply to" address. There are tons of different things that you can use there to enhance your emails, but I'm not going to go into detail here.
Now, let me show you a few examples just to get you started and then, you can explore from there. First off, here's a nice simple one:

mail("foo@bar.com", "My Subject", "Line 1nLine 2nLine 3");

This just sends an email with the subject "My Subject" to foo@bar.com. The text of the message will read:
Line 1
Line 2
Line 3
The reason that those are on different lines is the "n" in the message portion of the function. This allows for much more flexibility with the command. You're not just restricted to a single line of an email (That would not be fun).
Now, we'll use our example from above for the more complicated command:

mail("nobody@aol.com, foo@bar.com", "the subject", $message, "From: webmaster@$SERVER_NAMEnReply-To: webmaster@$SERVER_NAME);

This time, we have more than once person to mail it to. This is done with the comma list like I mentioned before. The subject part is the same. And one of the more fun things that you can do, since this is a PHP function after all, is combine the regular text with variables and treat them the same way. What this means is that you can customize the email for the person/people that you are sending it too without having to make a "form letter" that will fit everyone.
So, there you have it. A brief introduction to the mail() command. I hope that this helps and that there will be some usefulness in all of this confusion.
I also dug up a handly reference for those pesky email headers just in case you want to figure out which ones you really need. http://www.lyris.com/help/EmailHeaders.html

Random Image with a Database
This tutorial will show you a sample of how to generate a random number and how to use that number to get a random item from a list. This example uses a MySQL database to store the image names and URLs.
First off, we need to set things up. To get the database ready for input, we have to create it. So, fire up your favorite way to do it and make the database.rn<p>rn<hr>rnmysqladmin create images (or something similar).
Now, obviously, if you wanted to integrate this into a larger site, you can just make another table inside the other database. Then, we move on to the table that needs to contain the information. Get into the database (using the mysql command line or your tool of choice) and make a database that is as follows:

CREATE table images(
filename VARCHAR(30),
url VARCHAR(50),
ID INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(ID)
);

This sets up the slots for the name of the image file, the url that it will lead to and, of course, our trusty ID field just in case.Now, on to the fun part, the actual PHP script that makes the random number and selects a random images from out database for us.
Here's the code, I'll explain it afterwards:

<?
db=mysql_connect("localhost","nomeutente","password");
mysql_select_db("images",$db);
$result=mysql_query("select * from images");
$row=mysql_num_rows($result);
srand((double)microtime()*1000000);
$random=rand(1,$row);
$imagenum=mysql_query("select * from images where ID=$random");
while ($image=mysql_fetch_array($imagenum)) {
printf("<a href='$image[2]'><img src='$image[0]' border=0></a>");
}
?>

First off, we just go and get all of the info from the database and count the number of lines in it. This provides the top number to our random number. Otherwise, we could get a random number of "30" when the number of entries in the database is only 10. Then where would we be? The first four lines take care of counting the rows and assigning that number to the variable $row.
Next, we move on to the randomness. The next two lines do all of the work for you. The "srand" line uses the current time as a seed for the randomness, the theory being that since the number is new each time, that you don't have to worry about it being the same as the last one (That's the theory anyway). The next line actually generates that random number using the "rand" function with the barriers defined inside the (). In this case, from 1 to the value of $row. It uses the seed from the srand function to make sure that the number in $random is different. Now, hopefully, this number is different each time, but not always. I mean, if you only have 4 or 5 entries in your database, the chances are more likely that the same ones will be selected.
Anyway, the lines after that query the database once again and select a line based on that random number and the ID field (now, aren't you glad we put that in?). Then, it goes into the loop and prints the HTML code for the image and a link around it. That's all! Pretty easy, eh? I hope so.

Test installazione PHP (PHPINFO)

Una volta installato il modulo per il linguaggio PHP su un Web Server è possibile testarne il funzionamento scrivendo una semplice pagina web.
La pagina da creare è composta da un file con estensione .php, per esempio phpinfo.php, da inserire nella DocumentRoot del Web Server, la quale deve contenere al suo interno la chiamata a phpinfo(). Questa funzione restituisce in output tutta una serie di valori riguardanti l'installazione del motore PHP sul proprio server. Informazioni che vanno dai parametri di compilazione, alle variabili d'ambiente ed il sistema operativo del server, fino alla licenza del linguaggio.
<HTML>
<HEAD>
<TITLE>Test PHP</TITLE>
</HEAD>
<BODY>
<?php
phpinfo();
?>
</BODY>
</HTML>
Per motivi di sicurezza è comunque opportuno, se questa pagina viene lasciata ai fini di test sul Web Server, assegnarle un nome non ovvio, e mantenerla in una posizione protetta in quanto potrebbe rivelare informazioni determinanti ai fini di un eventuale attacco.

 

Tips per EasyPHP
Come faccio ad aggiornare la mia versione di PHP?

0. Ferma i Servers 
1. Scarica il file zip su http://www.php.net/ 
2. Decomprimilo nella directory principale di EasyPHP. 
3. Rinomina la directory \php\ come \phpold\, per esempio! ( Fallo!) 
4. Rinomina la cartella appena decompressa come \php\ 
5. Copia il file "c:\...\easyphp\php\sapi\php4apache.dll" nella cartella "c:\...\easyphp\php\" 
5. Sostituisci il file DLL "php4ts.DLL" della directory Windows\System con quello della cartella "easyphp\php\sapi\". 
6. E' suggerito sostituire il file php.ini (nella directory c:\windows\ disolito!) con il nuovo file php.ini che corrisponde alla nuova versione (Una copia del vecchio file può essere usata per configurare il nuovo alla stessa maniera con cui si è abituati) 
7. Fai ripartire EasyPHP. 

MySql non parte e restituisce questo messaggio: 'C:\PROGRA~1\EASYPHP\MySql\bin\mysqld.exe: Table 'mysql.host' doesn't exist' nel file Log degli errori di MySql's
Potresti aver cancellato il database di MySQL! È assolutamente essenziale per il corretto funzionamento.
2 possibilità (scegli) per ovviare al danno: 
Reinstalla EasyPHP 
Decomprimi Questo file compresso (http://www.easyphp.org/telechargements/Mysql-db-safe.zip) nella cartella EasyPHP\MySql\Data\MySql (potrebbe essere necessario crearla). 

[1.7] How to connect to MySql from the outside
Edit the configuration file from MySql and comment the following ligne:
bind-address=127.0.0.1 

[1.7] I get the"Server cannot be runned : another server use the requested port" error.
Configure all your applications so that none use port 80 (used by Apache) nor 3306 (used by MySql).
To know which application uses one of those ports, scan your computer with TCPView.
(Usual applications that may be using port 80 are, between others, Kazaa Lite, Norton Firewall (proxy function), IIS (under XP Pro), Yahoo Messenger, Internet Security). 

[1.7] Settings of firewall for local use.
In order for the Easyphp pack to operate correctly, the firewall must be set as below : 
Authorise Apache.exe to listen to port 80. 
Authorise Mysqld.exe to listen to port 3306 
Authorise EasyPHP.exe to access to port 80 (Apache) from address 127.0.0.1 
Authorise EasyPHP.exe to access to port 3306 (MySql) from address 127.0.0.1 
Authorise Apache.exe to access to port 3306 (MySql) from address 127.0.0.1 
Authorise Mysqladmin.exe to access to port 3306 (MySql) from address 127.0.0.1 
To learn how to do that, read your firewall's documentation and help.