rss
twitter
  •  

Gestire le eccezioni in PHP – Seconda Parte

| Posted in Php |

0

php logo1 Gestire le eccezioni in PHP – Seconda Parte

Dopo aver, nella prima parte, presentato giusto una introduzione su come gestire le eccezioni in php (blocco try-catch), proviamo a scendere più in dettaglio in questa seconda parte.

Come sempre, facciamo parlare un esempio :

<?
try {
  $var = -5;
  $var2 = -3;
  if ( $var < $var2 )
  {
    throw new Exception($var. " è inferiore a " .$var2. "<br />");
    echo "Stampa qui!!";
  }
}
catch (Exception $excp) {
  echo "Attenzione!! Trovata eccezione:<br />", $excp;
}
?>

che, se lanciato, produrrà a video il seguente output :

Attenzione!! Trovata eccezione:
exception 'Exception' with message '-5 è inferiore a -3
' in c:\programmi\php\www\err.php:7 Stack trace: #0 {main}


Si tratta di uemplice script che racchiude delle istruzioni in un blocco try. Il fatto di aver lanciato all'interno del blocco un'eccezione tramite throw, ha determinato l'impossibilità di eseguire le istruzioni seguenti che troviamo nello stesso blocco try. Ecco perchè la stampa ‘Stampa qui!!’ non compare nell’output.
Poichè abbiamo istanziato l’oggetto che appartiene alla classe Exception, tale istanza è riutilizzabile e, infatti, lo ritroviamo al di fuori del blocco di try dove diviene argomento di un'istruzione e non ne blocca l'esecuzione.

Ma la gestione delle eccezioni si basa su una serie di variabili e metodi più importanti da utilizzare nella gestione delle eccezioni. Partiamo con le variabili :

  • message: non è altro che il messaggio di errore da passare come argomento al costruttore della classe.
  • line: linea esatta del blocco di codice in cui viene generato l'errore.
  • file: nome del file PHP in cui si origina l'errore gestito tramite eccezione.

Attenzione perchè queste tre variabili sono "protette" (non potranno essere riscritte nè modificate).

Veniamo ora ai metodi :

  • getMessage(): lo abbiamo descritto nella prima parte : prende come parametro la notifica di errore che viene generata dal controllo delle eccezioni e lo invia, come parametro, al costruttore della classe di riferimento.
  • getLine(): metodo che permette il rinvio alla riga di codice in cui si verifica l'errore.
  • getTrace(): metodo che rinvia ad una tabella con le caratteristiche dell'errore.
  • getTraceAsString(): metodo che svolge una funzione similare al precedente creando una stringa con lo stesso contenuto di informazioni.

Infine va ricordato che il metodo getTrace() presenta 6 differenti elementi costitutivi :

  • file: documento in cui si verifica l'errore.
  • line: riga di codice in cui si verifica l'errore.
  • function: funzione coinvolta nell'errore.
  • class: classe coinvolta nell'errore.
  • type: modo in cui viene richiamato il metodo che potrebbe essere statico o dinamico.
  • args: argomenti passati al metodo raccolti in una tabella associativa.

Nella terza ed ultima parte vedremo, dopo aver digerito variabili, metodi e altro, come realizzare una classe vera e propria per gestire le eccezioni.

Programmazione – 8 eccellenti PHP IDE a confronto

| Posted in Php, Programmazione |

0

Non è un caso che spesso pubblichi articoli sul php. Nonostante recenti ricerche lo hanno piazzato (dopo Java e C) solo al terzo posto come linguaggio di programmazione più utilizzato, se volete realizzare una applicazione per web (che sia un sito, un blog, un forum, un social ecc) difficilmente potrete prendere in considerazione strade diverse.

Io propongo sempre, come esempio, Facebook. Milioni di utenti, petabytes di contenuti : tutti gestiti e organizzati con PHP. Non è un caso.

