Archivi per la categoria ‘Development’

Feed RSS 2.0 in PHP

martedì, 25 luglio 2006

Per un nuovo sito di MyVideoDaily (pubblicità progresso ;-) ) che sto realizzando, avevo bisogno di generare feed RSS. Ho cercato su internet qualche modulo già fatto che fosse semplice da utilizzare ma non ho trovato niente che facesse al caso, per cui ho deciso di realizzare una classe PHP per la generazione di feed RSS 2.0.

Dato che per svilupparla ho impiegato solo tempo riciclato (ossia il fine settimana!), ho deciso che fosse opportuno pubblicare quanto prodotto con licenza LGPL, quindi disponibile a tutti coloro che ne abbiano bisogno.

Trovate il sorgente della classe e un po’ di documentazione qui sul mio sito, ma in sola lingua inglese, pertanto mi sembra opportuno scrivere almeno un paio di dritte qui in italiano su come funziona la classe.

Generare un feed RSS con RSS2Writer è semplicissimo. In primo luogo bisogna includere il file RSS2Writer.class.php per poter utlizzare le due classi in esso definite. Poi è necessario instanziare la classe RSS2Writer che rappresenta il feed, impostandone i parametri obbligatori, nome del feed, URL di riferimento e descrizione del feed.
Si possono poi impostare i parametri aggiuntivi usando i metodi set().
Vediamo un esempio:

include_once("rss2writer.class.php");
$rssw=new RSS2Writer("My Rss2 Feed",
"http://www.mauriziogiunti.it","This is a test feed");
$rssw->setLanguage('en-us');
$rssw->setPubDate(date('Y-m-d H:m:s'));

Una volta preparato il feed, si possono aggiungere i vari item che lo compongono, ossia i singoli articoli che il feed deve trasportare, attraverso il metodo addItem(), il quale deve ricevere come parametro un oggetto di tipo RSS2Item.
Sarà quindi necessario creare uno o più di questi oggetti per popolare il feed, anche in questo caso impostando nel costruttore i parametri obbligatori e attraverso i metodi set*() quelli opzionali:

// Create a new feed item
$item=new RSS2Item('This is a test item','http://www.mauriziogiunti.it/rss2writer.html',
'RSS2Writer PHP class');
$item->setPubDate("2006-07-24");
// Add the item to the feed
$rssw->addItem($item);

Ovviamente ogni feed può avere un numero qualsiasi di item. Basta crearli e aggiungerli come abbiamo visto.

Una volta popolato adeguatamente il feed non resta altro da fare che inviarlo al client che lo ha richiesto. Per farlo è necessario innanzitutto dichiarare che lo stream http che stiamo producendo non trasporta una pagine html ma una pagina xml, impostanto il content type opportuno nello header della risposta, dopodiché potrà essere usato il metodo doPrint() della classe RSS2Writer, per inviare il feed RSS al client:

header('Content-type: text/xml');
$rssw->doPrint();

Ovviamente dovete ricordare di non inviare nient’altro nella pagina, nemmeno degli spazi bianchi, prima dell’impostazione del content type altimenti il PHP vi bloccherà in errore.

Questa è solo un’infarinatura su come si utilizza la classe, ma credo che sia evidente quanto sia semplice da usare. Per maggiori dettagli vi rimando alla pagina ufficiale di RSS2Writer.

A presto!

Meg

