Visualizzazione post con etichetta PHP. Mostra tutti i post
Visualizzazione post con etichetta PHP. Mostra tutti i post

martedì 24 giugno 2008

[PHP] Installare classi PEAR in fase beta

Puuò capitare di voler installare delle classi PEAR le cui ultime versioni sono in fase beta.
Ora, di default PEAR installa solo package in versione stable se non erro, ma è possibile forzare la cosa senza dover smanettare fra i file di configurazione.

Ammettiamo si voglia installare la classe Spreadsheet_Excel_Writer per creare in PHP dei report in Excel. Tale classe ha delle dipendenze e l'ultima release è in fase beta.

Per installare sia la classe sia le dipendenze in automatico, basta digitare:

orion@orion$: pear install --alldeps Spreadsheet_Excel_Writer-beta

L'opzione --alldeps provvede a scaricare tutte le dipendenze necessarie mentre l'aggiunta del suffisso -beta permette di scaricare l'ultimissima versione della classe, senza dover riconfigurare il livello di accettabilità dei package per PEAR.

lunedì 16 giugno 2008

[Apache] Protezione .htaccess ed autenticazione

Ammettiamo di voler proteggere una parte del nostro sito tramite la classica autenticazione di base di .htaccess e .htpasswd, ma di voler richiedere l'autenticazione solo per chi si connette con IP diversi da quelli che acconsetiamo:

Order Deny,Allow
Deny from all
# permettiamo gli indirizzi privati,localhost e
# alcuni IP, protezione htaccess per gli altri

Allow from 172.16. # lan privata...
Allow from 127.0.0.1 # locale...
Allow from 87.65.65.65 # ip statico a caso...
AuthType Basic
AuthUserFile /percorso/al/file/.htpasswd
AuthName "AREA RISERVATA"
Require valid-user
Satisfy any
Come da esempio, permettiamo di entrare senza autenticazione ai range CIDR 192.168.0.0/16 ,172.16.0.0/16 e 10.0.0.0/8. In aggiunta permettiamo all'IP statico 87.65.65.65 di entrare senza autenticarsi.

Per tutti gli altri ci affidiamo al file .htpasswd che sarebbe bene posizionare al di fuori della directory pubblica (di solito www o htdocs a seconda che Apache sia su Linux o Windows).

Per costruire le coppie username:password presenti in .htpasswd potete usare l'eseguibile omonimo presente nell'installazione di Apache (vedere la documentazion online), potete usare uno dei tanti generatori online come .htpasswd Content Generator oppure si può ricorrere ad uno script PHP come il seguente:

if(isset($_GET['pass'])){
// prendiamo il parametro dalla query string...
$clearTextPassword = $_GET['pass'];
// criptazione
$password = crypt($clearTextPassword, base64_encode($clearTextPassword));
echo "Valore da immettere nell'.htpasswd: ";
// se viene fornito l'utente...
if(isset($_GET['user']))
echo $_GET['user'].":".$password;
else echo $password;
echo "
";
}
Nell'esempio qui sopra si assume di richiamare uno script PHP nel seguente modo: http://localhost/htpass.php?user=Chris&pass=p4ss.

[PHP-MySQL] Connettersi a diversi DB su host diversi attarverso una sola funzione

Se avete a che fare con DBMS su host differenti e volete uno script che sia in grado di connettersi dinamicamente a ciascuno di essi, ci si può basare sull'indirizzo del server su cui risiede il DBMS. L'esempio seguente dovete immaginarlo come il costruttore della classe DBconnect che imposta i campi dbhost (host in cui gira MySQL), dbuser (utente con cui si si collega al DB), dbpassword (password utente) e database.
In quest'esempio si fa uso di preg_match e di espressioni regolari per riconoscere l'indirizzo del server.


function DBconnect() {

// esecuzione su una LAN privata
if(preg_match("/^10\./",$_SERVER['SERVER_ADDR'])) {

$this->dbhost = "10.10.234.89";
$this->dbuser = "lan1";
$this->dbpassword = "lan1";
$this->database = "lan1";

// esecuzione su un'altra LAN privata
} else if (preg_match("/^192\./",$_SERVER['SERVER_ADDR'])) {

$this->dbhost = "192.168.9.134";
$this->dbuser = "lan2";
$this->dbpassword = "lan2";
$this->database = "lan2";

} else { // esecuzione in locale

$this->dbhost = "localhost";
$this->dbuser = "locale";
$this->dbpassword = "locale";
$this->database = "locale";

}
}

