Visualizzazione post con etichetta php. Mostra tutti i post
Visualizzazione post con etichetta php. Mostra tutti i post

giovedì 6 giugno 2019

Leggi il post

Creare un ICS Calendar in ASP o PHP

Oggi farò una guida multi language, che spiega come creare un file ics calendar, ovvero quel tipo di file che i vari client di posta, quali outlook ad esempio, interpretano come un memo da mettere in agenda.
I file ics sono molto comodi per salvarsi nel proprio calendario personale i dati di un appuntamento, in modo tale da potersi anche far avvisare poco prima dell'incontro con una notifica su cellulare.
Un buon sito web che si rispetti dunque, che sia sviluppato in asp o php, a seguito dell'iscrizione ad un evento da la possibilità di creare un file ics da scaricare o da mandare in automatico via email all'iscritto.
Tale file poi, una volta aperto fa partire, ad esempio, outlook in automatico, il quale chiederà all'utente se vuole salvarsi i dati dell'appuntamento presenti nel file calendar, facilitando di fatto la vita a chi si iscrive ad un evento, che non deve scriversi a mano il titolo dell'appuntamento, la data e ora, ed il luogo dell'incontro.

Fatta questa doverosa premessa, vediamo subito come creare un file ics con asp e php.


Come creare un ICS Calendar in ASP


La sintassi da utilizzare per creare un file calendar in asp classic (e non) è la seguente:

<%
response.buffer=true
Response.ContentType = "text/calendar"
response.AddHeader"content-disposition","inline;filename=appuntamento.ics"
ris="BEGIN:VCALENDAR"
ris=ris&VBcrlf&"VERSION:2.0"
ris=ris&VBcrlf&"BEGIN:VEVENT"
ris=ris&VBcrlf&"DTSTART;TZID="&stato&"/"&citta&":"&dataorainizioo
ris=ris&VBcrlf&"DTEND;TZID=Italia/Milano:"&dataorafine
ris=ris&VBcrlf&"SUMMARY:"&titolo
ris=ris&VBcrlf&"LOCATION:"&luogo
ris=ris&VBcrlf&"DESCRIPTION:"&titolo&VBcrlf&descrizione
ris=ris&VBcrlf&"PRIORITY:3"
ris=ris&VBcrlf&"END:VEVENT"
ris=ris&VBcrlf&"END:VCALENDAR"
response.write(ris)
%>


Direi che questo script non necessita di particolari spiegazioni, in quanto basterà sostituire dinamicamente le varie variabili quali luogo, ora, ecc... per avere una pagina asp che una volta chiamata consentirà al visitatore di scaricare un file calendar ics.


Come creare un file Calendar ics in PHP


Per poter creare un file ics in php, facendolo scaricare dall'utente tramite apposito link, basta utilizzare il seguente script:

<?
header('Content-Type: text/csv; text/calendar');
header('Content-Disposition: attachment; filename=calendar.ics');
$dstartc=date("Y", strtotime($data_inizio)).date("m", strtotime($data_inizio)).date("d", strtotime($data_inizio))."T".date("H", strtotime($data_inizio)).date("i", strtotime($data_inizio))."00";
$dendc=date("Y", strtotime($data_fine)).date("m", strtotime($data_fine)).date("d", strtotime($data_fine))."T".date("H", strtotime($data_fine)).date("i", strtotime($data_fine))."00";
$ris="BEGIN:VCALENDAR\n";
$ris.="VERSION:2.0\n";
$ris.="BEGIN:VEVENT\n";
$ris.="DTSTART;TZID=".$stato."/".$citta.":".$dstartc."\n";
$ris.="DTEND;TZID=".$stato."/".$citta.":".$dendc."\n";
$ris.="SUMMARY:".$titolo."\n";
if ($luogo!="") $ris.="LOCATION:".$luogo."\n";
$ris.="DESCRIPTION:".$titolo."\n".$descrizione."\n";
$ris.="PRIORITY:3\n";
$ris.="END:VEVENT\n";
$ris.="END:VCALENDAR\n";
echo $ris;
?>


Come per la versione asp, si produrrà un output con una sintassi prestabilita standard (che non è il caso di analizzare e va presa per buona), alla quale dovremo passare le varie variabili che compongono i dati del nostro appuntamento (luogo, data, titolo evento, ecc...).

Nello script d'esempio viene anche illustrato come l'ics si aspetta che sia formattata la data, sintassi che ovviamente vale anche per la versione asp.

Bene, è tutto.
Grazie a queste poche righe di codice, che potrete ovviamente standardizzare in una funzione, potrete creare file ics calendar tramite linguaggio di programmazione php o asp, ed inserire così una comoda funzionalità all'interno dei vostri siti internet.

venerdì 3 maggio 2019

Leggi il post

get_object_vars PHP ottenere le proprietà di un oggetto

Tra le cose che prima o poi potrebbe capitare di dover fare, c'è anche la necessità di ottenere le proprietà di un oggetto specifico in php.
Che sia una classe o un oggetto di qualsiasi altro tipo, il php mette a disposizione una funzione in grado di ricavare le proprietà degli oggetti.
Vediamo subito come.


get_object_vars PHP


Come si può ben capire dal titolo di questo articolo, la funzionalità php in questione è la get_object_vars.

Vediamo subito di capire come funziona questa funzionalità con un semplice esempio:

<?php
class prova
{
    private $a=4;
    public $b=1;
    public $c="x";
    private $d="y";
}
$classe=new prova;
print_r(get_object_vars($classe));
?>


Il risultato ricavato da questo semplice script, stampato a video sarà:

Array ( [b] => 1 [c] => x )

Grazie a get_object_vars infatti, abbinata alla funzione print_r, sarà possibile stampare a video tutte le variabili pubbliche presenti nella classe prova, comprese di nome variabile e valore.
Ad un osservatore attento poi, non sarà comunque sfuggito il fatto che le variabili stampate a video nell'esempio citato, sono la b e la c, questo perchè appunto, get_object_vars può mostrare solo le proprietà pubbliche degli oggetti, e quindi le varibile private a e d non sono riportate a video.

Tutto molto semplice no?
Con questa funzionalità php si possono dunque ricavare tutte le variabili pubbliche contenute in una classe php.

lunedì 29 aprile 2019

Leggi il post

Stampare a video tutte le costanti PHP

Oggi vediamo un'esigenza un po' insolita ma che prima o poi può capitare a tutti, ovvero il dover stampare a video tutte le costanti presenti/usabili in sito php.
Grazie alla semplice funzione che andrò ad illustrare infatti, potremo sapere in un attimo quali costanti sono state definite a sistema, ed anche il loro contenuto.

Vediamo subito un esempio pratico per capirci meglio.


Come stampare a video tutte le costanti PHP


Innanzitutto, se per caso non sapete come definire una costante in php, basta rileggersi questo post.
Una volta compreso quindi cosa sono le costanti, come di definisco e come si richiamano, ecco che possiamo subito andare ad analizzare il seguente codice per ricavare l'elenco delle costanti php:

<?php
define("server","localhost");
define("tabella","test");
print_r(get_defined_constants(true));
?>


La funzione che fa quello che ci serve è la potentissima get_defined_constants, che può essere valorizzata a true o false per suddividere le costanti ricavate in categorie, in quanto questa funzione php non andrà solo a ricavare quelle definite da noi nel codice, ma anche tutte quelle di sistema.

