Piero V.

PHP: non ci sono più abituato

In questi giorni nel poco tempo libero sto cercando di sistemare i problemi del comment center e di aggiungere qualche nuova funzionalità.

Nell’ultimo anno ho scritto sempre meno software in PHP e si è visto anche dagli aggiornamenti per i miei plugin di Flatpress. Mi sono invece dedicato molto al game programming in C++ più qualche lavoretto in C.

Ciò ha fatto molto bene alle mie facoltà da programmatore (o se non posso essere definito così almeno lasciatemi la libertà di chiamarmi almeno «scrittore di codice» 😌 ).

C e C++ sono linguaggi compilati e fino a poco più di un anno fa ero stato a contatto prettamente con linguaggi interpretati o linguaggi di scripting.

La cosa in cui avevo avuto più problemi era la gestione della memoria, infatti negli script è gestita automaticamente. C++ mi ha insegnato a pensare se veramente serve una variabile oppure no, mi ha insegnato la tipizzazione e l’uso della memoria dinamica. Adesso le apprezzo molto, nonostante i problemi iniziali.

Tuttavia non è stata questa la cosa più utile. Ciò che più si impara con un linguaggio come C++ è che non ci si può permettere di fare un codice disordinato. … [Leggi il resto]

Vandalismi nei commenti

Recentemente ho avuto più di una volta dei vandalismi da parte di un utente che si faceva chiamare “Repliche orologi”, chissà come mai 😊

Beh, caro “Repliche orologi”, mi rivolgo direttamente a te: mi hai fatto 264 commenti, quasi tutti molto vicini con il tempo. Sei riuscito a passare non solo il mio captcha ma anche Akismet copiando il contenuto direttamente dai post.

Ovviamente per fare tutti quei commenti penso tu sia un bot, però ti avvisa lo stesso: prova a premere un’altra volta il tasto di invio dei commenti e ti ritroverai un bel filtro che censurerà il tuo username e il tuo sito, questo solo per te!

Sono disposto ad aggiungere questa funzionalità al comment center, perché una volta e pochi post li posso accettare, ma la seconda e una cosa come più di 200 post no.

Comunque se lo vuoi sapere anche io sono in grado di scrivere degli script e non appena mi sono accorto dei tuoi commenti ci ho messo poco a eliminarli.

Per chi volesse, questo è uno script PHP che consente di fare la lista dei commenti ed eliminare file multipli con un account su un server FTP.

È solo una parte base, ovvero la lista e l’eliminazione tramite un array, ma ci si mette poco tempo, specialmente se si sa il periodo di tempo in cui un bot ha agito, a eliminare tutti i commenti in un solo click.

Singleton in PHP + annesso bug

È da un po’ di tempo che sto programmando in C++ ma oggi sono tornato a programmare un po’ in PHP.

Devo dire che ormai mi sembra strano non dover dichiarare più variabili, non aver più gli header e poter implementare i metodi fuori dalla classe stessa.

Però mi ha fatto bene questa pausa di PHP perché ho imparato una tecnica molto interessante, quella delle “singleton”.

In pratica le singleton sono classi che possono avere una sola istanza.

Il loro metodo si riduce praticamente ai metodi statici, però sono più eleganti, secondo me.

Ci sono due principali metodi in C++ per fare i singleton: impostare il costruttore private, in modo da impedire la chiamata al di fuori della classe e dopo chiamarlo o da un metodo statico oppure tramite l’overriding dell’operatore new.

Implementare il primo metodo in PHP è facilissimo, mentre implementare il secondo dovrebbe essere fattibile tramite il metodo magico __call. Però non funziona, ma per farvi vedere come sarebbe lo metto lo stesso nel codice, che è il seguente:

<?php

class MiaClasse {

	/**
	 * L'istanza del singleton.
	 *
	 * @var MiaClasse object
	 * @access private
	 */
	private static $msSingleton = null;

	/**
	 * Un numero per fare una prova.
	 *
	 * @var integer
	 * @access public
	 */
	public $prova = 0;

	/**
	 * Il costruttore.
	 *
	 * È privato perché così si può creare una nuova istanza
	 * solamente da altri metodi di questa classe.
	 */
	private function __construct()
	{
		echo "Costruisco la classe\n";
	}

	/**
	 * Ritorno (o creo, se non esiste) il singleton.
	 */
	public static function getSingleton()
	{
		if(is_null(self::$msSingleton)) {
			self::$msSingleton = new MiaClasse();
		}

		return self::$msSingleton;
	}

	/**
	 * Fallback per le chiamate ai metodi privati.
	 *
	 * Se per caso si prova a creare una nuova istanza, tramite
	 * questa funzione chiamo sempre getSingleton.
	 * È un po' come l'overriding dell'operatore new in C++.
	 */
	public function __call($name, $arguments)
	{
		echo '__call called. $name = ' . $name;
		if($name == '__construct') {
			return self::getSingleton();
		}
	}

}

$a = MiaClasse::getSingleton();
$a->prova = 20;

$b = MiaClasse::getSingleton();
echo $b->prova . "\n";
$b->prova = 27;
echo $a->prova . "\n";

$c = $a->__construct();
$c->foo = 32;
echo $a->foo . "\n";

/*$d = new MyClass();
echo $d->foo . "\n";
$d->foo = 29;
echo $a->foo . "\n";*/

Come vedete se modifico $b modifico anche $a. … [Leggi il resto]

Note sul routing degli URL in PHP

L’uso del mod_rewrite è una pratica molto diffusa e il “routing degli URL” è alla base di molti framework PHP.

Per routing degli URL intendo associare a miosito.tld/aaa/bbb/ccc/ddd l’azione bbb del controller aaa passando i parametri ccc e ddd.

Per esempio per un blog, per poter modificare un post l’URL potrebbe essere miosito.tld/admin/edit/mio-id-post.

Arrivare fino a questo passo è abbastanza facile.

In pratica si riscrivono gli URL tipo miosito.tld/etc/etc in miosito.tld/index.php/etc/etc.

Per fare ciò bisogna ricorrere alla configurazione del webserver.

Si otterrà quindi la variable PHP $_SERVER['PATH_INFO']. Se non la ottenete potete usare anche $_SERVER['REQUEST_URI'] eliminando il prefisso del sito (Flatpress utilizza questo metodo).

Supponiamo di avere in $url allora la parte con i parametri.

Ora divido l’URL con le slash in modo da ottenere un array con tutti i vari parametri.

$url=explode('/', $url);

Arrivati a questo punto ci sono due diversi metodi per continuare: il primo è eliminare tutti gli elementi vuoti ovvero quelli creati per esempio dalle doppie slash, il secondo è quello di tenerli però pulire l’array in modo da avere almeno i primi due elementi pieni. … [Leggi il resto]

Nuovi interessi sul fronte PHP

Tempo fa, negli obbiettivi di Agosto avevo parlato di un certo “VDFN System”.

Alla fine non ho avuto il tempo fisico per lavorarci, però ci ho pensato un po’.

Sono giunto alla conclusione di rimandare il progetto a tempo indeterminato se non proprio eliminarlo in favore di un framework già pronto.

Voglio infatti approfondire la programmazione che si basa sul paradigma MVC: Modello - Vista - Controllore (guardate Wikipedia per ulteriori informazioni).

Ho trovato due framwork che mi vanno particolarmente a genio: CakePHP che è molto completo e ho già iniziato a studiare, oppure TinyMVC che è molto molto più leggero ma non mi darebbe “vincoli”.