can i take viagra Diovan Improvement In Erectile Dysfunction viagra how it works?
herbal viagra forums Viagra Sales “snorting viagra health”
viagra patent levitra Natural Home Remedy For Erectile Dysfunction viagra anxiety
Taking viagra woman target google viagra order cheap 470. Tricor Erectile Dysfunction cheap gerneric viagra
generic viagra levitra and cialis pills Buy Generic Viagra can i take viagra
viagra how it works? Avandamet Erectile Dysfunction herbal viagra forums
“snorting viagra health” Acupuncture Treatment For Ed viagra patent levitra
viagra anxiety Male Impotence Causes Taking viagra woman target google viagra order cheap 470.
cheap gerneric viagra Buy Viagra generic viagra levitra and cialis pills
can i take viagra Topical Ed Treatment viagra how it works?
herbal viagra forums Viagra Discount “snorting viagra health”
viagra patent levitra New Ed Treatment viagra anxiety
Taking viagra woman target google viagra order cheap 470. Viagra Blood Pressure cheap gerneric viagra
generic viagra levitra and cialis pills Plavix And Erectile Dysfunction can i take viagra
viagra how it works? Cialis Viagra herbal viagra forums
“snorting viagra health” Exercises For Male Impotence viagra patent levitra
viagra anxiety Erectile Dysfunction And Heart Disease Taking viagra woman target google viagra order cheap 470.
cheap gerneric viagra Vacumn Pumps For Erectile Dysfunction generic viagra levitra and cialis pills
can i take viagra Viagra Prices viagra how it works?
herbal viagra forums Erectile Dysfunction Review “snorting viagra health”
viagra patent levitra Young Male Impotence viagra anxiety
Taking viagra woman target google viagra order cheap 470. Treatment For Ed Muse cheap gerneric viagra
generic viagra levitra and cialis pills Order 50mg Viagra can i take viagra
viagra how it works? Male Impotence Mental Psychological herbal viagra forums
“snorting viagra health” Impotence In Male Athletes viagra patent levitra
viagra anxiety Erectile Dysfunction Cure Taking viagra woman target google viagra order cheap 470.
cheap gerneric viagra Herbal Remedies For Erectile Dysfunction generic viagra levitra and cialis pills
can i take viagra Viagra Cheap viagra how it works?
herbal viagra forums Viagra Professional “snorting viagra health”
viagra patent levitra Dealing With Male Impotence viagra anxiety
Taking viagra woman target google viagra order cheap 470. Substanse Treatment Co-ed San Diego cheap gerneric viagra
generic viagra levitra and cialis pills Reasons For Male Impotence can i take viagra
viagra how it works? Male Erectile Dysfunction herbal viagra forums
“snorting viagra health” Male Impotence Ads viagra patent levitra
viagra anxiety Erectile Dysfunction Prostate Taking viagra woman target google viagra order cheap 470.
cheap gerneric viagra Buy Viagra Online At generic viagra levitra and cialis pills
can i take viagra Aspirin And Viagra viagra how it works?
herbal viagra forums Correction For Male Impotence “snorting viagra health”
viagra patent levitra Ed Treatment viagra anxiety
Taking viagra woman target google viagra order cheap 470. Marijuana And Viagra cheap gerneric viagra
generic viagra levitra and cialis pills Women Does Viagra Work can i take viagra
viagra how it works? Erectile Dysfunction In Nigeria herbal viagra forums
“snorting viagra health” Male Impotence Medicare viagra patent levitra
viagra anxiety Herbs And Viagra Interaction Taking viagra woman target google viagra order cheap 470.
cheap gerneric viagra Chinese Viagra generic viagra levitra and cialis pills
can i take viagra Levitra Dysfunction Erectile viagra how it works?
herbal viagra forums Discount Viagra Perscription Drug “snorting viagra health”
viagra patent levitra Female Viagra viagra anxiety
Taking viagra woman target google viagra order cheap 470. Dysfunction Erectile Zocor cheap gerneric viagra
generic viagra levitra and cialis pills Andropause Or Male Menopause Impotence can i take viagra
viagra how it works? Zetia And Erectile Dysfunction herbal viagra forums

PHP come script di sistema (di nuovo!)

giovedì, 10 novembre 2005

In un breve post di qualche mese fa vi ho detto come sia possibile usare il PHP anche come linguaggio di script di sistema, ossia per fare script eseguibili dalla shell.
Vediamo oggi qualche trucchetto per utilizzare efficacemente questi script.

In primo luogo sarebbe comodo poter invocare semplicemente lo script senza dover utilizzare il comando php -q. Grazie alla potenza della shell di Unix questa cosa è semplicissima: in primo luogo dobbiamo usare il comando which per localizzare il percorso esatto dell’eseguibile del php sulla nostra macchina, poi basterà far iniziare lo script da eseguire con i caratteri #! seguiti dal nome completo dell’esegibile php con argomento -q.
Ad esempio sul mio fido serverino FreeBSD trovo:

$ which php
/usr/local/bin/php

quindi i miei script in php dovranno iniziare con questa riga:

#!/usr/local/bin/php -q

Vediamo il semplice script di esempio prova.php:

#!/usr/local/bin/php -q
< ?php
for($i=0;$i<10;$i++) {
print "Ciao\n";
}
?>

Non devo inoltre scordare di impostare sul file l’attributo X per autorizzarne l’esecuzione.

$ chmod +x prova.php
$ ./prova.php
Ciao
Ciao
Ciao
Ciao
Ciao
Ciao
Ciao
Ciao
Ciao
Ciao

Form con codice di verifica in PHP

giovedì, 20 ottobre 2005