Se quindi scriviamo get_defined_constants(false), il risultato sarà un array associativo contenente tutti gli array con key il nome della costante e come value il suo valore.
Se invece scriviamo get_defined_constants(true) il risultato sarà una suddivisione di costanti in core (costanti di sistema) e costanti user (ovvero le costanti definite da noi nella nostra applicazione).

Se quindi volessimo ricavare solo le costanti che abbiamo definito noi, ecco cosa potremmo scrivere:

<?php
define("server","localhost");
define("tabella","test");
print_r(get_defined_constants(true)["user"]);
?>


Ed ecco che a video avremo una cosa del genere:
Array ( [server] => localhost [tabella] => test )

Al momento non mi viene in mente nessun esempio valido, ma di sicuro saper come ricavare tutte le costanti usate in un sito/applicazione, prima o poi può sempre tornare utile.

venerdì 26 aprile 2019

Leggi il post

PHP: come avere informazioni su una variabile

Le variabili in php sono un qualcosa di imprescindibile da qualsiasi sito o app, che si tratti di una banale pagina che ha come output semplice html o di un programma complesso, di sicuro si finirà per far gran uso delle variabili.

Ebbene, in alcuni casi, per esigenze di codice, potrebbe anche essere necessario avere informazioni sulle variabili che ci si trova tra le mani, magari perchè inizializzate o valorizzate da classi, oggetti o funzioni dinamiche che non sempre possono dare degli output chiari ed univoci.

Vediamo subito quindi come fare per ricavare le informazioni sulle variabili php, in modo da capirne il tipo ed il contenuto.


Come avere informazioni su una variabile in PHP


Se il vostro scopo è quello di scoprire che tipo di variabili avete tra le mani e quale è il loro contenuto, ecco che vi viene incontro la funzionalità php var_dump.

Il suo funzionamento è molto semplice, ecco un codice d'esempio:

<?php
$a="Ciao";
$b=2.7;
$c=true;
$d=array("Cane","Gatto");
var_dump($a, $b, $c, $d);
?>


Il risultato a video sarà niente poco di meno che:

string(4) "Ciao" float(2.7) bool(true) array(2) { [0]=> string(4) "Cane" [1]=> string(5) "Gatto" }

Ovvero, grazie alla potentissima funzione php var_dump, avremo ricavato per ogni variabile il tipo, la lunghezza ed i valori in essa contenuti.

Nell'esempio appena citato abbiamo una variabile di tipo string di 4 caratteri, un numero di tipo float, una variabile bolean segnata a true ed un array con dentro due valori.
Che altro si può desiderare da questa funzione?
Con un po' di parsing questa funzionalità var_dump può di sicuro regalare gran belle soddisfazioni allo sviluppatore php.

venerdì 15 marzo 2019

Come creare un sito PHP sicuro


Se si sviluppano siti internet utilizzando il php, uno degli aspetti che sicuramente bisogna prendere in considerazione è quello riguardante la sicurezza.
Molti siti web infatti, pur risultando gradevoli da vedere e comodi da utilizzare, potrebbero essere violabili da parte dei malintenzionati, i quali potrebbero addirittura entrare in possesso delle credenziali degli utenti del sito, o peggio ancora di quelle degli amministratori.

In questo tutorial, che aggiornerò man mano che scoprirò metodi più performanti per aumentare la sicurezza di un sito internet, andrò ad indicare tutte le best practice da applicare per poter avere siti php sicuri ed inviolabili... o quantomeno per aumentarne il grado di sicurezza, dato che si usa spesso dire che non esiste in natura niente che prima o poi non possa venir violato.

Iniziamo dunque con l'elenco delle attività da svolgere a livello di programmazione, ma anche di configurazione del php.ini o di apache / nginx, o di database mysql, per poter proteggere un sito web fatto in php ed aumentare il livello generale di sicurezza informatica.



1) Controllare le variabili prima di fare le query


Se il proprio sito internet deve poter dialogare con un database, che sia mysql, oracle, sql server, o qualsiasi altro db, occorre fare il parsing delle variabili che si passano nelle query.
La maggior parte dei siti internet infatti, utilizza query dinamiche, con una parte di condice sql scritto in maniera fissa, al quale vengono passate 1 o più variabili, magari ricevute da una form (metodo POST) o da una url (metodo GET).

Per prevenire quello che viene chiamato sql injection occorre dunque, prima di eseguire una query sul database, controllare le variabili che gli vengono passate.
Questo perchè se un malintenzionato modifica a mano una variabile inserendo un apice ('), questa variabile può generare un errore nella query, e da lì il malintenzionato può capire che è possibile scrivere e far eseguire (utilizzando la giusta sintassi) del codice sql, andando addirittura a leggere o peggio ancora a cancellare l'intero database.

Per proteggersi dall'sql injection quindi, bisogna controllare tutte le variabili che vengono passate ad una query.
Nel caso di numeri interi, basta convertirli con la funzione intval, altrimenti bisogna aggiungere uno slash agli apici presenti nella variabile, tramite la funzione php addslashes.

Ecco un esempio di query sicura:

$sql="SELECT var FROM tabella WHERE var1=".intval($var1)." AND var2='".addslashes($var2)."'";



2) Controllare le variabili prima di stamparle a video


La seconda regola fondamentale da rispettare per evitare problemi con il proprio sito web, è quella di controllare le varabili prima di stamparle a video, soprattutto quelle che ci vengono fornite tramite browser.
Per evitare infatti di incappare nella vulnerabilità nota come Cross-Site Scripting (XSS), che consiste nella possibilità da parte di malintenzionati di far eseguire involontariamente all'utente del codice (tipicamente javascript), occorre parsare le variabili prima di stamparle a video.

In questo caso specifico, quello che vogliamo evitare è che venga eseguito dell'html in variabili che di fatto non contemplano l'html, quindi basta utilizzare la funzione htmlentities per rendere ineseguibile qualsiasi script a livello di browser.

Se poi la variabile in questione contempla l'html, magari possiamo decidere di far sparire solo qualche tag specifico, come lo <script>, con una semplice str_replace.

Ecco un'esempio pratico di queste due funzioni all'opera:

<?php
    $var1="<script>alert('ciao');</script>";
    $var1=htmlentities($var1);
    $var2="<script>alert('ciao 2');</script>";
    $var2=str_replace("<script>","",$var2);
    $var2=str_replace("</script>","",$var2);
    echo "$var1 $var2";
?>



3) Criptare le password salvate nel database


Sia per via della terribile GDPR, ma anche in generale in meri termini di sicurezza informatica, non bisogna mai salvare le password in chiaro nel database.
A livello di php quindi, prima di salvare su mysql una password, occorre convertirla con qualche apposito algoritmo.
Così facendo, un malintenzionato che entrerà in qualche modo in possesso delle credenziali del nostro database, non potrà in alcun modo conoscere le password d'accesso memorizzate nel db.

Se poi vogliamo complicare ulteriormente la vita agli hacker (o forse crackers è meglio), prima di generare la nostra password criptata, possiamo aggiungere un valore random alla parola segreta scelta dall'utente, in modo che nessuno possa mai risalire alla password, anche se in possesso di un database di password criptate con cui fare bruteforce.