Logicamente il php chiama l’html e il javascript per il front-end e l’sql per il back-end. Da questo non si sfugge. Solo php porta a nulla, in pratica.

InfoWorld ha dedicato un articolo molto interessante al confronto di 8 fra i più importanti tools e frameworks per programmare in php :

- ActiveState’s Komodo IDE

CodeLobster PHP Edition

Eclipse PHP Development Tools (PDT)

MPSoftware’s phpDesigner

- NetBeans IDE for PHP

NuSphere’s PhpED

- WaterProof’s PHPEdit

Zend Studio

Avevo dedicato un articolo alla presentazione di 6 eccellenti frameworks, ma un’ informazione interessante e molto utile può derivare dall’immagine sottostante che riassume il confronto effettuato fra gli 8 tools prima citati basandosi su 6 fattori chiave per la valutazione :

  • Facilità d’uso
  • Strumenti e Funzionalità a disposizione
  • Supporto Web e Sql
  • Documentazione
  • Installazione
  • Valore

Confronto Tool 1 Programmazione   8 eccellenti PHP IDE a confrontoConfronto Tool 2 Programmazione   8 eccellenti PHP IDE a confronto

Pur reputando molto interessante il risultato del confronto (che incorona Zend e Eclipse pur mostrando un alto punteggio per tutti),resto dell’avviso che la scelta di un framework è, nonostante tutto, fortemente condizionata dai differenti modi di programmare e lavorare di ciascuno di noi.

Come sottolineato nell’articolo di InfoWorld le idiosincrasie di ognuno la fanno da padrone e se c’è chi stravede per la funzionalità di un tool, c’è chi la odia a tal punto da non poter lavorare con quel framework.

E voi cosa ne pensate? Quale framework utilizzate? Per i dettagli approfonditi su ogni tool leggetevi l’articolo di InfoWorld segnalato prima.

Gestire le eccezioni in PHP – Prima Parte

| Posted in Php |

1

php logo Gestire le eccezioni in PHP – Prima Parte

Credo che servirà suddividere l’argomento in tre parti essendo delicato e anche abbastanza importante.

PHP 5

La versione 5 del PHP ha introdotto una nuova gestione degli errori tramite eccezioni; si tratta di un approccio che chi, come me, proviene dal mondo Java, non avrà difficoltà a comprendere.

Infatti si è riusciti a separare nettamente, durante lo sviluppo, la gestione degli errori dalla logica dell’applicativo. Come è giusto che sia.
Pensate che fino al PHP 4 non esisteva una gestione degli errori con eccezioni, ma si scriveva il codice, lo si testava, e si cercavano gli errori per applicare la soluzione adeguata. A tentativi, insomma.
Occorreva, a detta di tutti, uno strumento in grado di rendere molto più snella e veloce l’analisi del codice al fine di razionalizzare i tempi di intervento per errori più o meno evidenti.

Exception Handling

Come per Java, si è introdotta la logica dell’Exception Handling che inserisce nel controllo delle eccezioni il try (prova), throw (lancia) e catch (cattura).

In base a questa logica, l’azione di controllo svolta dalla triade suddetta potrebbe portare a due situazioni ben distinte :

- eccezione rilevata (catching positivo) : le istruzioni previste di seguito all’errore non sono escluse dal ciclo di esecuzione .

eccezione non rilevata (Uncaught exception) : gli input previsti sono blocati e non producono effetti.

Come sempre, un esempio, vale più di cento parole di spiegazione :

<?
try {
  print 'Stampa messaggio errore.';
  throw new Exception( '<br />Contollo eccezioni.', 100);
  print "Blocca tutto!!";
}
catch(Exception $var) {
  print $var->getMessage();
}
?>

Se provate a salvare questo codice in un file, ad esempio, eccezione.php visualizzerete come output le seguenti stringhe:

‘Stampa messaggio errore’

‘Contollo delle eccezioni.’

Vediamo in dettaglio cosa è accaduto.