A chi in questi tempi bui non è capitato di dover inserire in una form un codice di verifica, ossia di dover copiare da un’immagine semioffuscata una sequenza di numeri e lettere casuali?
Vi siete chiesti a cosa servono? Semplice: per impedire che quelle form vengano utilizzate da un client software. Ad esempio gli spammer avevano iniziato ad aprirsi account a go-go su Yahoo mail, o altri siti di email gratuite, per poter sparare indisturbati i loro quintali di avvisi commerciali. Aprire un account era piuttosto semplice, bastava riempire qualche form, lavoro che si può automatizzare agevolmente con uno script in Perl, o simili.
Grazie all’introduzione di un codice di verifica questo non è più possibile, infatti il codice nell’immagine non è leggibile in maniera automatica.
Certo sarebbe in teoria possibile utilizzare un software OCR, ma come vedremo anche l’uso di questi strumenti si può, se non impedire, almeno rendere più complesso.

In questo post realizzeremo una form con un semplice codice di controllo generato casualmente.

Prerequisito perché questa strategia di verifica sia efficace, è che il codice di controllo non compaia mai all’interno della pagina HTML dove si trova la form. Questo deve essere mostrato solo attraverso un’immagine e quindi immagazzinato nella sessione.
Per questo realizzeremo uno script PHP, chiamato verimage.php, che provvederà a creare un nuovo codice di verifica casuale, memorizzarlo nella sessione e quindi creare un’immagine che lo rappresenta. L’immagine non verrà memorizzata da qualche parte, al contrario verrà immediatamente inviata al browser dell’utente, dichiarando nell’header HTTP il tipo mime di un’immagine, invece che il consueto text/html.
Questa tecnica si può anche utilizzare in altri contesti, per creare dinamicamente immagini o altri tipi di file.

Lanciare un processo asincrono da una pagina php

martedì, 6 settembre 2005

Ciao a tutti,

non so se vi è mai capitato, ma io ho avuto bisogno di eseguire un processo asincrono da una pagina php e che fosse anche esso uno script php.

La cosa sembra facile … exec(command) … ma non è così …
prima di tutto abbiamo limitazioni dovute al sistema operativo (sotto Windows è problematico dare accessi a processi shell da parte del web server per motivi di sicurezza), ma anche sottop unix dove è semplice abbiamo delle limitazioni.

Affinché un processo sia eseguibile con la exec da parte di una pagina php è necessario che non solo siano ridiretti a null, ma che siano anche chiusi sia gli stream di standard output che quelli di standard error.

Supponiamo di avere un processo asincrono che vogliamo eseguire che si chiama /miadirectory/mioprocesso.php e che necessiti di 3 parametri (param1, param2, param3), quello che dobbiamo fare nella pagina chiamante è preparare l’esecuzione:

$exec_cmd=”/usr/local/bin/php -q /miadirectory/mioprocesso.php param1 param2 param3 2>/dev/null >&- < &- >/dev/null &”;

e quindi lanciare l’esecuzione asincrona con:

exec($exec_cmd);

E’ solo un piccolo trucco, ma spero possa essere utile a qualcuno … ricordatevi che funziona solo sotto Unix

Lunghi giorni e piacevoli notti a tutti

L’importanza dei tipi

venerdì, 20 maggio 2005

Fortunatamente non capita spesso, ma ogni tanto “mi tocca” tenere dei brevi corsi di informatica. Non mi dispiace insegnare, è un piacevole diversivo dalla routine quotidiana, ma odio preparare le lezioni.

Non appena possibile inserisco nelle mie lezioni qualche concetto un po’ meno terra-terra. Ad esempio, nelle lezioni su Excel cerco sempre di spiegare la differenza fra i vari tipi dei dati in maniera un po’ più approfondita che “questi sono numeri, quelle stringhe”. Dopo i primi minuti di “spiegone” noto che la gente comincia a perdere il filo, lo sguardo si fa vacuo e gli allievi danno segni di disagio. A questo punto, per far capire loro l’importanza di padroneggiare determinati concetti, racconto loro l’aneddoto di vita vissuta che segue.

Spostare un archivio CVS da Windows a Unix

giovedì, 19 maggio 2005

Rieccomi a parlare di CVS … direte ma allora è una fissa :-)

Bhe, in ogni caso questa volta sarò breve.
Spostare un archivio CVS da un server unix ad un altro server UNIX è semplice: si prende la directory, si fa un tar e poi si scompatta sul nuovo server … semplice no?

