PHP: Contare i files ricorsivamente

Un esempio che ritorna il numero di files inclusi anche nelle sottodirectory.
E' necessario utilizzare una funzione normalize_path per essere sicuri che la variabile $path contenga gli slash finali (-> http://codedump.jonasjohn.de/snippets/normalize_path.htm)

function count_files_recursive($path) {
$files = 0;
$dir = opendir($path);

if (!$dir){return 0;}
while (($file = readdir($dir)) !== false) {
if ($file[0] == '.'){ continue; }
if (is_dir($path.$file)){
$files += count_files_recursive($path.$file.DIRECTORY_SEPARATOR);
}
else {
$files++;
}
}
closedir($dir);
return $files;
}

Continua a leggere!

Questo esempio mostra come cancellare determinati tipi di file dopo un periodo di tempo. Questo può essere utile, per esempio, per cancellare files in cache.

// Definire la directory da pulire
$captchaFolder = 'temp/';
// I tipi di file da controllare (si può usare anche *.*)
$fileTypes = '*.jpg';
// Qui è possibile definire dopo quanti
// minuti i file saranno cancellati
$expire_time = 20;

foreach (glob($captchaFolder . $fileTypes) as $Filename) {
$FileCreationTime = filectime($Filename);
$FileAge = time() - $FileCreationTime;
if ($FileAge > ($expire_time * 60)){
print "The file $Filename is older than $expire_time minutes\n";
}
}

Continua a leggere!

Cryptiamo una stringa con una chiave utilizzando l'algoritmo XOR.

- Il parametro InputString specifica la stringa data in input.
- Il parametro KeyPhrase specifica la chiave da utilizzare.

function XOREncryption($InputString, $KeyPhrase){
$KeyPhraseLength = strlen($KeyPhrase);
for ($i = 0; $i < strlen($InputString); $i++){
$rPos = $i % $KeyPhraseLength;
$r = ord($InputString[$i]) ^ ord($KeyPhrase[$rPos]);
$InputString[$i] = chr($r);
}
return $InputString;
}

function XOREncrypt($InputString, $KeyPhrase){
$InputString = XOREncryption($InputString, $KeyPhrase);
$InputString = base64_encode($InputString);
return $InputString;
}

function XORDecrypt($InputString, $KeyPhrase){
$InputString = base64_decode($InputString);
$InputString = XOREncryption($InputString, $KeyPhrase);
return $InputString;
}

Continua a leggere!


Nel caso qualcuno non sia a conoscenza, il Web 2.0 è un termine coniato per descrivere l'immensa quantità di siti web oggi esistenti che permette agli utenti Internet di avere un posto dove partecipare interattivamente in tanti modi diversi. Degli esempi di Web 2.0 possono essere Flickr, dove gli utenti condividono foto, YouTube per i video o Wikipedia dove tutti possono contribuire ai contenuti di un articolo.
Di recente si sente parlare molto di Web 3.0, ma cosa si intende esattamente per 3.0?

Si intende la navigazione sul web totalmente (o quasi) in 3D. Se il Web 2.0 è basato sul lato "sociale" del mondo online, le applicazioni web 3.0 saranno focalizzate verso i gruppi. Tutto questo è possibile grazie allo sviluppo di processori più veloci e di un'alta velocità di accesso alla banda larga. Le applicazione web 3.0 saranno basate su una realtà virtuale, luogo in cui gli utenti saranno immersi nei contenuti e potranno provare qualsiasi cosa.
Sun Microsystem ha da poco reso pubblica l’anteprima della JavaFX, piattaforma di programmazione basata sulle RIE (Rich Internet Applications), ovvero applicazioni web che possiedono tutte quelle funzionalità tipiche di ogni computer senza però essere necessariamente installate sul disco fisso.
Ecco una nuova applicazione (ancora in fase di sviluppo) chiamata Cooliris che permette di farci vedere in anteprima come potrebbe presentarsi ai nostri occhi una navigazione web 3.0.

Continua a leggere!


Un post su una delle mie passioni preferite, il fotoritocco.
Essendo un campo molto particolare non basterà certamente un semplice tutorial come questo per illustrarvi tutto ciò che bisogna sapere, ma può essere un ottimo punto di partenza.

Il tutorial è visualizzabile a questo indirizzo.

Continua a leggere!

Photoshop: 41 effetti spettacolari


Ecco Photoshop quanto potente può essere in termini di foto editing. Ecco una raccolta di 41 spettacolari Tutorial in Photoshop che permettono di realizzare effetti davvero unici.
Poi il resto sta alla vostra immaginazione e fantasia.

Continua a leggere!

InputBox di Visual Basic 6.0 in C#

Sfortunatamente in C# non esiste una funzione InputBox() come in Visual Basic 6.0/.NET ma si può risolvere il problema aggiungendo il riferimento a 'Microsoft.VisualBasic.dll'.
In Visual Studio 2005/2008 andare in Esplora Soluzioni, tasto destro su Riferimenti -> Aggiungi Riferimento. Nel tab .NET selezionare Microsoft.VisualBasic e fare OK.

Ecco un esempio di una InputBox dove inserire un valore:


private void show_InputBox()
{
String Prompt = "Inserisci valore";
String Title = "Valore richiesto";
String Default = "";
Int32 XPos = ((SystemInformation.WorkingArea.Width / 2) - 200);
Int32 YPos = ((SystemInformation.WorkingArea.Height / 2) - 100);

String Result = Microsoft.VisualBasic.Interaction.InputBox(Prompt, Title, Default, XPos, YPos);

if (Result != "")
{
//Codice per valore inserito. Esempio:
MessageBox.Show("Valore inserito: " + Result);
}
else
{
//Codice per valore non inserito. Esempio:
MessageBox.Show("Valore non inserito");
}
}