domenica 15 giugno 2008

[PDF] Librerie e applicazioni utili

Nel ricercare un tool su SourceForge che mi permettesse di esportare le immagini da un PDF, ho trovato interessanti librerie che mi propongo di analizzare nel medio-lungo periodo (il tempo è tiranno e gli impegni molti):

  • PDFBox [Java]: PDFBox is an open source Java PDF library for working with PDF documents. This project allows creation of new PDF documents, manipulation of existing documents and the ability to extract content from documents. PDFBox also includes several command line utilities.
  • PHP PDF Factory [PHP]: PDFLib-free PDF creation using PHP. It has interface compatible with php pdf creator (pdf-php library). Implements most of Adobe recommended features like PageTrees, Outlines, and so on.
  • XML-PDF Transformation GUI [Java]: This is a Java Swing GUI for popular XML tools from the Apache Group. It uses Xerces for XML validation, Xalan for XSLT, FOP for XML to PDF and iText for adding security features to the PDF. Can produce FO, HTML and PDF. I personally use it for my DocBook.
  • QPDF [C++]: QPDF is a command-line program that [...] is capable of creating linearized [...] files and encrypted files. It is also capable of converting PDF files with object streams [...] to files with no compressed objects or to generate object streams from files that don't have them (or even those that already do). QPDF also supports a special mode designed to allow you to edit the content of PDF files in a text editor. For more details, please see the documentation links below.
  • PDF Edit [C++,XPDF, QT3,QSA]: Free (and open source) editor for manipulating PDF documents. GUI version + commandline interface. Scripting is used to a great extent in editor and almost anything can be scripted, it is possible to create own scripts or plugins. Target platform are operating systems of Unix type (Linux, BSD).
  • [PHP]: Want to create dynamic pdf documents with PHP, but don't want to (or can't) install any of those required modules? Wll we could have the solution.. for you, a PHP class which will allow the easy production of simple pdf documents.
  • Inno-PDF, iText, PDF4J [Java]: librerie Java per la generazione di PDF;
  • TCPDF, PC4P, PHP PDF Creation [PHP]: classi per la generazione di documenti PDF;
  • PDML [PHP]: PDML is an informal markup language written in 100% PHP, allowing to create complex PDF documents very easily for people already familiar with HTML. People familiar with PHP can also use it as a way to define templates for dynamic PDF documents. PDML is built on top of FPDF, and is licensed under the GPL;
  • Peters PHP PDF Report: A PHP5 class, which capable to generate PDF report (w optional sections like pageheader, reportheader, content etc..) based on fpdf class. The report is defined in xml, groups' definitions and variable replacement from any database are supported.
  • WP2PDF: it is a script that converts the content of one or more entries of the Blog-Software WordPress to PDF. It is based on FPDF, a free PDF library and written in PHP. It requires a working WordPress installation and PHP 4.x.

martedì 13 maggio 2008

[Link] Raccolta di cheet sheet

Qui di seguito una raccolta di "bigini" online :)

Raccoglitori di cheet sheet e altro materiale

Ecco una lista di ottimi siti web che raccolgono liste di memorandum in formato PDF in merito a svariati argomenti:

venerdì 28 marzo 2008

[PHP] Quanti tag <li> ci sono nella pagina?

Per chi non lo sapesse, ho iniziato una fruttuosa collaborazione con il sito Web Master Point, grazie a Guido (sono praticamente il suo braccio destro). Solitamente traduco articoli tecnici dall'inglese all'italiano, presto forse comincerò a trattare guide un po' più lunghe.

In questa pagina sono elencati, tramite una lista non ordinata, gli articoli che ho scritto fino ad oggi. Ma se volessi tenerne il conto? Di certo non mi metto a contarli a mano, quindi mano al codice.

La pagina in questione è strutturata per mezzo di fogli di stile con classi che si applicano alle liste non ordinate per creare menu dinamici. E' quindi importante parsare il contenuto del file PHP e non il suo output HTML per conteggiare il numero di tag <li> presenti, poichè i menu e gran parte della struttura della pagina vengono creati dinamicamente da PHP.