La stampa della prima stringa (Stampa messaggio errore) è ovvia poichè l’istruzione relativa non è sottoposta ad alcun controllo nè produce eccezioni.

Quindi, viene lanciata un’eccezione che subito passa la palla ad un’azione di catching. Ecco perchè l’istruzione immediatamente sottostante (stampa a video della stringa “Blocca tutto!!”) non è eseguita.
Quindi, come detto, è effettuato il catching dell’eccezione con il passaggio ad una variabile ($var).
Alla fine, il metodo getMessage() si prende la variabile prodotta dall’azione di catching accettandola come parametro e stampa a video il valore (la stringa, in tal caso).

Ecco motivato l’output che visualizzate lanciando questo test.

La prima parte si conclude qui, volendo essere solo una piccola introduzione ad un argomento più profondo che sviscereremo meglio nella seconda e terza parte.

Wordpress : come dotare un post di uno stile diverso dagli altri

| Posted in Php, Wordpress, css |

0

stile post1 Wordpress : come dotare un post di uno stile diverso dagli altri

Il vostro blog ha moltissimi post pubblicati e non tutti dello stesso tipo? Bè, perché non applicare stili diversi a post di ‘stampo’ differente? Mi vengono in mente i post classici,e i tutorial, ad esempio. Potrebbe essere un’idea e nemmeno troppo difficile da realizzare. La funzione post_class() ci dà una mano, in tal senso.

Prima di partire, piccolo backup di quello che toccate perché è sempre meglio….

A me gli occhi!

Aprite il file single.php nel vostro editor e cercate la parte di codice riga dove viene effettuato il loop dei vari post. Sostituitela interamente con questa porzione di codice :

<?php if (have_posts()) : ?>
<?php while (have_posts()) :  the_post(); ?>
<div <?php post_class() ?> id="post-<?php  the_ID(); ?>">
<h3><a href="<?php the_permalink()  ?>"><?php the_title(); ?></a></h3>
<?php  the_content(); ?>
</div>
<?php endwhile; else: ?>
<?php _e('Sorry, nessun post obbedisce ai tuoi criteri.'); ?>
<?php  endif; ?>

Concentratevi sulla riga 3 dove è presente la funzione post_class(). Dalla versione 2.8 di Wordpress, questa funzione introduce classi css per personalizzare, appunto, un post.

Tra cui aggiunge :

  • .hentry
  • .sticky
  • .category-tutorials
  • .tag-wordpress

Capite subito che con queste nuove classi, potrete dotare un singolo post di uno stile tutto suo e diverso dal resto. Infine, parte fondamentale sempre sulla riga 3 è :

id=”post-< ?php the_ID(); ?>“. Inserendo l’ID del post da personalizzare , potrete sbizzarrirvi. Ecco un esempio relativo ad un fantomatico post-876 :

#post-876{
background:#ccc;
}

Dubbi?

Wordpress : come mostrare un contenuto solo ad utenti registrati

| Posted in Php, Wordpress |

8

Condividi

Come tutti ben sapete, Wordpress consente ai lettori di creare un account e registrarsi al vostro blog. Una possibilità che avete per attirare su questo i lettori è quella di mostrare alcuni contenuti o parte di questi solo ad utenti già registrati.

Vediamo come fare utilizzando gli shortcodes tanto cari a questa piattaforma.

Aprite il file functions.php e incollate la seguente funzione in fondo :

