Tag Archive - PHP

Random Password Generator, reloaded!

Era il 2 febbraio del 2009 quando per la prima volta è comparso un articolo riguardante un servizio tanto “stupido” quanto utile allo stesso tempo.

A due anni di distanza dalla sua prima versione (più che stabile, visto il lavoro che doveva svolgere), oggi vi presento una seconda versione che va incontro ad alcune richieste ricevute nel frattempo (grazie Marco, grazie Paolo, ndr): 9 caratteri, un ciclo in grado di mischiare meglio le lettere e i numeri disponibili, la possibilità di copiare e incollare la password priva di spazio finale (un piccolo bug che c’era nella precedente versione, almeno via Firefox e Chrome).

L’indirizzo è rimasto lo stesso:

services.gxware.org/passwd

nonostante lo script che sta alla base della pagina sia cambiato diventando decisamente più ristretto (script originale: TotallyPHP):


<?php
		function createRandomPassword($len) {
		if (!isset($len)) { $len = 9; };
		$chars = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		$charsLen = (strlen($chars)-1);
		srand((double)microtime()*1000000);
		$i = 0;
		$pass = '' ;
		while ( $i < $len ) {
			$num = rand() % $charsLen;
			$tmp = substr($chars, $num, 1);
			$pass = $pass . $tmp;
			$i++;
		}
    return $pass;
}
$password = createRandomPassword();
echo "$password";?>

La seconda delle 3 novità consiste nel fatto che -se necessario- potrete scaricare una differente versione del tool anche in locale, uno script in Visual Basic che vi permetterà -una volta avviato- di scegliere il numero di password da generare e salvarle in un file di testo, una per ciascuna riga così da poter rapidamente copiare ed incollare ciò che vi serve. Il codice è stato realizzato e pubblicato su Tek-Tips.com, ed è disponibile all’indirizzo:

services.gxware.org/passwd/randomPasswd.vbs

Per scaricarlo cliccate con il tasto destro sul collegamento e salvatelo in locale sul vostro PC (Salve destinazione come …)


'==========================================================================
'
' NAME: RandomPasswordGenerator.vbs
'
' AUTHOR: Mark D. MacLachlan , The Spider's Parlor
' URL: http://www.thespidersparlor.com
' DATE  : 7/29/2004
' MODIFICATIONS:
'         9/2/2008 Added dictionary object to ensure
'                  uniqueness of passwords
'
' COMMENT: Generates Random Passwords meeting "Complex" Requirements
'          By default will generate a 6 digit password.
'          Edit line passLen = 6 to change length
'==========================================================================
Option Explicit

Dim pGenNum, newpass, passList, inFlag, pgLength, x, fso, ts, passLen
Const ForWriting = 2
passLen = 9

'Give inFlag (input Flag) an initial value to ensure we run once
inFlag = "Seed"

Do While inFlag <> pGenNum
pGenNum = InputBox("How many passwords would you like to create?" & vbCrLf & _
"Enter a Numeric Value" & vbCrLf & _
"Blank Entry Will Cancel Script","Enter Number of Passwords to Create")

'Quit if no entry
If pGenNum = "" Then WScript.Quit

'Now clear inFlag so we can compare it to the pGenInput going forward
inFlag = ""
pgLength = Len(pGenNum)
'Enumerate each character to ensure we only have numbers
For x = 1 To pgLength
If Asc(Mid(pGenNum,x,1)) < 48 Or Asc(Mid(pGenNum,x,1)) > 57 Then
inFlag = ""
Else
'Build inFlag one character at a time if it is a number.
inFlag = inFlag & Mid(pGenNum,x,1)
End If
Next
'We made it through each character.  If not equal prompt for a number.
If inFlag <> pGenNum Then inFlag = ""
Loop

'Generate the number of required passwords.
'Use a dictionary object to ensure uniqueness.
Dim objDict
Set objDict = CreateObject("Scripting.Dictionary")
Do Until objDict.Count = CInt(pGenNum)
newpass = generatePassword(passLen)
If Not objDict.Exists(newpass) Then
objDict.Add newpass, "Unique Password"
passList = passList & newpass & vbCrLf
End If
Loop

'Now save it all to a text file.
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.CreateTextFile ("PasswordList.txt", ForWriting)
ts.write passList
MsgBox "Passwords saved to PasswordList.txt",,"Passwords Generated"
set ts = nothing
set fso = nothing

Function generatePassword(PASSWORD_LENGTH)

Dim NUMLOWER, NUMUPPER, LOWERBOUND, UPPERBOUND, LOWERBOUND1, UPPERBOUND1, SYMLOWER, SYMUPPER
Dim newPassword, count, pwd
Dim pCheckComplex, pCheckComplexUp, pCheckComplexLow, pCheckComplexNum, pCheckComplexSym, pCheckAnswer