Ecco il codice semplice semplice:

$url = basename($_SERVER["PHP_SELF"]);
$input = file_get_contents($url) or die(Non riesco a leggere il file: $url');
if(preg_match_all("/<li>/i", $input, $matches))
echo count($matches[0])-1; // non contiamo quello usato per l'espressione regolare

Questo semplice codice ha l'effetto di costruire un array contenente tutte le occorrenze del tag <li>. Nell'ultima riga stampiamo la dimensione dell'array decrementandola di uno per non considerare il tag <li> presente nell'espressione regolare. Questo ci darà il numero di articoli scritti.

lunedì 18 febbraio 2008

Un po' di link interessanti

  • Hosting Java: è un servizio offerto dallo studio ILZ,offre un account sul loro sito per quegli sviluppatori che hanno l'esigenza di testare applicazioni JSP senza affidarsi ad un hosting professionale a pagamento. Come specificato qui,si hano 40 MB a disposizione.
  • Ajax poller: script che fa uso di PHP e MySQL. Mostra un istogramma con le percentuali dei voti (qui la demo).
  • Unicode character ranges for Web designer: tabella con tutti i codici Unicode. Ricordo che comunque anche l'applicazione charmap su Windows mostra i codici Unicode (Start > Esegui > digitare charmap);
  • Working with text: tutorial in java riguardante la formattazione del testo, la normalizzazione e l'uso di diversi charset;
  • SACK: framework per AJAX incluso in Wordpress 2.0. Non l'ho provato perchè non ho assolutamente tempo,ma rientrerà nelle cose da fare post laurea.

venerdì 18 gennaio 2008

[PHP] Script per mostrare il codice sorgente di una pagina,includendo codice lato server

Introduzione

Questo tema che vado a trattare non è certo dei più nuovi:

  • ho scritto a suo tempo quest'articolo su Delfins Blog,mostrando alcune tecniche per visualizzare il codice sorgente;
  • ho scritto quest'altro che mi è stato molto utile per mostrare il codice qui su Blogger;

Mi mancava l'esplorazione delle funzioni native di PHP: highlight_string e highlight_file.

Gli script

Il codice che ho creato/modificato/copiatoETincollato fa uso di:

  1. un suggerimento di un lettore di php.net, per quanto concerne l'evidenziazione del codice php attraverso la funzione highlight_file mostrando il numero di linee usando una tabella e il commento di quest'altro per una funzione che usa invece una lista ordinata,distinguendo tra la funzione precedentemente menzionata e highlight_string, più conveniente nel caso vogliate mostrare il codice di poche righe o una riga soltanto;
  2. l'uso modificato di questo script javascript per aprire una finestra con il codice evidenziato. Notare che lo script originale così com'è,è piuttosto pericoloso perchè permette l'esecuzione arbitraria di una qualsiasi funzione passandogli dei parametri,il tutto via GET;
  3. in questo caso ho usato la direttiva $_SERVER['PHP_SELF'] perchè interessato a mostrare il codice del file correntemente letto. Nel caso si voglia leggere un altro file,considerate l'uso di funzioni quali fopen / fread,file_get_contents e file. Leggiti quest'articolo che spiega con degli esempi pratici l'uso di queste funzioni;

Quindi se vi intyeressa,bando alle ciance e recatevi su questa pagina per vedere la demo,cliccando sul link in fondo.

lunedì 14 gennaio 2008

Zippare una directory con PHP

Avrei voluto utilizzare le zip file functions (di cui trovate un ottimo tutorial su Zend Developer Zone) ma guardando il phpinfo di Aruba si nota che non hanno compilato PHP usando l'ozione di configurazione --with-zip[=DIR].

Ad ogni modo leggebndo fra i commenti presenti in corredo alle zip file funcions,incappo in questo commento di Lennart Poot: l'idea è usare la librearia di "zippaggio" di phpMyAdmin,un semplice file denominato zip.lib.php nella directory "libraries".

A questo punto ecco il codice che crea un archivio al volo specificando la cartella contenente i files e settando gli header per spedirlo direttamente al browser. Il seguente codice NON archivia le directory (if (!is_dir($file) && $file != "." && $file != ".." ) {) e non crea una cartella nell'archivio contenente i files  ma semplicemente archivia tutti i files che trova.

Ecco il codice,con qualche modifica rispetto al commento e con l'aggiunta di ciò che altri lettori di php.net han fatto notare:

require_once('zip.lib.php');
$zipfilename = 'chris_sorgentic++.zip'; // nome del file da creare
$ad_dir = 'sorgenti'; // path alla directory contenete i files

$zipfile = new zipfile();

if ($handle = opendir($ad_dir)) { // apre la direcotry
while (false !== ($file = readdir($handle))) {
if (!is_dir($file) && $file != "." && $file != ".." ) {
$f_tmp = @fopen( $ad_dir . '/' . $file, 'r'); // apre in lettura il file

if($f_tmp){
$dump_buffer=fread( $f_tmp, filesize($ad_dir . '/' . $file)); // prende il contenuto
$zipfile -> addFile($dump_buffer,$file); // aggiunge il file allo zip
fclose( $f_tmp );
}
}
}
} else {
echo "Non riesco ad aprire la directory $ad_dir.";
exit;
}

$dump_buffer = $zipfile -> file(); // dump del file
// write the file to disk:
/*
$file_pointer = fopen('newzip.zip', 'w');
if($file_pointer){
fwrite( $file_pointer, $dump_buffer, strlen($dump_buffer) );
fclose( $file_pointer );
}
*/

// response zip archive to browser:
header('Pragma: public');
header('Content-type: application/zip');
header('Content-length: ' . strlen($dump_buffer));
header('Content-Disposition: attachment; filename="'.$zipfilename.'"');

echo $dump_buffer; // stampo il contenuto del file

sabato 12 gennaio 2008

Win-get: uso e creazione di un repository

Introduzione

Win-get è un packet manager a linea di comando per windows che sfrutta le funzionalità di wget,un porting per Windows del programma omonimo per Linux.

wget

Presenta una lista di programmi via Web (quelli accessibili anche dall'applicazione) e se ci si registra si ha il vantaggio di poter cliccare su dei "+" a fianco dei nomi dell'applicazione e associare l'applicazione stessa al nostro account. In questa maniera sfrutando l'opzione "restore" di win-get,è possibile installare tutti i programmi associati al nostro profilo (specificando le credenziali di autenticazione o nel file di configurazione o come opzioni da linea di comando).
Esiste anche un ' estensione per Firefox (non ancora provata quindi non vi so dire nulla in termini di utilità e compatibilità tra le varie versioni) che permette di segnalare un'applicazione. Fate attenzione che il server non è configurato per le estensioni firefox quindi vi verrà chiesto di scaricarla. Dovrete poi installare tale estensione con "Apri con" e scegliendo Firefox o da linea di comando "firefox estensione.xpi".

Trovate un'altra recensione di questo software su newstechnology.

Funzionamento tecnico

Questo è un pogetto open source,quindi sono disponibili i sorgenti per poterci creare il nostro repository, ma NON l'interfaccia amministrativa e "perlustrativa" del sito ufficiale (in attesa di chiarimenti).

Win-get farà delle query come questa ad uno script PHP (notate i parametri inviati via GET) e si otterrà un file XML descrittivo che verrà poi gestito da Win-get e presentato nel prompt dei comandi.

xml

Come illustra questa query e quella nella foto,sembra che questo progetto sia un repository di collegamenti alle applicazioni da scaricare e che sul server Sourceforge non abbiano messo alcun software (molto probabilmente perchè non si può nemmeno fare). Quindi se guadate al file XML ritornato dalla precedente query,l'indirizzo del file zip verrà dato in pasto a wget presumo.

Creazione di un proprio repository

Ho intenzione di creare un repository su Aruba sfruttando i files forniti,ma permettendo anche di scaricare direttamente dal server Aruba i software,dal momento che godo di spazio illimitato :-D (ma non banda illimitata presumo!). Chi è su Aruba sa che si hanno a disposizione solitamente 5 database predefiniti per un hosting da 30 sacchi l'anno (mi pare,a me hanno regalato il sottodominio quindi non ricordo :-D). Quindi l'istruzione CREATE DATABASE `w154283_winget` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; non sarà possibile. Possiamo:

  • rinominare uno dei database predefiniti,azione possibile dal pannello di controllo selezionado "Operazioni";
  • semplicemente modificare USE w154283_winget; con il nome del nostro database e cancellare o commentare la creazione del database.

Prendiamo quindi il dump del database e imbocchiamolo a PHPMyAdmin presente su Aruba. Il database è composto da 5 tabelle:

  • applications: contiene i dati generali di un'applicazione e il link dove risiede;
  • dependencies: le dipendenze per una determinata applicazione;
  • errors: gli errori in riferimento alle applicazioni;
  • mirrors: eventuali mirrors per una certa applicazione;
  • requests: identica ad applications,mi è ancora sconosciuto il significato della sua ridondante esistenza;

Fatto questo basta caricare i file winget.php e db.php sul proprio server. L'indirizzo del proprio repository sarà quello rappresentato dalla locazione del file winget.php.

A questo punto manca tutta l'interfaccia amministrativa che il sito ufficiale presenta. Ho chiesto a Ryan se è possibile avere tali files,dal momento che su CVS di sourceforge presenta solo i 3 files menzionati.

Nel caso non fosse possibile ne costruirò una mia non appena avrò tempo :)

domenica 6 gennaio 2008

[PHP]Listato di una directory e sua dimensione

Siccome gestisco un sito d'appunti in cui sono presenti molti sorgenti liberamente scaricabili e raggruppati in directory,sarebbe carino poterli elencare tutti insieme in una pagina sola. A tal fine ho combinato e modificato alcune funzioni dei commentatori di php.net al mio scopo. Ecco le funzioni: la prima permette di dare un output più umanamente leggibile al numero di bytes forniti in input come parametro alla funzione.


function size_readable($size, $retstring = null) {
// adapted from code at http://aidanlister.com/repos/v/function.size_readable.php
$sizes = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
if ($retstring === null) { $retstring = '%01.2f %s'; }
$lastsizestring = end($sizes);
foreach ($sizes as $sizestring) {
if ($size < 1024) { break; }
if ($sizestring != $lastsizestring) { $size /= 1024; }
}
if ($sizestring == $sizes[0]) { $retstring = '%01d %s'; } // Bytes aren't normally fractional
return sprintf($retstring, $size, $sizestring);
}


La seconda funzione scansiona una directory e fornisce in output i files e directory ivi contenuti,omettendo la directory corrente (".") e quella superiore (".."). Dà altresì come risultato il numero di files la loro dimensione,così come la dimensione totale dei files che occupano la cartella. Usiamo la funzione precedente per l'output sulla dimensione dei files.

function scan_dir($path) {
$dir = $path;
$counter_files = $size = 0;
$string = "";
// Open a known directory, and proceed to read its contents
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if($file == "." || $file == "..") continue;
$counter_files++;
$string.= "- $file - ".filetype($dir."/".$file)." ".filesize($dir."/".$file)." bytes
";
$size+=filesize($dir."/".$file);
}
closedir($dh);
}
echo "Directory contenente $counter_files files e occupante ".size_readable($size)."
Lista:
";
echo $string;
}
}