Questo secondo metodo si chiama salt, mentre la funzione per criptare le password in php è la crypt.
La funzione crypt può essere utilizzata scegliendo vari algoritmi di criptazione, come ad esempio: DES, MD5, SHA-256 e SHA-512.

Ecco un semplice esempio di generazione di password criptata con il php:

<?php
    $password="pippo";
    $salt=rand(10000,99999);
    $password=crypt($password,$salt);
    echo $password;
?>



4) Cambiare la chiave di sessione dopo la login


Un errore comune e forse meno noto, quindi potenzialmente sfruttabile da qualche malintenzionato, è quello di non far rigenerare un nuovo valore di chiave di sessione dopo la login ad un sito php.
Questa problematica, nota come Session Fixation, può essere sfruttata dai malintenzionati che hanno accesso allo stesso pc della persona che si logga con la nostra applicazione, oppure da chi ha accesso alla rete ed è in grado di utilizzare la tecnica nota come Man-in-the-Middle.

Praticamente funziona così.
Quando si prova ad accedere ad un sito web verificando il valore di una sessione, il php genera in maniera random il cosiddetto PHPSESSID.
Purtroppo però, quando si effettua la login, questo valore di default non viene rigenerato, quindi se qualche malintenzionato riesce ad ottenere questo valore semplicemente aprendo (dal pc della vittima) l'applicazione senza loggarsi, quando poi questa si logga, il malintenzionato può usare questo session id per risultare loggato con le credenziali della vittima.

Per evitare questa (abbastanza remota) problematica, basta rigenerare il sessionid dopo ogni login, in modo tale che nessuno possa sapere il valore della nostra sessione.
Per fare ciò in php basta utilizzare la funzione session_regenerate_id.

Ecco un esempio pratico di come rigenerare una sessione php:

<?php
    session_start();
    echo session_id();
    session_regenerate_id();
    echo "<br>".session_id();
?>



5) Abilitare l'https


Ormai è una cosa che si da per scontata la connessione sicura su un sito web.
Quello che bisogna fare per attivare l'https su un sito è innanzitutto acquistare un certificato ssl da installare sul server, oppure cercarne uno gratuito online.
Una volta entrati in possesso del certificato, bisogna copiare i file necessari sul server e configurare apache (o nginx, o iis) in modo tale che il sito in prima battuta faccia in automatico la redirect dall'http all'https.
Ecco un esempio di configurazione del file httpd-vhosts.conf:

<VirtualHost *:80>
    ServerName sito.it
    ServerAlias sito.it
    Redirect / https://sito.it/
    <Directory  "C:\wamp64\www\sito">
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Adesso bisogna andare a modificare il file httpd-ssl.conf (tipicamente nel percorso conf/extra), ad esempio in questo modo:

<VirtualHost *:443>
    ServerName sito.it
    ServerAlias sito.it
    SSLEngine On
    SSLCertificateFile C:\percorso\certificato.crt
    SSLCertificateKeyFile C:\percorso\chiave-certificato.key
    DocumentRoot C:\wamp64\www\sito

    <Directory  "C:\wamp64\www\sito">
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>


Abilitando l'https tra l'altro, si evita che il browser dica all'utente che il sito non è sicuro, messaggio non propriamente incoraggiante.


6) Proteggere i cookie e le sessioni


Per evitare / ridurre il rischio che qualche aggressore possa intercettare e manipolare cookie e sessioni, è bene abilitare due attributi del php, l'attributo Secure e l'attributo HttpOnly.
Il primo attributo implica che il cookie può essere trasmesso solo tramite un canale di comunicazione sicuro (es. l'https, che quindi va preventivamente abilitato sul sito), riducendo così il rischio che sia intercettato da parte di un malintenzionato in grado di monitorare il traffico di rete.
Il secondo attributo invece, impedisce al codice client-side, tipo il javascript, di accedere al contenuto del cookie, impedendo così che un eventuale codice malevolo possa rubare dati sensibili, riducendo così il rischio di furto della sessione tramite Cross-Site Scripting (XSS).

Entrambi questi attributi possono essere abilitati direttamente dal php.ini, andando a proteggere le sessioni ed in particolare il cookie legato al PHPSESSID, semplicemente settando queste righe:

session.cookie_secure = 1
session.cookie_httponly = 1

Se invece si vuole assegnare questi attributi anche ai cookie generici, basta farlo direttamente quando si crea il cookie con il php, con questa sintassi:

setcookie("nome-cookie","valore",strtotime("+1 year"),"","",true,true);

Gli attributi Secure e HttpOnly sono rispettivamente, il penultimo e l'ultimo valore settato nel cookie, che in questo caso sono semplicemente indicati a true.
Grazie a questa accortezza si riduce il rischio di session hijacking.


7) Utilizzare password sicure


Dando per scontato che lato amministrativo si utilizzino solo password complesse, bisognerebbe anche muoversi per sensibilizzare l'utente finale sull'importanza di avere delle password d'accesso robuste.
Questo potete farlo lato codice, obbligando gli utenti a scegliere password sicure, che rispettano i seguenti requisiti:
  1. Lunghezza di almeno 8 caratteri
  2. La password deve contenere sia numeri che lettere
  3. La password deve contenere almeno un carattere speciale
  4. La password deve avere almeno una maiuscola

Se tutti gli utenti utilizzassero questi criteri quando impostano la loro password personale, i malintenzionati di turno farebbero molta più fatica a rubare le credenziali alla gente, anche con il terribile bruteforce.

Volendo poi esagerare, lato codice si potrebbe far scadere la password d'accesso ogni 3/6 mesi, obbligando l'utente a cambiarla all'accesso.
Se poi avete rispettato la best practice di non salvare le password in chiaro nel database, ed avete usato un buon algoritmo di criptazione più il salt, allora potete stare ancora più tranquilli.


8) Abilitare i controlli con il CAPTCHA