NUMLOWER    = 48  ' 48 = 0
NUMUPPER    = 57  ' 57 = 9
LOWERBOUND  = 65  ' 65 = A
UPPERBOUND  = 90  ' 90 = Z
LOWERBOUND1 = 97  ' 97 = a
UPPERBOUND1 = 122 ' 122 = z
SYMLOWER    = 33  ' 33 = !
SYMUPPER    = 46  ' 46 = .
pCheckComplexUp  = 0 ' used later to check number of character types in password
pCheckComplexLow = 0 ' used later to check number of character types in password
pCheckComplexNum = 0 ' used later to check number of character types in password
pCheckComplexSym = 0 ' used later to check number of character types in password

' initialize the random number generator
Randomize()

newPassword = ""
count = 0
DO UNTIL count = PASSWORD_LENGTH
' generate a num between 2 and 10

' if num <= 2 create a symbol
If Int( ( 10 - 2 + 1 ) * Rnd + 2 ) <= 2 Then
pwd = Int( ( SYMUPPER - SYMLOWER + 1 ) * Rnd + SYMLOWER )

' if num is between 3 and 5 create a lowercase
Elseif Int( ( 10 - 2 + 1 ) * Rnd + 2 ) > 2 And  Int( ( 10 - 2 + 1 ) * Rnd + 2 ) <= 5 Then
pwd = Int( ( UPPERBOUND1 - LOWERBOUND1 + 1 ) * Rnd + LOWERBOUND1 )

' if num is 6 or 7 generate an uppercase
Elseif Int( ( 10 - 2 + 1 ) * Rnd + 2 ) > 5 And  Int( ( 10 - 2 + 1 ) * Rnd + 2 ) <= 7 Then
pwd = Int( ( UPPERBOUND - LOWERBOUND + 1 ) * Rnd + LOWERBOUND )

Else
pwd = Int( ( NUMUPPER - NUMLOWER + 1 ) * Rnd + NUMLOWER )
End If

newPassword = newPassword + Chr( pwd )

count = count + 1

'Check to make sure that a proper mix of characters has been created.  If not discard the password.
If count = (PASSWORD_LENGTH) Then
For pCheckComplex = 1 To PASSWORD_LENGTH
'Check for uppercase
If Asc(Mid(newPassword,pCheckComplex,1)) >64 And Asc(Mid(newPassword,pCheckComplex,1))< 90 Then
pCheckComplexUp = 1
'Check for lowercase
ElseIf Asc(Mid(newPassword,pCheckComplex,1)) >96 And Asc(Mid(newPassword,pCheckComplex,1))< 123 Then
pCheckComplexLow = 1
'Check for numbers
ElseIf Asc(Mid(newPassword,pCheckComplex,1)) >47 And Asc(Mid(newPassword,pCheckComplex,1))< 58 Then
pCheckComplexNum = 1
'Check for symbols
ElseIf Asc(Mid(newPassword,pCheckComplex,1)) >32 And Asc(Mid(newPassword,pCheckComplex,1))< 47 Then
pCheckComplexSym = 1
End If
Next

'Add up the number of character sets.  We require 3 or 4 for a complex password.
pCheckAnswer = pCheckComplexUp+pCheckComplexLow+pCheckComplexNum+pCheckComplexSym

If pCheckAnswer < 3 Then
newPassword = ""
count = 0
End If
End If
Loop
'The password is good so return it
generatePassword = newPassword
End Function

Ultima novità è l’integrazione del Random Password Generator all’interno degli strumenti “mobili” del Network GxWare, da poco trasferiti sotto il nuovo dominio network.gxware.org/iphone:

network.gxware.org/iphone/passwd.php

Questo vi permetterà di generare rapidamente password sufficientemente complesse avendo a portata di mano solo il vostro telefono ed una connessione a internet.

Per chi volesse invece continuare ad usare la prima versione, ho lasciato la possibilità di accedere alla precedente pagina iniziale semplicemente puntando il browser a services.gxware.org/passwd/v1.php.

Buon lavoro! :-)

UPDATE
Grazie al suggerimento dell’utente “caccolangrifata lo script è stato modificato includendo l’utilizzo di lettere maiuscole (oltre che minuscole, come di default) e la possibilità di specificare una differente quota caratteri della password. La modifica è stata operata sia sulla pagina del servizio standard che quella mobile! :-)

Efficient Related Posts: darlo in pasto al proprio CSS

Avevo letto di Efficient Related Posts qualche tempo fa su uno dei tanti blog che seguo via Google Reader, motivo per il quale mi ero deciso ad installarlo su questo WordPress, notando però l’impossibilità di farlo digerire al file CSS del tema, o almeno non nativamente. Ho deciso quindi di effettuare una piccola modifica all’interno del file PHP principale del plugin per includerlo in un DIV controllato -appunto- dal CSS custom di Standard Theme, installato su questo blog.