Il risultato dell'uso di queste due funzioni lo potete vedere qui.
Se invece volete qualcosa di molto più fico,vi suggerisco snif (simple and nice index file). Potete vedere la demo qui e il suo codice sorgente qui.

domenica 16 dicembre 2007

Programmare con la libreria GD

PHP is not limited to creating just HTML output. It can also be used to create and manipulate image files in a variety of different image formats, including gif, png, jpg, wbmp, and xpm. Even more convenient, PHP can output image streams directly to a browser.
L'estensione GD è già presente nell'attuale versione di PHP,basta scommentare il ; nel file di configurazione per averla abilitata. Alcuni link utili:

PHP Guestbook per i nostri siti

Listuccia:


Io comunque continuo a domandarmi come mai sia così schifosamente difficile trovare le demo di applicazioni web. Non posso mica basarmi su una lapidaria descrizione,devo pur farmi un'idea vedendolo in azione! Per questo,questo e quest'artro motivo credo che sceglierò phpBook per il mio sito. Appena è pronto ve lo dico così potrete insultarmi... (cor cazzo! :-D).
EDIT: phpBook non si scarica direttamente dal loro sito,ma te lo inviano via mail (???!). Ergo: optp per qualche progetto di Sourceforge,che grazie alla sua funzione di filtraggio nella ricerca ho ridotto la scelta a due progetti,MGB e phpnix.

