MiniWiki in PHP

Oggi, tanto per restare sul semplice, vediamo come realizzare un piccolo wiki in PHP che utilizzi la sintassi BBCode e faccia automaticamente il parsing di url e indirizzi email.

Cosa ci serve?

  • Un parser BBCode (un mio vecchio progettino)
  • Un file di testo che contenga il testo della paginetta Wiki
  • Il wiki vero e proprio, che si occupi di gestire le operazioni di modifica, ecc...

Il parser BBCode non è altro che una funzione php che riceve come parametro la stringa di cui fare il parsing: la stringa viene restituita dopo che la funzione si è occupata di tradurre i tag BBCode (scritti tra parentesi quadre) in codice html, per fare questo si ricorre ad una semplice str_replace().

$string = str_replace(BBCode,HTML, $string);

Per url e indirizzi email si ricorre a token ed espressioni regolari. C'è un sacco di documentazione online, senza contare che io con le espressioni regolari sono veramente una capra, quindi tralascio spiegazioni più dettagliate.

Oltre ad occuparsi dell'interpretazione dei BBCode il parser si occupa anche di "sicurezza": traduce i caratteri che delimitano i tag in entità html in modo che nessuno possa includere codice "cattivello" all'interno del wiki. Il parser è incluso nel file .zip che sarà linkato alla fine del post.

wiki.txt è il file dove andremo a memorizzare il testo del wiki. Nessun database quindi. Ogni volta che il wiki viene modificato il testo viene salvato in questo file.

Veniamo al bello.

Il file index.php, se chiamato senza parametri carica il testo presente in wiki.txt, lo parsa e lo stampa a video. Tutto questo in qualche riga di codice:

// STAMPA
if(!isset($_GET["op"]))
{
$fp = fopen("wiki.txt","r") or die("Errore di lettura.");
$parsed = "";
while ($data = fread($fp, 4096))
{
$parsed .= $data;
}
fclose($fp);
parsing($parsed);
print($parsed);
}

Se invece chiamiamo index.php col parametro GET op=edit (index.php?op=edit) ci viene mostrato il modulo di modifica del wiki, dove potremmo inserire tutto il testo che ci pare.

Una volta premuto il tasto "Salva", viene richiamato ancora una volta index.php, che riceve in POST il testo che abbiamo scritto. Il tutto viene salvato nel file wiki.txt, e ristampato a video.

// SALVA TESTO
if(isset($_POST["wiki"]))
{
$fp = fopen("wiki.txt","w") or die("Errore apertura file.");
fwrite($fp,$_POST["wiki"]);
fclose($fp);
}

Tutto in un file quindi. Piccolo, portabile e non sporca troppo in giro. :mrgreen:

Trovate un esempio qui e il codice (liberamente scaricabile) qua.

ATTENZIONE

Il codice presentato è poco pratico, sicuramente migliorabile e forse non molto sicuro. E' un esempio di quello che php permette di fare, non un wiki bello e pronto da usare: non ha alcun log delle modifiche, nessun UNDO e nessuna possibilità di proteggere il wiki con password. Questo script può andare bene per scopi che non vanno oltre quelli didattici.

Tra le altre cose questo post (e il codice relativo) è stato scritto in macchina in una 30ina di minuti...

Potenza della noia e del wardriving.

P.s.

Non è questo il post interessante che dicevo prima.

, ,
1 Star2 Stars3 Stars4 Stars5 Stars Vota!
Loading ... Loading ...
Condividi

Articoli che potrebbero interessarti

Spiacente, nessun post correlato per questo articolo

5 Commenti per “MiniWiki in PHP”

  1. MyAvatars 0.2 tommi ha detto:

    Carino, molto carino, ma occhio che i backslash prima degli apostrofi aumentano in maniera esponenziale ad ogni modifica ;)

  2. MyAvatars 0.2 Napolux ha detto:

    Eh, lo so, ma è solo una piccola demo ;)

  3. MyAvatars 0.2 tommi ha detto:

    sto modificando il tuo script per togliere il problema dei backslash e per fare in modo che il testo sia editabile direttamente dalla stessa pagina utilizzando un signor ajax. la prima persona che dice ‘uuuu come siamo web2.0′ verrà defenestrata. chiaramente se per te va bene, eh

  4. MyAvatars 0.2 Napolux ha detto:

    Autorizzo in toto l’utilizzo del codice e l’eventuale defenestrazione di persone.

    :mrgreen:

  5. MyAvatars 0.2 Coders4fun » Wordpress Plugin: Wiki-Dashboard 0.1 ha detto:

    [...] Parte del codice è basata sull’ottimo lavoro di Napolux, nell’articolo MiniWiki in PHP. [...]



Chiudi
Invia e-mail