Il plugin va a posizionare un elenco puntato a fine di ciascun articolo e -una volta attivo- questo screenshot dovrebbe assomigliare molto a ciò che vi si presenterà davanti:

Efficient Related Posts - Visualizzazione senza modifiche al CSS

Questo è ciò che ho voluto fare io. Inutile dire che potrete modificare questo codice a vostro piacimento, magari rispettando altre modifiche operate sullo stesso WordPress precedentemente. Il CSS “intercetta” il DIV chiamato “boxcorrelati” e lo presenta così:


/* BOX ARTICOLI CORRELATI NEI POST */
.boxcorrelati {
background:transparent url(images/correlati.png) no-repeat scroll right top;
border:1px solid;
border-color:000000;
margin:8px 0;
padding: 4px 6px 2px;
font-family: Tahoma, sans-serif;
font-size: 1em;
width:550px;
min-height: 120px;
}

Per poter completare l’opera, occorrerà però andare a ritoccare il file “efficient-related-posts.php” che si trova nella cartella del plugin.

Alla riga 317 (faccio riferimento all’attuale versione 0.3.8) dovreste trovare:


$output = "<ul class='related_post'>{$output}</ul>";

seguita poi dalla 320 che riporta:


$output = "<h3 class='related_post_title'>{$settings['title']}</h3>{$output}";

Per poter caricare il DIV dichiarato nel file CSS, basterà modificare di poco le due stringhe, ottenendo quindi:


$output = "<ul class='related_post'>{$output}</ul></div>";

per la riga 317, seguita poi dalla 320 con:


$output = "<div class='boxcorrelati'><h3 class='related_post_title'>{$settings['title']}</h3>{$output}";

Salvate ora i file e caricateli nel vostro spazio FTP sostituendo quelli già presenti. Con un F5 sulla pagina dovreste riuscire a godervi il risultato, simile (seguendo i miei stessi passaggi) a questo scatto:

Efficient Related Posts - Visualizzazione con modifiche fatte al CSS

Buon lavoro :)

Standard Theme: box di ricerca e foto su Flickr in italiano

Un nuovo brevissimo articolo riguardante Standard Theme (il tema grafico di questo blog) e l’utilizzo di widget inclusi nell’installazione standard del tema, in particolare quello di ricerca e di pubblicazione delle ultime fotografie pubblicate sul proprio account Flickr.

In un’installazione lasciata in inglese (per scelta, senza nulla togliere al fantastico lavoro di WordPress Italia) anche i widget verranno proposti automaticamente nella stessa lingua. Dato che potreste mostrare al pubblico una sidebar in lingua nostrana, ha sicuramente senso tradurre “al volo” le due righe che regolano il titolo dei widget presi in esame ;)

Mano al file!

Entrambi i widget vengono dichiarati all’interno del file “functions.php“, a sua volta all’interno della cartella del tema.

Il listato di codice che permette la creazione del widget con il box di ricerca comincia alla riga 1153 e termina alla 1164. La stringa che determina il titolo dello stesso si trova alla riga 1156:


		<h3><?php _e('Search'); ?></h3>

Ovviamente al posto di “Search” andrà inserito un semplice “Cerca“.

Il secondo listato di codice che invece permette la creazione del widget che espone le ultime fotografie pubblicate sul proprio account Flickr, comincia alla riga 1041 e termina alla 1053 (senza considerare la parte di amministrazione). La stringa che determina il titolo dello stesso si trova alla riga 1049:


	<h3 class="widget_title"><?php _e('Photos on <span>flick<span>r</span></span>', 'stwpthemes') ?></h3>

Anche in questo caso basterà cambiare “Photos on” con un altrettanto semplice “Foto su“.

A questo punto sarà sufficiente salvare il file e caricarlo sul vostro spazio FTP confermando la sostituzione del vecchio file già presente. Un F5 sulla pagina per aggiornare e godetevi il risultato.

Buon lavoro :)

P.S. Inutile dire che lo stesso ragionamento vale per gli AdBox e gli altri widget rapidi dichiarati dal tema, vero? ;)

Caricare file su Dropbox via PHP

Comincio questa nuova settimana augurando un buon lunedì a tutti i miei lettori, spero che le coppie abbiano passato un buon S.Valentino, sottoscritto e dolce metà erano a Venezia in una bolgia decisamente insopportabile, non mi sentirei di consigliare a nessuno di rifarlo. Bando alle ciance, oggi argomento più o meno tecnico!