Continua a leggere!

Un esempio su come cryptare e decryptare con una password, tramite l'algoritmo DES, un file di testo.

- Il parametro sInputFilename specifica il file da cryptare.
- Il parametro sOutputFilename specifica il file da decryptare.
- Il parametro sKey specifica la password da utilizzare.

Utilizzare i seguenti Namespace:

using System;
using System.IO;
using System.Security;
using System.Security.Cryptography;
using System.Text;


I metodi mostrati di seguito utilizzano il componente CryptoStream.

public static void EncryptFile(string sInputFilename, string sOutputFilename, string sKey)
{
FileStream fsEncrypted = new FileStream(sInputFilename, FileMode.Create, FileAccess.ReadWrite);

DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
ICryptoTransform desencrypt = DES.CreateEncryptor();
CryptoStream cryptostream = new CryptoStream(fsEncrypted, desencrypt, CryptoStreamMode.Write);

byte[] bytearrayinput = new byte[fsEncrypted.Length];
fsEncrypted.Read(bytearrayinput, 0, bytearrayinput.Length);
cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
cryptostream.Close();
fsEncrypted.Close();
}

public static void DecryptFile(string sInputFilename, string sOutputFilename, string sKey)
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

FileStream fsread = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read);
ICryptoTransform desdecrypt = DES.CreateDecryptor();

CryptoStream cryptostreamDecr = new CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read);
StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);
fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
fsDecrypted.Flush();
fsDecrypted.Close();
}

Continua a leggere!

Un esempio su come estrarre il nome del dominio da un indirizzo web.

- Il parametro Url specifica l'URL della pagina web.

public static string ExtractDomainNameFromURL(string Url)
{
if (!Url.Contains("://"))
Url = "http://" + Url;

return new Uri(Url).Host;
}



Anche se è un metodo più lento, mostro come fare la stessa cosa utilizzando le espressioni regolari:

public static string ExtractDomainNameFromURL(string Url)
{
return System.Text.RegularExpressions.Regex.Replace(
Url,
@"^([a-zA-Z]+:\/\/)?([^\/]+)\/.*?$",
"$2"
);
}

Continua a leggere!

Questo è un esempio su come salvare il contenuto di una pagina web in una stringa.

- Il parametro Url specifica l'URL della pagina web.

public string DownloadWebPage(string Url)
{
// Apre la connessione
HttpWebRequest WebRequestObject = (HttpWebRequest)HttpWebRequest.Create(Url);

// Si possono specificare i valori di un header aggiuntivo
// come l'user agent o il referer:
WebRequestObject.UserAgent = ".NET Framework/2.0";
WebRequestObject.Referer = "http://www.example.com/";

// Risposta della richiesta:
WebResponse Response = WebRequestObject.GetResponse();

// Apre lo stream:
Stream WebStream = Response.GetResponseStream();

// Crea un oggetto per la lettura:
StreamReader Reader = new StreamReader(WebStream);

// Legge l'intero contenuto dello stream:
string PageContent = Reader.ReadToEnd();

// Pulisce
Reader.Close();
WebStream.Close();
Response.Close();

return PageContent;
}

Continua a leggere!

Un semplice metodo per generare un hash MD5 da una stringa utilizzando un metodo di Encoding.

- Il parametro Input è la stringa data in input.
- Il parametro UseEncoding è il metodo di Encoding.

public static string CalculateMD5(string Input, Encoding UseEncoding)
{
System.Security.Cryptography.MD5CryptoServiceProvider CryptoService;
CryptoService = new System.Security.Cryptography.MD5CryptoServiceProvider();

byte[] InputBytes = UseEncoding.GetBytes(Input);
InputBytes = CryptoService.ComputeHash(InputBytes);
return BitConverter.ToString(InputBytes).Replace("-", "");
}


Un semplice metodo per generare un hash MD5 da una stringa utilizzando un encoding di default.

- Il parametro Input è la stringa data in input.

public static string CalculateMD5(string Input)
{
return CalculateMD5(Input, System.Text.Encoding.Default);
}

Continua a leggere!

Generazione di una stringa random di una determinata lunghezza.

- Il parametro size determina la dimensione della stringa.
- Il parametro lowerCase se true, genera una stringa in minuscolo.


public static string RandomString(int size, bool lowerCase)
{
StringBuilder RandStr = new StringBuilder(size);

// Ascii posizione iniziale (65 = A / 97 = a)
int Start = (lowerCase) ? 97 : 65;

// Aggiunge caratteri random
for (int i = 0; i < size; i++)
RandStr.Append((char)(26 * randomSeed.NextDouble() + Start));

return RandStr.ToString();
}


Generazione di un numero random.

- Il parametro Minimal determina il risultato minimo di numeri.
- Il parametro Maximal determina il risultato massimo di numeri.

public static int RandomNumber(int Minimal, int Maximal)
{
return randomSeed.Next(Minimal, Maximal);
}

Continua a leggere!

Per cancellare il testo di tutte le TextBox di un form, è possibile utilizzare questo codice:

private void clear_tBox()
{
foreach (Control c in this.Controls)
if (c is TextBox)
(c as TextBox).Clear();
}


Ovviamente se il TextBox è contenuto in un Panel, GroupBox, etc. è necessario specificare dove localizzare i controlli, quindi:

...
foreach (Control c in panel1.Controls)
...

Continua a leggere!


static void wLog(string msg)
{
try
{
if(!EventLog.SourceExists("Setup"))
{
EventLog.CreateEventSource("Setup", "DevEnne");
}
EventLog myLog = new EventLog();
myLog.Source = "Setup";

myLog.WriteEntry(msg, EventLogEntryType.Information);
}
catch
{
// gestione errori
}
}

Continua a leggere!