Per Windows al solito le cose si complicano a causa dei diritti di accesso ai file. Supponiamo di avere nel nostro server Windows un progetto (o modulo per i puristi) che chiamiamo ProgettoCVS dentro la root del CVS.

Zippiamo la directory ProgettoCVS nel file ProgettoCVS.zip, e supponiamo che il gruppo di utenti CVS sia ncvs.

Copiamo il file compresso nella directory root del CVS sotto UNIX, ed eseguiamo:

unzip ProgettoCVS.zip

chmod -R 755 ProgettoCVS

unzip ProgettoCVS.zip

chown -R :ncvs ProgettoCVS

chmod -R a+r ProgettoCVS

A questo punto i file dovrebbero avere tutti i diritti giusti … almeno a me ha funzionato. Se trovate una strada più breve fatemelo sapere.

Lunghi giorni e piacevoli notti, a tutti

Deployer

sabato, 23 aprile 2005

Salve gente.

Sono di nuovo qua a tediarvi..

Quante volte avete sviluppato un piccolo applicativo, uno shell script o qualcosa di simile che vi aiutasse nella gestione quotidiana delle vostra macchina.

Spesso capita che viene sviluppato in una directory specifica e poi “mosso” nella directory ufficiale per essere usato.

Poi, vuoi perchè è talmente piccolo e stupido che non vi sembrava il caso di metterlo sotto CVS e quindi l’avete lasciato li…

Poi per le mutate esigenze lo avete modificato, per correggerlo o migliorarlo.

Solo che avete modificato la copia nella directory ufficiale…

E ancora, la volta dopo avete modificato l’originale ed una volta messo nella directory ufficiale vi siete persi le modifiche precedenti.

Sarò bischero ma a me è capitato. :)

E per questo, e soprattutto perchè ci sono utility complesse che hanno più di un file, ho sviluppato questo piccolo e stupido perl script che mi ha permesso di controllare le modifiche effettuate tra i due ambienti (tipicamente sviluppo e produzione) per “rilasciare” (Deploy) solo i files modificati e non fae confusione.

E’ sufficiente creare un file chiamato Deployer.List in cui specificare il “nome del file“, “dove è” e “dove deve andare” per poterli facilmente gestire.

Il file Deployer.List, di cui vedete un esempio qui sotto, viene cercato per default nella directory /usr/local/etc, ma è facile modificare il programma per andarlo a cercare altrova.

Deployer.List

# Deployer filelist by phil
# Il formato del file è: FileName|Dove è|dove va
# Le righe vuote o che iniziano per # sono commenti

# Created during a lazy train journey between Milan and Florence: 22/04/2005

MioFile.Uno|/work/sources/mine|/usr/local/bin
MioFile.Due|/work/sources/mine|/usr/local/bin

Il Deployer, che dovrebbe essere posizionato in una directory sotto PATH, accetta una serie di switch.

-l :
Mostra la lista dei files caricati dal Deployer.List.

-v :
Verifica la differenza tra tutti i source file ed i target file se non è specificato il flag -f.
Non visualizza le differenze ma solo che i files non sono uguali.
Se il source o il target non esistono viene riportato l’errore.
Se non esistono le directory (source/target) riporta l’errore.
Elenca a video solo i file differenti.

-d :
Rilascia tutti i source files se non è specificato il comando -f.
Se i files non sono differenti non esegue il comando.
Se il source non esiste viene riportato l’errore.
Se il target non esiste, viene considerato differente e rilasciato.
Se non esistono le directory (source/target) riporta l’errore.
Elenca a video solo i file rilasciati.

-V :
Verbose. Srive una riga per ogni file verificato/rilasciato.
Per la verifica mostra a video anche le differenze riscontrate.

-f “Nome File” :
Esegue i comandi richiesti solo per il file specificato.
Se il file non è presente nel Deployer.List riporta l’errore.

-c “full path of Deployer.List” :
Utilizza un altro file Deployer.List.

-h :
Questo Help.

Per funzionare il Deployer ha bisogno di un Perl Module, incluso nello ZIP qui di seguito riportato.

Scarica il Deployer.

Buon divertimento.

Riportate qualsiasi Bug o WishList a phil.at.0×01.org, grazie.

Phil

CVS e SSH

venerdì, 22 aprile 2005

Ciao a tutti,

In questo breve articolo ci occuperemo di CVS ed in particolare della possibilità di accedere in maniera crittografata alle informazioni ivi contenute evitando di far passare la vostra password in chiaro sulla rete.

Introduzione al CVS