Forse è inutile che io mi dilunghi troppo su Dropbox, è un servizio che in tantissimi ormai conoscono, quasi irrinunciabile per gente che necessita di avere dati sempre a portata di mano, accessibili da qualsiasi postazione (iPhone compreso). Per chi ancora non sapesse di cosa sto parlando, consiglio la visione del video presente nel tour del sito ufficiale:

www.dropbox.com/tour

Giusto stamane ho avuto una necessità presto risolta grazie all’aiuto del PHP e del server che ospita questo blog e GxWare.org (p.s. benvenuto Yoda, presto più informazioni a riguardo ;)): server di un cliente fisicamente non raggiungibile e senza alcun client di posta o disco di rete condiviso tra le due macchine (mia, sua), necessità di spostare un file sul mio disco senza inventare cose turche, solo un Real VNC server disponibile. Il risultato? Una form, una libreria PHP e la possibilità di caricare direttamente sul mio spazio Dropbox il file semplicemente utilizzando Internet Explorer e visitando un indirizzo web preciso. Vi presento DropBox Uploader:

DropBox Uploader su GxWare.org

Basato sullo script originale di Jaka Jančar, permette il caricamento di qualunque file dal PC all’account Dropbox di qualsiasi utente, a patto che si abbiano le credenziali d’accesso di quest’ultimo.

Il servizio è disponibile per tutti alla pagina:

services.gxware.org/dropbox

Il funzionamento è piuttosto semplice. Si riempie il form in ogni sua parte (si può tralasciare il campo directory permettendo così allo script di caricare il file nella root di Dropbox) e si conferma il tutto con il pulsante “Carica file sul tuo account Dropbox“. Date ora una occhiata all’icona del servizio nella tray del vostro sistema operativo, noterete attività e -dopo qualche secondo- il popup che vi avvisa che il file (caricato chiaramente da web) è stato aggiornato.

Inutile dire che nessun accesso verrà memorizzato, vero? Non c’è motivo alcuno per farlo, i vostri file sono al sicuro. Nel caso in cui non vi fidiate abbastanza potete sempre scaricare libreria e codice PHP di esempio dal sito web dell’autore originale e costruire il vostro uploader.

Buon lavoro :)

Aggiornare WordPress su WebPerTe

Problema comune di tutti gli utilizzatori di WebPerTe (o quasi) è ogni nuovo rilascio di WordPress. La funzionalità di Core Update automatica offerta dal noto CMS non funziona correttamente sulle loro macchine a causa di un paio di accortezze da prendere (una volta per tutte le successive poi) prima di lanciare l’operazione.

Safe Mode

Tanto per capirci:

The PHP safe mode is an attempt to solve the shared-server security problem. It is architecturally incorrect to try to solve this problem at the PHP level, but since the alternatives at the web server and OS levels aren’t very realistic, many people, especially ISP’s, use safe mode for now.

fonte: it2.php.net/features.safe-mode

Non più esistente nella versione 6 di PHP che uscirà prossimamente, per il momento viene utilizzato su alcune macchine che offrono hosting condiviso. WordPress ha però bisogno che il Safe Mode sia disabilitato per poter aggiornarsi correttamente. Per questo motivo sarà necessario scrivere a WebPerTe (aprite un ticket) per chiedere che venga disattivato sui vostri domini (nel mio caso 2 presso di loro) attendendo una risposta che arriverà sicuramente in breve tempo.

PHP Memory Limit

A questo proposito propongo la lettura di un particolare documento presente nel codex di WordPress:

codex.wordpress.org/Editing_wp-config.php#Increasing_memory_allocated_to_PHP

Sappiate che 32M non bastano per mandare avanti la baracca in modo corretto, almeno su WebPerTe. Aprite quindi il wp-config.php del vostro blog e sotto la stringa di define della lingua aggiungete quella che limita la memoria utilizzata da WP portandola a “qualcosuccia in più“:


define('WP_MEMORY_LIMIT', '48M');

Nel mio caso ho inserito 48M perché suggerito dallo stesso staff di WebPerTe. Visto che dovete aprire un ticket per il Safe Mode perché non chiedete conferma anche della quantità di memoria che potete sfruttare? ;)

Fatto questo caricate via FTP il wp-config.php modificato e sostituitelo al vecchio, provate ora ad andare in Tools / Upgrade e lanciate l’aggiornamento del CMS, noterete dopo qualche minuto la rincuorante sequenza di soliti messaggi dati da WP:

  • Upgrade WordPress
  • Downloading update from http://wordpress.org/wordpress-2.8.3.zip.
  • Unpacking the update.
  • Verifying the unpacked files
  • Installing the latest version
  • Upgrading database
  • WordPress upgraded successfully

Buon lavoro e buon aggiornamento :)

Page 1 of 212»