Inserire la richiesta del CAPTCHA dopo enne volte che si sbaglia ad inserire la password è un qualcosa di ormai obbligatorio per combattere tentativi di forzatura della sicurezza tramite bruteforce.
Ci sono diversi siti che offrono il servizio di sicurezza CAPTCHA, il più famoso è sicuramente quello fornito da google, il famigerato recaptcha (https://www.google.com/recaptcha/).

Questo sistema può essere installato/configurato in modo che sia più o meno invasivo.
C'è infatti la versione che richiede solo la classica spunta alla voce "non sono un robot", oppure quella in cui ci viene chiesto di cliccare sulle strisce pedonali.
La modalità in cui viene chiesto di compiere delle azioni può essere più o meno invasiva a seconda dei casi, il mio consiglio è quello di posizionarsi in una via di mezzo, senza disturbare troppo l'utente finale con click eccessivi.

Il controllo tramite codice CAPTCHA tra l'altro, può essere inserito anche nelle form d'iscrizione, o in tutte quelle pagine in cui viene chiesto di compiere un'azione all'utente.
Se ad esempio si imbastisce un controllo che, dopo enne richieste nel giro di poco tempo da parte dello stesso indirizzo ip, richiede la verifica CAPTCHA, questo può aiutare a verificare se ci si trova davanti ad un attacco bot, e può ad esempio servire a mettere al riparo il nostro database da un inserimento massivo di dati indesiderati, o anche a non essere sommersi da email di spam provenienti dai nostri stessi form di contatto.


Il tema della sicurezza informatica, aka cyber security è sicuramente molto importante per chiunque sviluppi appicazioni web, che si utilizzi il php o anche qualsiasi altro linguaggio di sviluppo.
Occorre dunque non mostrare mai il fianco al cyber crime, anche perchè la GDPR ormai impone di rispettare alcuni requisiti minimi di sicurezza, altrimenti si rischia pure di non essere a norma di legge.

giovedì 20 dicembre 2018

Leggi il post

Come sapere se una variabile è un array (PHP)

Sempre a proposito di array php, argomento ormai un po' troppo abusato su questa sezione guide del mio sito, oggi spiegherò un'ulteriore funzionalità, tanto semplice quanto a volte importante.

Mettiamo ad esempio che per esigenze di vario tipo non si sa esattamente se una variabile è un array, ad esemio in quei casi in cui non si è certi dell'esito di un popolamento dinamico, ecco che avere una funzione php che ci dice esattamente questa cosa può sicuramente essere una cosa utile e gradita.
Vediamo dunque di scoprire come fare questa semplice verifica.


Come sapere se una variabile è un array (PHP)


Tra le tante funzionalità php per gestire gli array non poteva certo mancarne una che semplicemente ci dice se una variabile è un array.
Senza altri giri di parole, ecco la stringa necessaria per scoprire quanto appena accennato:

is_array($variabile);

Tutto qui.
La funzione php is_array infatti, passandogli una variabile di qualsiasi tipo, si limita a restituire true o false a seconda se ci si trovi davanti ad un array oppure no.

Ecco un esempio pratico:

<?php
$var1=array(1,2,3);
if(is_array($var1)) echo "var1 è un array<br>\n";
else echo "var1 NON è un array<br>\n";
$var2="pippo";
if(is_array($var2)) echo "var2 è un array<br>\n";
else echo "var2 NON è un array<br>\n";
?>


Nell'esempio (banale) qui sopra citato, grazie alla funzione is_array abbiamo scoperto che var1 è un array, mentre var2 non lo è.
Al momento non mi viene in mente nessun esempio più intelligente per dimostrare l'importanza di questa funzione, ma credetemi sulla parola, un giorno sicuramente potrà tornarvi utile :)

Buon coding.

giovedì 13 dicembre 2018

Come testare il php online

Facendo diversi tutorial sul php, spesso mi sono trovato a dover creare delle pagine php solo per testare quanto stavo per pubblicare sul sito, giusto per essere sicuro di non scrivere castronerie o commettere qualche errore di svista (cit.).

L'altro giorno però, ho avuto un'illuminazione.
Mi sono chiesto: ma non esisterà un sito per testare il php online?
E dopo una breve ricerca su google, con somma gioia ho scoperto che fortunatamente il sito in questione esisteva eccome.
Ed eccomi qui a fare un nuovo breve tutorial su come provare il php online.


Come testare il php online


Mettiamo caso di trovarci fuori casa e di non aver sottomano il nostro wamp o lamp di fiducia.
Mettiamo caso di non avere alcuno spazio online che supporta il php, o mettiamo caso di non aver neanche voglia di installare webserver come apache, nginx, il php e fare configurazioni varie.
Ecco che in questi casi ci viene in aiuto una sandbox online che consente di lanciare le php functions più famose (non tutte ovviamente per motivi di sicurezza).
Ecco il sito di cui sto parlando:

http://sandbox.onlinephpfunctions.com

Questo php editor online, anche se non è propriamente corretto chiamarlo così, consente di eseguire intere righe di codice, script interi, risultando quindi molto utile per testare online quanto si sta facendo, in maniera rapida ed immediata.

Il funzionamento di questo sito è molto semplice.
Basta scrivere nell'apposito box il codice php che si vuole eseguire, scegliere la versione del php desiderata, ed il formato d'output.
Infine basta cliccare sul bottone Execute code, per ammirare a video il risultato ottenuto.

Come testare il php online

Se poi si vuole salvare il codice scritto, per poi implementarlo in produzione sui propri server, basta cliccare sul bottone Save or Share your code.

Ovviamente questo utilissimo sito può essere tranquillamente utilizzato per testare semplici script o righe di codice php, ma non è certo pensabile utilizzarlo per sviluppare in toto una web application.
Però sicuramente, ad esempio, si può utilizzare questo sito per verificare al volo se una certa funzione è compatibile con diverse versioni del php, e scoprire ad esempio da che versione in poi una funzionalità php è disponibile.

Ed anche per oggi è tutto, buon divertimento con il php online :)

giovedì 6 dicembre 2018

Leggi il post

Come sapere se una chiave è presente in un array php

Era un po' che non facevo un post sul php, quindi eccomi qui con questa breve guida pratica su come scoprire se una chiave è presente in un array.
Può infatti capitare di non essere a conoscenza di uno specifico valore (value) di un array, ma di conoscerne invece la chiave (key). Ecco che quindi il php ci viene in contro con una specifica funzione che ci consente di riconoscere se una chiave è contenuta all'interno di un array.

Vediamo subito come fare


Come sapere se una chiave è presente / esiste in un array php


La sintassi che consente di scoprire se una key è presente in un array php, è molto semplice.
Eccola qui di seguito:

array_key_exists(chiave, array);

Grazie infatti alla funzione php array_key_exists è possibile, passando come primo parametro la chiave da ricercare e come secondo il nome dell'array in cui cercare, scoprire se una determinata key è presente in un array (exists, per l'appunto).

Questa funzione restituisce semplicemente true o false, quindi può essere utilizzata in tutti casi in cui si deve, ad esempio, verificare l'esistenza di un indice array prima di aggiungere un nuovo elemento ad un array.

Se invece si conosce il valore dell'array e non la key, basta utilizzare questo metodo per verificarne l'esistenza.

Bene, è tutto, buon coding con il key exist php array.

lunedì 26 novembre 2018

Leggi il post

Come collegarsi a Salesforce con il PHP

Se nella tua azienda è stato acquistato il potentissimo (e costosissimo) crm salesforce, devi sapere che oltre a porterlo usare in cloud dalla loro piattaforma online, è anche possibile accingere ai dati tramite delle api php.
Ci sono diversi script già fatti in rete, ma se vuoi avere pieno controllo di quello che fai, posso indicarti la sintassi da utilizzare per collegarsi a salesforce da php, in modo tale da poter fare query ed operazioni varie su quello che è ad oggi il crm numero uno al mondo (almeno credo).


Come collegarsi a Salesforce con il PHP


Prima di poter pensare di connettere una pagina php a salesforce, bisogna abilitare l'ip della macchina da cui ci si intende collegare (o farci abilitare, se non si è amministratori di sistema), ed ovviamente farci dare le credenziali d'accesso (più sotto meglio specificate).

Poi è necessario che il php.ini abbia abilitata/scommentata la seguente riga extension=php_openssl.dll, ed anche la extension=php_curl.dll.

Una volta soddisfatti questi requisiti, potremo iniziare a scrivere un po' di codice php, in modo tale da collegarci a salesforce senza per assurdo avere neanche l'utente a sistema (ma ovviamente è consigliatissimo averlo, per poter verificare che i dati estratti siano corretti).

Bene dunque, bando alle ciance, ed ecco il codice php per la connesione a salesforce:

<?php
    $curl=curl_init();
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
    $url="https://login.salesforce.com/services/oauth2/token";
    $param=http_build_query(
        array(
            'grant_type'=>'password',
            'client_id'=>'ID-CLIENTE',
            'client_secret'=>'CODICE-SEGRETO-CLIENTE',
            'username'=>'USERNAME',
            'password'=>'PASSWORD'
        ));
    curl_setopt($curl,CURLOPT_URL,$url);
    curl_setopt($curl,CURLOPT_POST,5);
    curl_setopt($curl,CURLOPT_POSTFIELDS,$param);
    $resp = curl_exec($curl);
    if(!curl_exec($curl))
    {
        echo 'Errore: "' . curl_error($curl) . '" - Codice: ' . curl_errno($curl);
    }
    else
    {
        $resArr=json_decode($resp);
        $token=trim($resArr->access_token);
        $newurl=trim($resArr->instance_url);
        if($token!=""&&$newurl!="")
        {
            $url=$newurl."/services/data/v42.0/query";
            $param="q=".urlencode("SELECT Name FROM Account ORDER BY Name");
            $url=$url."?".$param;
            curl_setopt($curl,CURLOPT_URL,$url);
            curl_setopt($curl,CURLOPT_POST,false);
            curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
            curl_setopt($curl,CURLOPT_HEADER,false);
            curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
            curl_setopt($curl,CURLOPT_HTTPHEADER,array("Authorization: OAuth $token"));
            $json_response = curl_exec($curl);
            $status=curl_getinfo($curl,CURLINFO_HTTP_CODE);
            if ($status!=200)
            {
                die("Errore: " . curl_error($curl) . ", Codice " . curl_errno($curl));
            }
            else
            {
                $risultato=json_decode($json_response);
                $trovati=intval($risultato->totalSize);
                $completato=$risultato->done;
                $nexturl=$risultato->nextRecordsUrl;
                if($trovati>0)
                {
                    $lista=$risultato->records;
                    foreach($lista as $key=>$value) echo $value->Name."<br />";
                }
            }
        }
    }
?>


Vediamo di analizzare un po' meglio questo all'apparenza corposo codice.

Innanzitutto c'è da dire che per poter effettuare la chiamata da php a salesforce si utilizzano le potentissime curl.
I parametri da impostare in questo script d'esempio sono solo quelli d'accesso: grant_type (dove bisogna scrivere semplicemente la parola password), client_id, client_secret, username e password.

Effettuata con successo la login riceveremo indietro, tra le altre cose, un access_token ed un instance_url.
Il primo è ovviamente il token d'accesso per poter proseguire, mentre il secondo è l'indirizzo a cui bisogna reindirizzare la successiva chiamata curl.

Per pescare i record presenti di una tabella salesforce da php quindi, si effettuerà una seconda chiamata, alla quale verrà passata come parametro la query in formato soql.
L'soql è una sorta di sql di salesforce, molto simile all'originale per fortuna, con i classici comandi select, insert, update, delete, e le varie condizioni where e le possibilità di ordinamento con order.

Il risultato ottenuto, come per la prima chiamata, sarà in formato json, quindi andrà estrapolato da lì con le classiche funzioni php.

Come ultima precisazione importante c'è da dire che salesforce potrebbe avere impostato dei limiti alle chiamate delle varie api webservice php, come ad esempio il numero massimo di risultati settato a 2000 alla volta (se non ricordo male).
Quindi se la vostra intenzione è quella di mostrare a video tutti i record presenti in una tabella sf, dovrete creare una funzione ricorsiva da richiamare di volta in volta.
Per far questo vi vengono incontro i parametri json totalSize (vi fa capire il numero di record presenti), done (per capire se il risultato mostrato è totale (true) o parziale (false)), e nextRecordsUrl (ovvero l'url da passare alla funzione ricorsiva alla quale deve puntare la prossima chiamata della curl a salesforce).

Bene è tutto.
Se avrete fatto tutto correttamente, manipolando un po' il codice che vi ho illustrato, potrete fare tutte le api php salesforce che volete... o meglio, sempre nei limiti imposti dal crm.


Possibili errori / problemi nella connessione php -> salesforce


Già che ci sono riporto i possibili errori di connessione che potrebbero capitarvi.

{"error":"invalid_client","error_description":"invalid client credentials"}
In questo caso potreste aver sbagliato ad immettere uno dei parametri d'accesso richiesto, oppure potrebbe esserci anche qualche spazio di troppo, o non è stata rispettata la giusta sintassi.

[{"message":"unexpected token","errorCode":"MALFORMED_QUERY"}]
E' stata inserita la sintassi soql salesforce sbagliata.

[{"message":"INVALID_HEADER_TYPE","errorCode":"INVALID_AUTH_HEADER"}]
Probabili problemi con il token o con l'autentificazione, o nella formattazione dell'header inviato via curl a salesforce.

[{"message":"Session expired or invalid","errorCode":"INVALID_SESSION_ID"}]
Problema con il token e l'autentificazione, magari il codice è errato o c'è qualche spazio di troppo (oppure è scaduto).

Errore: "SSL certificate problem: unable to get local issuer certificate"
Questo può darlo quando i certificati sul server sono in scadenza o non sono configurati al meglio.
Essendo un errore specifico della chiamata curl, si può risolvere aggiungendo questa opzione:
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);

Bene, direi che per il momento è tutto sull'argomento salesforce php.
In caso di dubbi o problemi scrivetemi nei commenti.

giovedì 18 ottobre 2018

Leggi il post

Rimuovere separatore di troppo in php

Ti è mai capitato di generare una sorta di file csv tramite php e di dover utilizzare un contatore per capire quale è l'ultimo valore di un loop, e non mettere così alla fine il punto e virgola?
A me si, e spesso anche :p
Bene, e se ti dicessi che c'è una funzione php che può farti risparmiare qualche riga di codice? Una funzione che nasce per altri scopi e che può servire anche per rimuovere caratteri specifici alla fine di una stringa.

Bene allora, bando alle ciance e vediamo subito con un po' di codice di capire di che cosa sto parlando.


Come rimuovere un separatore di troppo con il php


Prendiamo il caso sopraccitato.
Se ad esempio con un loop hai generato una lista di nomi separata da un punto e virgola, o più in generale una lista di valori, e non ti sei preoccupato di piazzare il separatore anche all'ultimo valore in elenco, e questo può essere un problema per successivi loop after explode, ecco cosa devi fare per risolvere subito la questione:

<?
    $stringa="nome;cognome;stato;regione;telefono;";
    echo rtrim($stringa,";");
?>


La funzione php che con un colpo solo rimuove l'ultimo separatore indesiderato è la potentissima rtrim.
In pratica con questo comando, a cui passi la stringa da pulire ed il carattere (anche stringa) da eliminare, puoi far sparire l'ultimo punto e virgola di destra.
Tutto molto più semplice, no?

Se invece vuoi far sparire il primo separatore presente in una stringa, ti basta un ltrim ed il gioco è fatto.

lunedì 8 ottobre 2018

Come connettersi ad oracle da php