function member_check($atts, $content = null) {
if (is_user_logged_in() && !is_null($content) && !is_feed()) {
return $content;
} else {
return 'Spiacente, questa sezione è disponibile solo per i nostri membri. Clicca qui per registrarti.';
}

add_shortcode('member', 'member_check');

Abbiamo così creato il nostro shortcode da utilizzare quando e dove vogliamo con tanto di invito alla registrazione abbastanza esplicito come avrete notato nel codice.
Ad esempio, se in un articolo volessimo ometterne una parte ad utenti non registrati :

[member]
Questo testo sarà visibile solo ad utenti registrati..
[/member]

Tutto molto facile , come avrete intuito.

I Custom Fields in Wordpress : cosa sono ed esempi pratici.

| Posted in Php, Wordpress |

0

Custom Fields1 I Custom Fields in Wordpress : cosa sono ed esempi pratici.

Mi son reso conto, leggendo post e forum in giro per la rete, che la conoscenza dei Custom Fields su Wordpress è davvero scarsa o molto approssimativa.

Vuoi perché molti evitano di smanettare sul codice affidandosi solo ai salvifici plugins o vuoi perchè se ne parla, effettivamente molto poco.

Allora ho pensato che un articoletto all’argomento lo si poteva pure dedicare…ed eccomi qua. Questo non è logicamente un tutorial sull’argomento, ma un’infarinatura di base non fà mai male.

Come mostrato nell’immagine introduttiva, i custom fields (o campi personalizzati nelle versione in italiano) sono costituiti da quella sezioncina che trovate nel mezzo o in fondo alla pagina dove scrivete un articolo su Wordpress.
Anche se la stragrande maggioranza degli utilizzatori di WP non li usano, il fatto che esistano da tempo qualche cosa deve pur significare!

Cosa Sono i Custom Fields

In sostanza, i campi personalizzati non sono altro che contenitori di informazioni aggiuntive associabili ad uno specifico post (o pagina). Tali informazioni (testo o immagini) possono essere riprese e sfruttate per essre visualizzate in un punto qualsiasi del tema utilizzato per il vostro sito/blog.
Va subito detto che un custom field si compone di

- Key (chiave) : è banalmente il nome assegnato al campo personalizzato.

- Value (valore) :  è il valore da associare alla chiave. Può essere un testo oppure un’immagine.

Un custom field può essere scelto dai valori che compaiono nel menu a tendina della sezione in oggetto oppure potete crearne uno nuovo (Aggiungi Campo Personalizzato). Dopo averlo creato la prima volta, su ogni post successivo vi comparirà nel menu a tendina anche il campo appena creato. Va precisato che alcuni valori che trovate già nel menu a tendina sono dovuti ai plugins da voi installati. Anche questi ultimi li sfruttano per funzionare…

Le funzioni

Wordpress mette a disposizione alcune utili funzioni per gestire al meglio i custom fields.
Se vogliamo, ad esempio, avere un elenco dei custom fields a disposizione per un post utilizzremo la funzione the_meta().

Se associamo ad un post preciso :

<?php the_meta(); ?>

L’output sarà del tipo :

<ul class='post-meta'>
<li><span class='post-meta-key'>test1-name:</span> test1-value</li>
<li><span class='post-meta-key'>test2-name:</span> test2-value<;/li>
</ul>

dove si capisce chiaramente che quel post ha associati due campi personalizzati con tanto di nome e valore indicati.

Accanto a questa funzione presa ad esempo ce ne sono altre fondamentali per gestire via php i custom fields (mostrate poi nei due esempi qui sotto).
Eccovi la pagina ufficiale di Wordpress a tal proposito.

Esempi di Applicazione

Vediamo, ora, due esempi pratici che vi mostreranno l’utilità dei custom fields.

1. Visualizzare i post solo con thumbnail e introduzione

Ammettiamo che vogliate mostrare nella vostra Home non i vari articoli per intero, ma solo un riassunto accompagnato da un’immagine e un link al permalink del post. Come farlo?
I custom fields calzano a pennello-
Occorre creare, se già non lo avete fatto prima, un campo ‘image’ per un post così, dopo, lo avrete a disposizione per ogni post. A tal punto, non vi resta che specificare per la chiave ‘image’ di ogni post l’url di un’immagine diversa : sarà, in pratica, l’immagine che utilizzerete come thumb.

Fatto questo, passate al template. Dovrete, infatti, far apparire le immagini nel layout richiamando il valore del custom field ‘image’.

Posizionatevi sempre all’interno del loop che cicla i post da visualizzare nella Home :

<?php $mythumb = get_post_custom_values("image"); ?> //state recuperando il valore del custom field image
<a href="<?php the_permalink() ?>">
<img src="<?php echo $mythumb; ?>" /> // inserite l'immagine scelta per ogni post
<?php the_excerpt(); ?> // visualizzate solo l'introduzione del post come previsto
</a>

2. Pubblicare post con una expiration date precisa

Supponiamo vogliate che alcuni dei vostri post (mi vengono in mente quelli legati a dei contest o simili) siano pubblicati e visibili solo fino ad una certa data scelta da voi. Da quel momento in poi non verranno cancellati, ma semplicemente non saranno più visibili sul blog.

Create un custom field con chiave ‘expiration’ e valore una data nel formato mm/dd/yyyy 00:00:00. Logicamente, settate la data di expiration per quei post che vi interessano. Qundi agite sempre sul loop famoso :

       $expirationtime = get_post_custom_values('expiration'); //state recuperando il valore del custom field expiration
         if (is_array($expirationtime)) {
             $expirestring = implode($expirationtime);
         }

         $secondsbetween = strtotime($expirestring)-time();
         if ( $secondsbetween > 0 ) {
             // Mostrate quello che desiderate se il post dovrà essere visibile
             the_title();
             the_excerpt();
         }
     endwhile;
endif;
?>

C’ chi addirittura li ha usati per risolvere il discorso traduzione di articoli da una lingua all’altra….

Per domande/dubbi ci sono i commenti. Se riesco vi aiuto volentieri.

PHP : Le iterazioni con il for, while, do-while e foreach

| Posted in Php |

0

php logo1 PHP : Le iterazioni con il for, while, do while e foreach
Credo che i cicli siano un elemento fondamentale per qualsiasi linguaggio di programmazione poichè consentono l’esecuzione di operazioni in maniera ripetitiva.
Si tratta di una vera e propriia necessità cui ogni programmatore deve ricorrere spessissimo soprattutto dovendo elaborare e gestire enormi moli di dati.

Anche il php ha i suoi costrutti utili per iterare dati e, in relazione a cosa e come si deve elaborare, conviene utilizzare un metodo piuttosto che un altro. Ma vediamoli in dettaglio.

Ciclo For

Questo costrutto, del tutto simile a quello previsto in altri linguaggi, sfrutta la parola chiave for, seguita, fra parentesi, dalle istruzioni di definizione del ciclo. Quindi, seguono, racchuse fra parentesi graffe, tutte le istruzioni da eseguire ripetutamente fino a conclusione del ciclo.
Vediamo in dettaglio le tre istruzioni fra le parentesi tonde (e separate da punto e virgola) :

- la prima viene eseguita una sola volta, all’inizio del ciclo;
- la terza viene eseguita alla fine di ogni iterazione del ciclo;
- la seconda è necessariamente una condizione che è valutata prima di ogni iterazione del ciclo: se risulta falsa, il ciclo si interrompe ed il controllo passa alle istruzioni che seguono la chiusura delle parentesi graffe. Se, logicamente, è vera, vengono eseguite le istruzioni fra parentesi graffe.

Va precisato che potrebbe accadere che tale condizione risulti falsa fin dal primo test: le istruzioni fra le parentesi graffe non verranno mai eseguite.

In sostanza si definisce un ‘contatore’ che, con la prima istruzione è inizializzato, con la seconda lo si confronta con un valore limite, con la terza lo si incrementa ad ogni ripetizione di ciclo.

Unica accortezza : evitare la classica situazione di loop ovvero in cui non si riesce mai ad uscire dal ciclo perchè la seconda condizione è sempre verificata!
Sappiate che un simile errore costringe a chiudere un programma o addirittura a spegnere la macchina, ma per fortuna, gli script PHP hanno un limite di tempo per la loro esecuzione, oltre il quale si arrestano.

Vediamo un esempio banalissimo :

che dà come risultato 01234

Era sufficiente impostare il ciclo così for ($variabile = 1; $variabile > 0; $variabile++) per avere il classico loop infinito di cui parlavo prima.

Ciclo While

Seconda alternativa.  E’ un tipo di ciclo più semplice nella sua costruzione poichè la sintassi prevede solo una parola chiave while e una condizione, fra parentesi, da valutare. Inoltre, fra parentesi graffe c’è, come al solito, il codice da eseguire fino a quando la condizione resta vera. Meglio proporre l’esempio precedente per chiarire il tutto.

$variabile = 0;
while ($variabile &lt; 5) {
 
echo $variabile;
 
$variabile++;
}

In sostanza, Il ciclo while, rispetto al for, non mette a disposizione la prima e la terza istruzione (inizializzare e  incrementare il contatore). Pertanto, siamo noi a doverle prevedere nel codice come mostrato nell’esempio qui sopra.

Ciclo do-While

Come per il ciclo for, anche per il while appena descritto, non è garantito che il codice tra parentesi graffe sia eseguito almeno una volta. Qualora volessimo questo, occorrerà scegliere un’altra forma, simile al while, con cui siamo sicuri che il codice venga eseguito almeno una volta: si tratta del do...while

$variabile = 5;
do {
 
echo $variabile;
$variabile++;
 
}
 
while ($variabile &lt; 5)

Con questa sintassi, il while si trova solo alla fine e dopo il codice da ripetere. Quindi, la valutazione della condizione sarà eseguita solo dopo l’esecuzione del codice fra parentesi graffe.
In tal caso, con i tipi di cicli visti sopra, non avremmo ottenuto alcun output, mentre con l’uso del do...while ci siamo assicurati almeno una esecuzione del codice. L’esempio stamperà quindi “5″.

Ciclo Foreach

Esiste un ultima alternativa e si tratta di un ciclo particolare (non disponibile in tutti i linguaggi) perchè pensato appositamente per gestire array e particolari oggetti chiamati Iteratori.
Tale ciclo ci consente di costruire un ciclo ripetuto per ogni elemento di una collezione passata come argomento. La sintassi standard è la seguente:

foreach ($array_da_scansionare as $valore_elemento)
 
{
 
// istruzioni da iterare
 
}
In pratica, le istruzioni nelle parentesi graffe saranno ripetute tante volte quanti sono gli elementi presenti nell’array $array_da_attraversare. Ad ogni iterazione, un valore presente nell’array sarà letto e copiato nella variabile $valore_elemento. Meglio chiarire con un esempio:

Ad ogni ciclo, la variabile $colore assumerà il valore di un elemento presente nell’array $colori. Logicamente, potremo usare il ciclo foreach anche per effettuare una modifica ai valori contenuti nell’array.

PHP Hide_Email() : proteggete il vostro indirizzo email dagli spammers

| Posted in Email, Php, Spam |

1

php hide email PHP Hide Email() : proteggete il vostro indirizzo email dagli spammers

Moltissimi webmaster pubblicano sul loro blog l’indirizzo mail per molti motivi scontati. Come ben saprete, il rischio che spiders o bots di spammers catturino questo indirizzo per poi riempirlo di immondizia postale è elevato.

Come proteggersi?

Un modo esiste.

php Hide_Email() è una funzione php utilizzata per criptare, in sostanza, il vostro indirizzo pubblicato sulle pagine web cosicchè bot e spider non possano decifrarlo.

In pratica, sfruttando il generatore presente nella pagina, generate il vostro XHTML con javascript annesso da inserire al posto dell’indirizzo mail.

Unico avvertimento. Chi ha i Javascript disabilitati non riuscirà a vedere il corretto indirizzo (impossibilità di decriptare) ma vedrà solo la seguente scritta :

javascript protected email address


Fonte : WebAppers