mercoledì 12 dicembre 2007

I miei errori più comuni in PHP

Facciamo oggi una breve rassegna di quegli errori che mi capita di incontrare,soprattutto quando vado di fretta:

  • unexpected T_VARIABLE : di solito manca qualcosa,se per esempio avete un if in cui fate un confronto tramite un certo operatore e vi scordate di metterlo;
  • unexpected T_ELSE: ad esempio se avete:
    if ( )
    dothings()
    else doelse;
    senza punto e virgola sull'istruzione dell'if,otterrete quest'errore;
  • unexpected $end: solitamente avete mancato di mettere tutte le parentesi graffe necessarie;
  • syntax error, unexpected '}': probabilmente avete omesso una parentesi graffa;
  • unexpected T_IF: controllate magari non avete messo un punto e virgola prima di un if;
  • Maximum execution time of 30 seconds exceeded in nome_script: controllate innanzitutto di non aver creato un ciclo infinito,fatto ciò potreste considerare il caso di allargare il numero di secondi editanto la direttiva max_execution_time in php.ini oppure usare la funzione set_time_limit quando PHP NON gira in modalità sicura. Inoltre provate a non usare funzioni in file di risorse prima che esse non siano state definite,ciò potrebbe rallentare l'esecuzione.

lunedì 3 dicembre 2007