Il database per eccellenza di chi sviluppa in php è sicuramente il mysql, questo lo sanno tutti.
Ma se vi dicessi che mysql è una sorta di versione free ridotta di oracle? :p
Bene, se nella vostra azienda non sono solo opensourcisti ed avete a disposizione anche questo signor database, potrebbe capitarvi la necessità di dover pescare dati dal php ad oracle, direttamente, senza server linkati o diavolerie simili (che alla lunga possono dare problemi).

Vediamo dunque come fare per potersi collegare ad oracle da php, in modo tale da poter inserire / modificare / cancellare dati su un database oracle presente su un altro server.


Come connettersi ad oracle da php


Prima di passare al codice da utilizzare per effettuare questa connessione, occorre agire sul php.ini per poter abilitare un'estensione necessaria per far parlare oracle con il php, trattasi della php_oci8.

Come connettersi ad oracle da php

A seconda della versione di oracle con cui dovete parlare, dovrete abilitare/installare una dll piuttosto che un'altra (es. php_oci8_11g o php_oci8_12c).
Diciamo che in linea di massima la versione 12c dovrebbe essere quella corretta per le più recenti versioni di oracle.
Ad ogni modo, se avete wamp, per abilitare le estensioni basta un click, altrimenti basta andare nel php.ini ed al paragrafo Extensions, scommentare (togliendo il punto e virgola prima della stringa) o aggiungere (se non presente) la seguente riga:
extension=php_oci8_12c.dll
poi riavviare il webserver (o wamp) per rendere effettive le modifiche.

Adesso che la parte di configurazione è terminata, vediamo subito il codice necessario per potersi collegare ad oracle da una pagina php:

<?php
$conn=oci_connect('username','password','server/database');
if(!$conn)
{
$e=oci_error();
trigger_error(htmlentities($e['message'],ENT_QUOTES),E_USER_ERROR);
}
else
{
$stid = oci_parse($conn, 'SELECT campo FROM tabella_oracle WHERE condizione');
oci_execute($stid);
while(($row=oci_fetch_array($stid, OCI_BOTH))!=false)
{
echo $row['campo'];
}
}
?>


Da queste poche righe di codice si evince che la funzione necessaria per collegarsi ad oracle è la oci_connect.
Superata la connessione senza errori, si può sfogliare la tabella del database ed ottenere tutti i campi che si vuole, utilizzando più o meno la sintassi a cui si è abituati per ottenere i risultati delle query con il php.

Da tenere presente inoltre che potrebbe essere necessario specificare il nome esatto dei campi, compreso di maiuscole e minuscole (case sensitive).

La sintassi per eseguire query su oracle da php è la oci_excecute, che ovviamente può utilizzata anche per insert ed update, oltre che per sfogliare tabelle.
Inutile dire che anche per dialogare con oracle è vitale parsare le variabili da passare al db, per evitare il rischio del terribile sql injection.

Che altro dire sull'agomento?
Niente direi, a parte il fatto che se dovete connettervi ad una versione vecchia di oracle (ad esempio la 9), da una macchina con su un php nuovo, potreste faticare non poco per riuscire a reperire le giuste dll della oci (idealmente la 11c), senza le quali a video nella vostra bella pagina php avrete il seguente messaggio d'errore: "Call to undefined function oci_connect()".
Io ho perso più tempo ad aggiustare l'aspetto sistemistico della cosa, piuttosto che a fare uno script complesso per fare una migrazione da oracle a mysql!
Ad ogni modo, per i posteri, io ho risolto questo errore di connessione scaricando l'oracle instant client per la mia versione di windows (https://www.oracle.com/database/technologies/instant-client/downloads.html) e copiando i file oci.dll, oraociei12.dll (o versione scaricata) e oraons.dll nella cartella bin di apache del mio wamp.

venerdì 17 agosto 2018

Leggi il post

Valore massimo / minimo in array php

Oggi torniamo a parlare ancora una volta degli array php.
Argomento da me molto apprezzato perchè consente un po' di fare tutto quello che serve per le varie web app, gli array sono diventati molto potenti e versatili nel corso degli anni.

Premesso che con l'uscita di sempre nuove versioni del php è possibile fare la stessa cosa con metodi e funzioni diverse, in questo post spiegherò come ottenere il valore massimo e minimo di un array, necessità che prima o poi capita un po' a tutti.

Vediamo subito come fare.


Come ottenere il valore massimo in array php


Se si ha un array php con molti valori, magari neanche ordinati, e si vuole ottenere in un colpo solo il valore massimo di un array, la funzione che fa al caso nostro si chiama max, ed è utilizzabile anche per altri tipi di variabili.

Ecco un esempio pratico:

<?
    $array=array("A"=>"Asso","B"=>"Brescia","C"=>"Como","D"=>"Domodossola");
    echo max($array);
?>


Chiamando dunque max($array) otterremo il valore / value più alto in esso contenuto, che si tratti di numeri o anche lettere.


Come ottenere il valore minimo di un array php


A rigor di logica dunque, per pescare il valore più basso contenuto in un array, occorre utilizzare la funzione php min.

Ecco un altro esempio pratico:

<?
    $array=array(3,21,2,33,1,12,4);
    echo min($array);
?>


Tutto qui, molto semplice e veloce.
Grazie a min e max è possibile dunque estrapolare il valore più piccolo e più grande presente in un array php.

venerdì 3 agosto 2018

Leggi il post

Ricavare le chiavi di un array php

Oggi vediamo un'insolita richiesta che riguarda gli array php.
Poniamo ad esempio che, per qualche oscuro motivo tu fossi interessato solo alle chiavi presenti in un'array, mettiamo caso quindi che il tuo scopo sia quello di ottenere un array con al suo interno (come valore) solo le chiavi di un array d'origine... bè, con le funzioni native del php puoi fare anche questo.

Vediamo subito come ottenere l'elenco delle chiavi di un array php, tramite una sola e semplice funzione.


Come ricavare le chiavi di un array php


Per poter ottenere un array di chiavi partendo da un array originale di chiavi e valori, puoi utilizzare la seguente sintassi:

$array_chiavi=array_keys($array_originale);

Grazie alla utilissima array_keys php infatti, potrai generare un nuovo array di keys partendo da una lista originale.

Ecco un esempio pratico:

<?
    $array=array("A"=>"Asso","B"=>"Brescia","C"=>"Como");
    $array_chiavi=array_keys($array);
    foreach ($array_chiavi as $chiave=>$valore) echo "$valore<br />";
?>


Un osservatore attento ovviamente noterà subito che il nuovo array così creato avrà in realtà a sua volta delle chiavi, che però non saranno più quelle originali (che sono finite come valore), ma dei nuovi valori che partono da zero.

A cosa può servire tutto ciò?
Mmm, ad esempio se per qualche motivo ci serve l'elenco di chiavi presenti in un array separato da virgola, prima usiamo la array_keys, e poi la funzione spiegata in questo post.

mercoledì 1 agosto 2018

Leggi il post

Da array a stringa (implode php)

Ti è mai capitato di dover trasformare il contenuto di un array in una stringa?
Si, magari hai la tua bella lista e non è tua intenzione sfogliare l'array php per accingere ai vari risultati, magari hai salvato una lista di id e vuoi averli separati da virgola.
Ecco che con il metodo che ti sto per spiegare, potrai trasformare un array in una stringa di testo, con una sola e semplice funzione.
Vediamo subito come fare (cit.).


Come passare da array a stringa con l'implode php