Una piccolissima introduzione al CVS è dovuta: CVS (Concurrent Versions System) fa parte della famiglia di tool denominati comunemente VCS (Version Control System) che permettono di salvare versioni successive di un file (normalmente di testo e non binario) tenendo memoria dei cambiamenti e dei commenti che l’utente ha fatto nel momento della generazione della nuova versione.
Il CVS in più riesce a gestire le modifiche effettuate in contemporanea da più utenti sullo stesso file: in automatico se sono state fatte in punti diversi del file, in manuale altrimenti …

Gli strumenti di VCS in generale ed il CVS in particolare permettono poi di recuperare vecchie versioni di file, tracciare le modifiche effettuate, operare come supporto al
configuration management e così via, insomma uno strumento potente per gli sviluppatori.

Per saperne di più andate su www.cvshome.org, mentre per i dettagli circa l’uso potete leggere il manuale del CVS.

CVS è uno strumento nato sotto Unix ed ivi principalmente diffuso, che si sta estendendo anche al mondo Windows. La versione lato server che ritengo migliore per Windows potete reperirla su www.cvsnt.com o su www.wincvs.org dove reperiremo un client per Windows che potrà esserci molto utile (esiste anche un bundle che vi suggerisco fra client e server).

In ogni caso noi ipotizzeremo di avere a diposizione la parte server su una macchina Unix ed in particolare le informazioni che vi darò fanno riferimento ad una installazione FreeBSD, in ogni caso sono facilmente generalizzabili a qualunque sistema Unix.

WebService in Php

mercoledì, 13 aprile 2005

Ciao a tutti,

ebbene si, tutti parlano di Web Services, di complesse modalità per effettuarne il deployment nonché di non semplici Application Server da Installare e manutenere … proviamo ad andare controcorrente e utilizzare strumenti semplici quali un Apache con PHP e le librerie Pear installate.

Prima di tutto, dove reperire gli strumenti:

Non mi dilungo adesso su come installarli per mancanza di spazio e di tempo … forse in una prossimo scritto se mi viene richiesto farò questo sforzo.

L’idea di utilizzare PHP può essere utile anche per una prototipazione veloce di un servizio web da proporre ad un cliente e che non richieda una infrastruttura enorme per poter essere gestito: poi potete anche decidere di riscriverlo ex-novo in Java o in C++, ma se il tempo stringe …

Inoltre ogni pubblicazione che riguarda i web service parla di strani linguaggi di definizione ed interoperabilità di web service come il WSDL e ne descrive minuziosamente la sintassi.
Bene, per scrivere un web service in PHP non serve conoscerne la sintassi e tantomeno scriverne uno, dal momento che le librerie Pear lo genereranno per noi … con un piccolo aiuto da parte nostra.

Usare PHP come linguaggio di script di sistema

venerdì, 8 aprile 2005

Il linguaggio PHP è nato per lo sviluppo di pagine web dinamiche, e grazie alla sua semplicità, rapidità e flessibilità si è sviluppato rapidamente fino ad includere migliaia di funzioni di libreria, che possono semplificare notevolmente i compiti dello sviluppatore.
Senza contare che, già dalla versione 4, PHP è dotato di strutture di supporto per la programmazione orientata agli oggetti, grazie alle quali è diventato una piattaforma di sviluppo adatta anche ai progetti di media/alta complessità.

Non molti sanno che tutte queste belle caratteristiche possono essere sfruttate anche per creare script di sistema per le nostre box Unix.

In primo luogo è però necessario accertarsi che la distribuzione di PHP che abbiamo installato, sia completa del comando php, infatti alcune distribuzioni prevedono solo il modulo per Apache senza questo prezioso comando.
Se questo comando non è presente sulla vostra box, dovete installare o ricompilare PHP in modo da crearlo.
Altrimenti siete già pronti per usare PHP come script di sistema. Proviamo a creare con un editor di testo (per esempio vi :-) ) il file test.php contenente:

<?php
// Test script php
for($i=0;$i<5;$i++) {
print "i=".$i."\n";
}
?>

Potremo eseguire questo semplice programma avendo l’accortezza di specificare lo switch -q del comando php, che ha la funzione di eliminare l’header HTTP che normalmente viene generato dal PHP in testa allo stream di output.
L’effetto è il seguente:

$ php -q test.php
i=0
i=1
i=2
i=3
i=4
$

Detto questo, basta ricordare che valgono tutte le regole di programmazione PHP, salvo quelle legate all’ambiente Web/HTML, per avere a disposizione un potentissimo strumento di programmazione.

Buon divertimento.