Tag cloud in PHP/MySQL

Rendo noto che sono una pippa in cucina,non so perchè ma non ho l'elasticità mentale di improvvisare le dosi e le ricette,mi serve "l'algoritmo" esatto (leggi ricetta) per fare qualcosa. Così ho deciso di collaborare con la mia ragazza (molto più esperta di me in cucina per fortuna mia :D) alla stesura di un ricettario.
Mi piacerebbe poterlo fare in AJAX ma non ho ancora molta competenza tecnica per realizzarlo così al momento,magari una seconda versione in un futuro potrà esser fatta così. Pensavo altresì di taggare le ricette e di creare delle tag cloud come siamo abituati a vederle nei blog. Riporto qui per mia utilità una serie di link per creare una tag cloud con PHP e MySQL:

martedì 13 novembre 2007

Installazione architettura LAMP su Ubuntu Gutsy Desktop

Se non avete scelto fin da subito Ubuntu Server Edition,sul vostro sistema vi troverete sforniti delle componenti dell'architettura LAMP (Apache,MySQL e PHP).

Io in principio volevo destinare il mio computer fisso di casa a prove sporadiche e ad un utilizzo meramente multimediale con Ubuntu,però per curiosità e bisogno,ho cambiato idea e deciso di provare ad installare tutto quel che mi serviva.
  1. scegliere i pacchetti idonei da synaptic: basta cliccare su "Cerca" e digitare "apache","php" e "mysql". Scegliere sia il client sia il server di mysql. Eventualmente scaricare il pacchetto pear per avere le estensioni a PHP. In fase di installazione è possibile configurare graficamente Apache per PHP.
  2. verrà richiesta la password di root per mysql.
  3. verificare l'effettiva installazione del server digitando "localhost" dal browser. Dovrebbe comparire il contenuto della directory /var/www/ e mostrare la firma del server (Apache/2.2.4 (Ubuntu) PHP/5.2.3-1ubuntu6 Server at localhost Port 80). Se compare PHP nella firma (come nell'esempio riportato) il modulo è correttamente installato e il server è in grado di passare il codice PHP all'omonimo preprocessore.
  4. per sostituire il nostro contenuto della directory dei documenti di Apache (sotto Windows "htdocs"),rimuovere prima la directory di default ($ sudo rm -rf /var/www/*) e spostare o copiare i files che vogliamo inserire nella driectory pubblica ($ sudo mv Desktop/backup_generale/htdocs/* /var/www/).
    Siccome li abbiamo spostati con sudo,tutti i files acquisiranno i diritti di root (chmod 700),permettiamo invece la lettura anche agli altri utenti dopo esserci spostati nella directory pubblica del server da terminale (/var/www$ chmod -R 755 *).
    Se volete fare un link sul desktop alla vostra directory contenente il materiale pubblico digitare: ln -s /var/www/ ~/Desktop
  5. da ultimo testiamo la connessione a MySQL inserendo nella directory pubblica di Apache il seguente stralcio di codice fra tag PHP che qui ho omesso perch Blogger non me lo consente:

    $mysql_id = mysql_connect('localhost', 'root', 'root') or die("Connessione non riuscita: " . mysql_error());
    mysql_select_db("mysql") or die("Selezione del database non riuscita");

    $query = "SELECT User FROM user";
    $result = mysql_query($query) or die(mysql_error());

    echo "Tabelle nel database mysql
    ";
    while($row = mysql_fetch_array($result,MYSQL_ASSOC)){
    echo $row['User'];
    echo "
    ";
    }
    Se vi compare la seguente immagine (in cui ho erroneamente scritto "Tabelle nel database MySQL" ma nel codice ci riferiamo agli utenti nella tabella Users) è tutto a posto :)

Come si può vedere,l'installazione di LAMP è molto più rapida rispetto a Windows grazie soprattutto a repository e alla nuova versione di PHP.

mercoledì 24 ottobre 2007

reCAPTCHA e PHP

reCAPTCHA è ,come si lascia intuire dal nome,una soluzione antispam che compie qualcosa di utile rispetto ad altre soluzioni che si trovano in giro: contribuisce alla digitalizzazione dei libri. Di fatto è notorio che si usino tecniche OCR per trasformare una scansione in testo. Il punto è che a volte ,l'avrete visto anche voi se avete uno scanner,le traduzioni dei software OCR sono un po' "farlocche",perchè non riescono ad interpretare correttamente quanto letto. qui entra in gioco l'umano che,risolvendo il captcha arriva là dove non arriva i lsoftware.
Il CAPTCHA è composto da due parole: una non risolta dall'OCR e una di cui si conosce già la soluzione. Dando il risultato corretto per la seconda ,il software assume che anche la parola incognita sia stata risolta correttamente.
Qui potete trovare la libreria PHP per implementarlo nelle vostre pagine Web.

mercoledì 17 ottobre 2007

Progetto basi di dati

Vi lascio come promesso con il link per il download del progetto di basi di dati di quest'anno,si trova in fondo a questa pagina. Tanto bel codice che non può trovar posto che in uno zippo,non di certo su un blog! Quindi se volete approfondire gli accessi in PHP tramite cookies,funzioni SQL e PLPGSQL di PostgreSQL e come si crea un database (dallo schema ER sebbene mostri qualche errore allo schema relazionale) allora scaricatevi lo zippo e dateci un'occhiata.
Per farlo funzionare dovete prima creare in PG un database di nome ospedale e un superutente di nome postgres con password post. Scusate ma nn ho raccolto utto in un unico file di funzioni,perchè non me ne fregava nulla,piuttosto ci sono connessioni al database un po' qua e un po' là,quindi al massimo modificate a mano gli scripts se non volete cambiare la password al vostro utente postgres,nel caso ne abbiate già uno :)
EDIT: il file del progetto è stato temporaneamente rimosso. Entro una settimana una nuova versione del progetto vi troverà posto.

mercoledì 3 ottobre 2007

[PHP-MySQL]Curare l'output di eventuali errori

E' importante non dare mai troppe informazioni all'attaccante circa il nostro database o la sua struttura. La semplice funzioncina che segue semplicemente dà un output informativo utile allo sviluppatore quando il server su cui gira è quello il locale,altrimenti ritorna un messaggio di circostanza.


function showErrors($query,$error) {
$server = $_SERVER['HTTP_HOST'];
$msg = "Failed Query: {$query}
SQL Error: {$error}
";
if($server == "localhost")
echo $msg;
else "Dati momentaneamente irreperibili. Se l'errore persiste contattare l'admin.";
}

// esempio d'uso
$sql = "show tablesf";
$result = mysql_query($sql) or die(showErrors($sql,mysql_error()));

martedì 2 ottobre 2007

phpDocumentor

phpDocumentor fa lo stesso lavoro di javadoc per chi è avvezzo al mondo java: dà una presentazione HTML di una struttura di una serie di classi. Un esempio lo potete avere osservando lo Zend Framework API.