Il titolo di questo post era già di per sè un bello spoiler, dato che tutto ciò che ci serve è la funzione php implode.

Ecco un esempio di codice:

<?
    $array=array("verde","rosso","giallo");
    $stringa=implode(",",$array);
    echo $stringa;
?>


Con la funzione implode, alla quale passiamo come primo parametro un delimitatore e come secondo l'array da tramutare in stringa, basta una sola riga di codice per fare quello che un tempo si faceva con un ciclo.

Il risultato a video sarà, in questo caso, la lista dei record presenti nell'array divisi da virgola.
Cambiando delimitatore ovviamente, sarà possibile ottenere la nostra stringa delimitata da punto e virgola, da spazi, o da qualsiasi altra cosa ci venga in mente.

Gli array php sono sempre più utili, soprattutto grazie a queste potenti funzioni che consentono di trasformare i dati ed ottenerli nel formato che più ci aggrada, oggi è stato da array a stringa, domani magari sarà da array a json... ma questo è un altro post (cit.)

venerdì 27 luglio 2018

Leggi il post

Come unire due array in php

La desiderata del giorno è molto semplice: unire array php.
Poniamo ad esempio di avere due o più liste separate di nomi, salvate per qualche ignoto motivo in array differenti, come si può fare per unire il contenuto dei due array?
Presto detto, continua a leggere questo post (cit.).


Come unire due array in php


Per poter mixare due array, accodando tutte le chiavi ed i valori del secondo dentro al primo, basta usare il comando php array_merge.

Prendiamo l'esempio delle due liste di nomi, ecco un po' di codice per capire subito come funziona il merge degli array in php:

<?
    $nomi_maschili=array("giovanni","rosario","francesco");
    $nomi_femminili=array("chiara","giovanna","antonia");
    $nomi=array_merge($nomi_maschili,$nomi_femminili);
    print_r($nomi);
?>


La prima obiezione che potrebbe sorgere guardando il codice che ho appena postato, è che con questo metodo le chiavi numeriche degli array uniti cambiano.
Per evitare questo effetto collaterale si può, prima di fare il merge, assegnare una chiave non numerica a mano ad ogni valore degli array, prestando però attenzione a non generare duplicati tra un array ed un altro, così ad esempio:

<?
    $nomi_maschili=array("gio"=>"giovanni","ros"=>"rosario","fran"=>"francesco");
    $nomi_femminili=array("chia"=>"chiara","giov"=>"giovanna","anto"=>"antonia");
    $nomi=array_merge($nomi_maschili,$nomi_femminili);
    print_r($nomi);
?>


Ed ecco che con il potentissimo array merge php si potranno mixare infinite liste di array.

giovedì 26 luglio 2018

Come installare Laravel su Windows

Laravel è un framework open source di tipo MVC (modello-vista-controllo) scritto in PHP per lo sviluppo di applicazioni web e siti internet in generale.
Laravel è stato creato nel 2011 da Taylor Otwell, come una sorta di spin-off di Symfony, e poi distribuito con licenza MIT.
Tutto il codice sorgente di laravel può essere trovato su GitHub, sul quale ha riscosso un grande successo.

Fatta questa premessa su quello che forse è il framework php più famoso al mondo, ed evitando sterili polemiche sul fatto che i veri programmatori usano le proprie librerie e che le tabelle del database se le creano a mano perchè conoscono l'sql, vediamo subito come fare per installare laravel su windows, quindi volendo anche ambiente wamp.


Come installare Laravel su Windows


Per poter installare velocemente laravel, occorre prima installare composer.
Se non sai come fare, leggi prima questo post, che ti spiega anche come configurare il php in modo che sia facilmente eseguibile sotto windows.

Dopo aver messo il composer in una cartella generica che possiamo chiamare laravel, andiamo a generare i nostri ambienti di sviluppo, gestendoli come sottocartelle indipendenti.
Se ad esempio il nostro sito si deve chiamare fatture, ecco cosa scrivere dal prompt dei comandi di dos partendo dalla cartella laravel in cui abbiamo installato il composer:

php composer.phar create-project laravel/laravel nomeprogetto --prefer-dist

Dove ovviamente in questo caso, al posto di nomeprogetto dovremo scrivere fatture.

Attendiamo con pazienza la fine del download e dell'installazione di tutti i pacchetti, ed il gioco è fatto.

Come installare Laravel su Windows

Se tutto sarà andato a buon fine, non ci saranno errori a video ed avremo la nostra cartellina fatture con tutti i file di laravel necessari per poter gestire il progetto.

Ah, dimenticavo, allo stato attuale per poter utilizzare laravel occorre soddisfare i seguenti requisiti:
  • Avere PHP versione 5.5.9 o successive
  • Abilitare l’estensione PHP Mbstring
  • Abilitare l’estensione PHP PDO
  • Abilitare l’estensione PHP Tokenizer
  • Abilitare l’estensione PHP OpenSSL 

E' tutto, eccoci pronti per muovere i primi passi con il framework php laravel, tantè che con questo metodo viene già generato il file di configurazione contenente l'application key.

martedì 24 luglio 2018

Leggi il post

Come installare Composer su Windows

Composer è uno standard mondiale per la gestione delle dipendenze in PHP, uno strumento che permette anche il setup e la generazione di ambienti.
Composer semplifica il lavoro dello sviluppatore, rendendo facile l’utilizzo di librerie di terze parti e consentendo anche di usare microlibrerie al posto di più pesanti macrolibrerie.
Composer installa automaticamente le dipendenze delle librerie che si devono usare, liberando lo sviluppatore da quest'onere.

Inoltre Composer, si occupa anche degli aggiornamenti, eseguibili  facilmente tramite semplici comandi che tengono conto di eventuali limiti impostati nel file di configurazione.
Infine Composer fornisce anche una funzione per l’autocaricamento delle classi, la quale può essere ottimizzata per l’ambiente di produzione.


Come installare Composer su Windows


Se utilizzi php sotto windows, magari con wamp, devi sapere che la sintassi per installare composer è la medesima che in altri ambienti.

Ecco cosa devi fare per installare composer:
  1. Apri il prompt di dos con i permessi di amministratori
  2. Entra nella cartella dove vuoi installare il composer
  3. Se non hai registrato il php come variabile d'ambiente su windows, per semplicità per poterlo lanciare da qualsiasi parte, fallo (se non sei capace leggi questo post)
  4. Digita in sequenza i seguenti comandi nel prompt di dos (dopo ogni riga, riconoscibile dalla parola php, premi invio):
    php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
    php composer-setup.php
    php -r "unlink('composer-setup.php');"

L'unica accortezza che dovresti avere, è quella di verificare, nel caso nel secondo comando ti dia errore, se l'installer scaricato abbia l'hash aggiornato (altrimenti ti appare installer corrupt), andando a verificare il tutto su questo sito e nel caso sostituire l'hash_file trovato in questo esempio con quello corrente.

Ecco tutto, hai già installato composer su windows.
Ora per poterlo utilizzare digita banalmente php composer.phar nella cartella in cui è stato generato questo file, e segui le istruzioni a video.

Ed ecco che hai fatto i tuoi primi passi nel magnifico mondo di composer php :)

venerdì 6 luglio 2018

Nascondere versione PHP wamp

