Piero V.

Brainstorming su... PHP

La gente che conosco che si mette a programmare in PHP si lamenta dell’assenza delle guide valide in italiano…

In realtà non servono libroni per capire questo linguaggio… ma un po’ di introduzione generale fa sempre bene.

Cos’è PHP?

Stabiliamolo subito: “PHP è un linguaggio di programmazione di alto livello interpretato”.

Linguaggio di programmazione: semplifichiamo dicendo che il PHP è un insieme di istruzioni da eseguire.

Di alto livello: il livello in programmazione indica quanto il codice è comprensibile dagli umani: un livello alto vuol dire che è facilmente comprensibile (PHP, C++ etc…) mentre di basso livello vuol dire che è difficile da capire (Assembly etc…).

Interpretato: PHP non ha una fase di “compilazione”, cioè da PHP non si ricava un eseguibile che può essere fatto girare da solo sulla macchina, bensì PHP ha bisogno di un software chiamato interprete, che legge il PHP e lo esegue.

In realtà esistono dei compilatori, ma non è l’uso “ufficiale” di PHP.

Cosa non è PHP?

È importante capire anche cosa non è PHP.

PHP non è HTML: il PHP può mandare in output l’HTML, però come ogni linguaggio di programmazione è un linguaggio che, una volta eseguito, manda in output ciò per cui è programmato, e non il suo sorgente. … [Leggi il resto]

SQLite Quick Admin

Visto che mi ritrovo più di una volta a lavorare col database SQLite e PHP ho deciso di scrivere questa mini interfaccia grafica per questo tipo di database.

Infatti i primi software di questo genere che avevo trovato avevano due tipi di problemi: o erano talmente datati da non andare con PHP 5, oppure utilizzavano la versione 3 di SQLite, mentre PHP usa la versione 2.x.

Allora ho scritto questa peste di script. Perché è una peste? Perché non fa controlli di sicurezza di nessun tipo.

Per esempio è possibile fare attacchi di SQL Injection, oppure si può tranquillamente eliminare un database o una tabella senza che il software vi chieda la conferma.

Insomma: usate questo script solo in locale, altrimenti perfezionatelo.

Lo rilascio sotto il pubblico dominio (mi vergogno troppo di aver fatto una tale schifezza 😁 ).

Download: SQLite Quick Admin.

Nginx e PHP portable su Windows

Ogni tanto ho bisogno di avere un web server con PHP sulla mia chiave USB, così ho deciso di provare con Nginx, dato che ne ho sentito parlare molto bene ed è molto, molto leggero.

La prima soluzione che ho trovato si chiamava WNMP, cioè Windows Nginx MySQL PHP, però non mi piaceva anche perché rimetteva il suo copyright su istruzioni praticamente scaricate dal wiki di Nginx, così ho deciso di fare a modo mio.

Scaricare i pacchetti

Le istruzioni che dava lui sono già praticamente le stesse del wiki e le do anch’io, perciò riconosco che sono prese dalle pagine Install e php-fcgi on Windows del wiki di nginx.org e pertanto gli autori di questi step sono gli autori delle pagine del wiki.

Create una cartella sulla vostra chiavetta: il nome non è importante, ma meglio che il percorso sia breve e non contenga spazi.

Dentro a questa cartella create la cartella www. Dopo scaricate Nginx per windows ed estrate la cartella nginx-v... qui, quindi rinominatela in nginx. … [Leggi il resto]

Brute force in PHP

Attenzione: lo scopo di questo articolo è solamente didattico e l’autore non si assume nessuna responsabilità di ogni suo uso illecito.

Il brute force è una tecnica per trovare una password tentando tutte le combinazioni possibili di certi caratteri.

Ne avevo già parlato di come scriverne uno ma non era fatto molto bene.

Questo qui invece è completamente personalizzabile, ma vi lascio il codice che parla da sé:

<?php
/**
 * Questa funzione è eseguita quando hai una password completa.
 * Ovvero è un collback di esempio, nonché quello di default.
 *
 * @param string $stringa: La password
 * @return boolean: La password va bene?
 **/
function callback($stringa) {
}

/**
 * Questa funzione serve per annidare dei cicli for che provano le
 * varie possibilità di caratteri.
 *
 * @param string $stringa: La stringa di partenza
 * @param array $chars: I caratteri da provare
 * @param integer $lunghezza: Lunghezza a cui si vuole arrivare
 * @param mixed $callback: Il callback per verificare la password
 * @return string: La password, altrimenti se fallisce il booleano false
 */
function for_annidato($stringa, $chars, $lunghezza=1, $callback='callback') {
	$stringa_originale=$stringa;
	$found=false;

	for($i=0; $i<count($chars); $i++) {
		$stringa=$stringa_originale.$chars[$i];

		if(strlen($stringa)==$lunghezza) {
			$found=call_user_func($callback, $stringa) ? $stringa : false;
		} else {
			$found=for_annidato($stringa, $chars, $lunghezza, $callback);
		}

		if($found!==false) {
			break;
		}

	}

	return $found===false ? false : $found;

}

PHP: implode considerando anche le chiavi

Ogni tanto in PHP c’è il bisogno di unire gli array considerando anche le chiavi, così ho scritto questa funzione.

In realtà è banale ma ogni volta che comincio un progetto sono costretto a riscrivermela, così la scrivo qui.

/**
 * Mette insieme gli elementi di un array in una stringa considerando
 * anche le chiavi.
 *
 * @param string $glueval: stringa per unire chiave e valore
 * @param string $gluekey: stringa per unire le coppie
 * @param array $array: L'array da unire
 * @return string: L'array unito
 *
 * @author: Piero VDFN
 * @license: Public Domain
 */
function implode_keys($glueval, $gluekey, $array) {
	if(count($array)==0) {
		return '';
	}
	$r='';
	foreach($array as $key=>$val) {
		$r.=$key.$glueval.$val.$gluekey;
	}
	$r=substr($r, 0, -strlen($gluekey));
	return $r;
}

Questa funzione è utilissima per unire le variabili GET da mettere in un indirizzo partendo da un array.