La suddetta guida su come nascondere le informazioni del php è valida sia per wamp, che per qualsiasi altro tipo di installazione e/o server, dato che si andrà ad agire direttamente sui file di configurazione del php.

Quello che ci interessa poter fare è non fare apparire la versione del php in uso sul server, in modo tale da rendere meno vulnerabili i nostri siti internet da attacchi malevoli.
La logica dietro alla necessità di questa azione è molto semplice: meno cose il nemico sa, e più per lui sarà difficile trovare il modo di attaccarti.

Nascondere versione PHP wamp

Vediamo dunque come fare per aumentare la sicurezza/privacy del nostro sito php.


Come nascondere le informazioni del PHP con wamp (e non)


Per far sparire dal server la versione in uso del php, basta agire sul famoso file di configurazione php.ini.

Se utilizzi wamp, trovi questo file cliccando con il tasto sinistro del mouse sull'icona del programma, poi cliccando su php ed infine su php.ini.

Adesso dovrai cercare e sostituire

expose_php = On

con

expose_php = Off

Ed ovviamente riavviare tutti i servizi di wamp.

Nel file di configurazione del php troverai la seguente spiegazione:
"Decides whether PHP may expose the fact that it is installed on the server (e.g. by adding its signature to the Web server header).  It is no security threat in any way, but it makes it possible to determine whether you use PHP on your server or not."

Questo in pratica vuole anche dire che volendo per far sparire questa informazione, basta agire anche solo sul file di configurazione di apache, come spiegato in questo post.

giovedì 28 giugno 2018

Leggi il post

Variabile dinamica in PHP

C'era una volta l'eval php, con la quale ad esempio, poter generare delle variabili dinamiche, se così si possono chiamare.
Poniamo ad esempio di avere un form generato dinamicamente, con un numero imprecisato di campi. Capire quali campi sono stati passati alla pagina di destinazione è indispensabile per poter fare gli opportuni controlli su di essi.
Se quindi da una parte è possibile sapere a monte quante variabili vengono passate ad una pagina, dall'altra è poi possibile generare dinamicamente una variabile php, utilizzando un nome seguito da un numero o un valore contenuto in un'altra varibile.

Probabilmente è più facile fare un esempio pratico, piuttosto che cercare di spiegare a parole questo concetto :p


Come creare una variabile dinamica in PHP


Se si vuole generare una varibile composta da più elementi, uno fisso ed uno dinamico, magari andandola ad utilizzare all'interno di un loop, ecco la sintassi php da utilizzare.

$nuova_variabile=${'variabile_'.$numero};

Con la sintassi ${} infatti, è possibile fare quello che su altri linguaggi si faceva con l'eval, ovvero generare una varibile dinamicamente.

Vediamo due righe di codice d'esempio:

$variabile_1="Franco";
$variabile_2="Mario";
$variabile_3="Antonio";
$variabile_4="Giovanni";
$variabile_5="Ugo";
for($i=1; $i<=5; $i++)
{
$nuova_variabile=${'variabile_'.$i};
echo "$nuova_variabile<br />";
}

Il ciclo in questione dunque, mostrerà a video il contenuto di tutte le varibili generate con il nome dinamico, una parte del quale sarà sempre fissa, mentre l'altra sarà composta dal numero incrementato in automatico in un loop.

Come usare questa cosa nel concreto?
Beh, a parte esempi di array dinamici php, prendiamo il caso del form dinamico con dieci campi che si chiamano nello stesso modo, fatta eccezione per una parte finale del nome incrementata con un contatore.
Se si vuole poi lato server fare i controlli e salvare i dati nel database, un metodo molto utilizzato è quello di passare dalla form un campo hidden contenente il numero di variabili da controllare, e poi ciclare il tutto come nell'esempio di poco sopra, con l'unica differenza che la variabile generata sarà ottenuta con una _request.

Se poi si vogliono pescare i dati di una tabella sql che ha tantissime colonne, normalmente bisognerebbe scrivere un sacco di codice sia per comporre la query (a meno che non si voglia usare il terribile asterisco *), sia per assegnare alle variabili php il contenuto delle singole colonne.
Per risparmiare un bel po' di tempo, soprattutto se le pagine che fanno queste query sono molte, si potrebbe salvare in un'array la struttura della tabella, indicando come valore il nome di ciascun campo, così:
$campitabella=array("nome","cognome","indirizzo","fax","telefono");
Poi, quando si sfoglia la tabella nel classico ciclo while, al posto di scrivere tutte queste righe:
$nome=$row['nome']);
$cognome=$row['cognome']);
$indirizzo=$row['indirizzo']);
$fax=$row['fax']);
$telefono=$row['telefono']);

Potremmo scrivere semplicemente:

foreach ($campitabella as $k=>$v) ${$k}=$row[$k];

Comodo, no?

mercoledì 6 giugno 2018

Leggi il post

Collegarsi a Sql Server con il PHP

Si, lo so, il database per eccellenza del php è il mysql, che tra l'altro è anche gratis come il linguaggio di programmazione per il web da cui più comunemente viene richiamato.
Ci sono però dei casi in cui bisogna lavorare su db diversi, magari a cui si appoggiano altri applicativi.
Se quindi l'esigenza è quella di collegarsi a sql server da php, ecco che sei capitato nel post giusto (cit.).

Per compiere questa operazione in realtà, esistono diversi metodi, più o meno semplici.
Si va dall'installazione di drivers sul server ospitante, all'aggiunta di specifiche estensioni del php, ecc...
Il metodo più rapido che ho trovato però, non richiede chissà quali passaggi a livello sistemistico, se non quelli di verificare che non ci siano blocchi tra i server che devono comunicare, e consiste nell'utilizzo di poche semplici righe di codice.


Come collegarsi a Sql Server con il PHP


Qui di seguito il codice necessario per poter effettuare la connessione a sql server da php, e come fare per poter effettuare le query, che in questo caso consistono in una semplice select:

<?
$server="nome-server";
$database="nome-database";
$user="username";
$password="password";
$conn=odbc_connect("Driver={SQL Server Native Client 10.0};Server=$server;Database=$database;",$user,$password) or die("Impossibile collegarsi a sql server");
$sql="SELECT campo FROM tabella";
$rs=odbc_exec($conn,$sql);
while(odbc_fetch_row($rs)) echo odbc_result($rs,1)."<br />";
odbc_close($conn);
?>

Come si può ben intuire da queste poche righe di codice php, la funzione chiave che serve per collegarsi a sqlserver è una generica odbc_connect.
Una volta effettuata la connessione poi, si esegue la query tramite il comando odbc_exec, che ovviamente potrebbe essere utilizzato anche per insert o update.
Si cicla il tutto con una bella while abbinata alla odbc_fetch_row, ed infine si chiude la connessione con una odbc_close.

Se poi vogliamo sapere quanti record abbiamo pescato con la nostra query, prima di decidere se sfogliarli o meno, basta utilizzare la seguente sintassi:
$numero-record=odbc_num_rows($rs);

Bene, direi che è tutto.
Con poche e semplici righe di codice php, che comprendono la stringa di connessione a sql server, ci siamo connessi al database microsoft ed abbiamo sfogliato il contenuto di una tabella.

PS ovviamente bisogna ricordarsi di utilizzare la sintassi sql di sql server, che è un po' differente da mysql... ma chettelodicoaffare (cit.).