• 2018-12-05 175943
  • 2018-11-22 145009
  • 2018-12-06 191523
  • 2018-11-28 151134
  • 2018-11-24 163743
  • 2018-12-02 144318
  • 2018-11-24 163752
  • 2018-11-16 084045

Script

Qui puoi ricercare e trovare alcuni Script che ho voluto pubblicare per condividerli con voi.

Recuperare dati Json cross-domain con Jquery




Come forse molti di voi sapranno, Jacascript, per ragioni di sicurezza, non è in grado di fare richieste AJAX su domini diversi da quello in cui lo Script viene eseguito, infatti se ci provate l'oggetto XMLHttpRequest sarà sempre NULL.

E' necessario quindi ricorrere ad uno stratagemma, che prevede di realizzare una pagina proxy (in PHP in questo esempio) sul proprio dominio, che si occuperà di connettersi alla pagina residente sul dominio esterno per prelevare i dati XML o JSON che ci servono, e successivamente realizzare uno script lato client, che otterrà i dati dal nostro proxy piuttosto che direttamente dalla pagina residente su un altro dominio.

Più o meno la teoria è questa, ma passiamo alla pratica!

Innanzitutto creiamo la nostra pagina proxy.php e mettiamoci dentro il codice per prelevare l'XML o il JSON da una URL esterna. Questo sarà il codice:

$URL=$_GET['URL'];


    $URL = rawurldecode($URL);
    $URL = stripslashes($URL);

    // make sure curl is installed
    if (function_exists('curl_init')) {
       // initialize a new curl resource
       $ch = curl_init();

       // set the url to fetch
       curl_setopt($ch, CURLOPT_URL, $URL);

       // don't give me the headers just the content
       curl_setopt($ch, CURLOPT_HEADER, 0);

       // return the value instead of printing the response to browser
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

       // use a user agent to mimic a browser
       curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');

       $content = curl_exec($ch);
    
        echo $content;

       // remember to always close the session and free all resources
       curl_close($ch);
    } else {
       // curl library is not installed so we better use something else
    }

 

Il nostro Script lato server è pronto. Possiamo finalmente passare ad occuparci dello Script lato Client.
Incorporiamo l'ultima versione della libreria Jquery nella pagina, e scriviamo poi il seguente codice:

 

function get_prod()
    {
        $url="http://www.urlesterno.it";
        
        $.ajax({
            type: "GET",
            url: "proxy.php?URL=" + $url,
            dataType: 'json',           

            success: function(msg){
                //IN questo caso ciclo i dati JSON ottenuti
                for(var n = 0; n < msg.length; n++)
                {
                    tipo=msg[n].type;
            &n
bsp;       typology=msg[n].typology;
                    alert (tipo + typology)
                }
            },
            error:function(XMLHttpRequest, status, error){
                //MESSAGGI PER RISALIRE ALL ERRORE
                alert("XMLHttpRequest: "+XMLHttpRequest);
                alert("Impossibile recuperare i Dati: "+status);
                alert("Error: "+error);
                alert("XMLHttpRequest readyState: "+XMLHttpRequest.readyState);
                alert("XMLHttpRequest responseText: "+XMLHttpRequest.responseText);
            },
            beforeSend: function(){
                //alert("BEFORELOADING")
            },
            complete: function(){
                //alert("COMPLETE")
            }
        });
        
    }

 

Il gioco è fatto il ciclo che trovate dentro success è quello che serve per leggere tutti i dati ricevuti tramite JSON.
Buon Lavoro :-)

Convertire Array PHP in Json




Recentemente mi sono trovato a trasferire un dominio, e relativo sito web, su un Server diverso.

Al momento di testare il funzionamento del sito, con mio grande rammarico, mi sono accorto che alcune pagine non funzionavano. Indagando sulle cause ho visto che sul nuovo Server era installata una versione di PHP più datata, e precisamente la 5.1.6. In questa versione del PHP non è stata ancora implementata la funzione json_encode, che viene invece implementata dalla versione 5.2.0 e successive.

Ho quindi dovuto sopperire alla mancanza di tale versione, il cui scopo è quello di restituire la rappresentazione JSON di un valore PHP (generalmente un Array), implementando una funzione analoga.

JSON: Acronimo di JavaScript Object Notation, il JSON è un formato adatto per lo scambio dei dati in applicazioni client-server. La semplicità di JSON ne ha decretato un rapido utilizzo specialmente nella programmazione in AJAX. Questo fatto lo ha reso velocemente molto popolare a causa della diffusione della programmazione in JavaScript nel mondo del Web.

I tipi di dati supportati da questo formato sono:

  • booleani (true e false);
  • interi, reali, virgola mobile;
  • stringhe racchiuse da doppi apici ( " );
  • array (sequenze ordinate di valori, separati da virgole e racchiusi in parentesi quadre [ ] );
  • array associativi (sequenze coppie chiave-valore separate da virgole racchiuse in parentesi graffe);
  • null.

Cercando su internet, ho trovato qui, quello di cui avevo bisogno. Si tratta di una funzione ricorsiva, che produne una rappresentazione Json, del valore che gli viene passato.

Ecco la funzione:

function array2json($arr) {
    if(function_exists('json_encode')) return json_encode($arr); //Lastest versions of PHP already has this functionality.
    $parts = array();
    $is_list = false;

    //Find out if the given array is a numerical array
    $keys = array_keys($arr);
    $max_length = count($arr)-1;
    if(($keys[0] == 0) and ($keys[$max_length] == $max_length)) {//See if the first key is 0 and last key is length - 1
        $is_list = true;
        for($i=0; $i<count($keys); $i++) { //See if each key correspondes to its position
            if($i != $keys[$i]) { //A key fails at position check.
                $is_list = false; //It is an associative array.
                break;
            }
        }
    }

    foreach($arr as $key=>$value) {
        if(is_array($value)) { //Custom handling for arrays
            if($is_list) $parts[] = array2json($value); /* :RECURSION: */
            else $parts[] = '"' . $key . '":' . array2json($value); /* :RECURSION: */
        } else {
            $str = '';
            if(!$is_list) $str = '"' . $ke
y . '":';

            //Custom handling for multiple data types
            //if(is_numeric($value)) $str .= $value; //Numbers
            if(is_numeric($value)) $str .= "\"" . $value . "\""; //Numbers MAXTAC MODIFICA
            elseif($value === false) $str .= 'false'; //The booleans
            elseif($value === true) $str .= 'true';
            else $str .= '"' . $value . '"'; //All other things MAXTAC MODIFICA
            //else $str .= '"' . addslashes($value) . '"'; //All other things
            // :TODO: Is there any more datatype we should be in the lookout for? (Object?)

            $parts[] = $str;
        }
    }
    $json = implode(',',$parts);
    
    if($is_list) return '[' . $json . ']';//Return numerical JSON
    return '{' . $json . '}';//Return associative JSON
}

Alla Riga numero 2, la funzione controlla subito se la versione corrente di PHP ha implementata la funzione json_encode, e se la funzione esiste, allora ritorna subito il risultato di tale funzione predefinita, senza proseguire nel suo Script

Alla riga 29, ho fatto una piccola modifica alla funzione per farmi restituire i valori numerici racchiusi all'interno di doppi apici ("). Un'altra piccola modifica alla riga 32 che sostituisce l'originale riga 33.

Per il resto non vi spiego ulteriormente la funzione. Ce solo da utilizzarla così:

$valoreJson = array2json($mioArray);

Forzare il Download di un file




In molti casi, quando facciamo un comune link ad un file, questo viene aperto direttamente dal browser, oppure utilizzando il programma predefinito per quel dato file.

e' il caso ad esempio di file txt o jpg (aperti direttamente all'interno del browser), oppure di file doc o pdf (che vengono aperti automaticamente dall'applicazione predefinita (Microsoft Word o Acrobat Reader).

Ci potremmo però trovare nella necessità di forzare il download di un dato file sul PC piuttosto che permettere di visualizzarlo direttamente.

La realizzazione di uno script del genere è piuttosto semplice, e ci viene incontro la funzione header.
La funzione header() permette di inviare una determinata intestazione utilizzata come parametro della funzione stessa. Essa cpermette di creare istruzioni atte a modificare gli headers di una determinata pagina Web; un esempio classico utilizzato spesso dai programmatori PHP è quello del rindirizzamento, ma questa funzione può essere impiegata per numerosi altri scopi.

Quando vogliamo forzare il download dobbiamo mandare il contenuto del file direttamente agli Header specificando il contenuto MIME(cioè lo standar di internet, ogni file ha il suo gif,zip txt).
Nell'header ci devono essere:

  • Content-type (tipo di documento)
  • Content-Disposition (destinazione del contenuto)
  • Content-Description (descrizione del contenuto )
  • Content-Length (lunghezza del contenuto)

Vediamo ora un esempio pratico, realizzando una piccola funzione:

/*
ForceDownload('/percorsodelsile/file.txt','fnomefile.txt');
*/

function ForceDownload($path,$name)
{
    header('Pragma: private');
    header('Cache-control: private, must-revalidate');
    header("Content-Type: application/octet-stream");
    header("Content-Length: " .(string)(filesize($path)) );
    header('Content-Disposition: attachment; filename="'.($name).'"');
    readfile($path);
    exit;
}

 

Sul sito di HTML.IT ho trovato il seguente listato, dove sono stati elencati alcuni possibili utilizzi della funzione header():

# modifica dell'header relativo allo status della richiesta,
# utile nel caso in cui si debbano risolvere problematiche
# relative alla riscrittura delle URL
header('HTTP/1.1 200 OK');

# header per le richieste non soddisfatte dal server
header('HTTP/1.1 404 Not Found');

# header prodotto dall'impossibilità di accedere alla
# risorsa richiesta
header('HTTP/1.1 403 Forbidden');

# header prodotto per segnalare una risorsa
# spostata in modo permanente su un percorso diverso
# da quello utilizzato per definire la richiesta
header('HTTP/1.1 301 Moved Permanently');

# header prodotto nel caso di malfunzionamenti del server
# in seguito al tentativo di soddisfare una richiesta
header('HTTP/1.1 500 Internal Server Error');

# rindirizzamento della richiesta su un percorso diverso
# da quello specificato
header('Location: http://www.miosito.it/');

# rindirizzamento della richiesta entro un periodo
# di tempo definito (delay)
header('Refresh: 5; url=http://www.miosito.it/');
echo 'Il browser verrà redirezionato entro 5 secondi';

# override del valore relativo all'header X-Powered-By
header('X-Powered-By: PHP/5.2.8');

# modifica dell'header relativo al linguaggio utilizzato
header('Content-language: en');

# modifica dell'header relativo alla data dell'ultima modifica
$time = time() - 60;
header('Last-Modified: '.g mdate('D, d M Y H:i:s', $time).' GMT');

# header per segnalare l'assenza di modifiche
header('HTTP/1.1 304 Not Modified');

# impostazione del Content-Length per operazioni di caching
header('Content-Length: 168');

# header per il download
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="file.zip"');
header('Content-Transfer-Encoding: binary');

# scaricamento di un file
readfile('file.zip');

# disabilitazione della cache per il documento corrente
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); # Date in the past
header('Pragma: no-cache');

# impostazione del content type per
# le varie tipologie di estensioni:
header('Content-Type: text/html; charset=iso-8859-1');
header('Content-Type: text/html; charset=utf-8');
header('Content-Type: text/plain');
header('Content-Type: image/jpeg');
header('Content-Type: application/zip');
header('Content-Type: application/pdf');
header('Content-Type: audio/mpeg');
header('Content-Type: application/x-shockwave-flash');

# richiesta di autenticazione
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="Accesso Riservato"');
echo 'Inserire i dati per il login';

Convertire le valute con PHP e Google




Ho trovato questo interessante Script sul sito PHPSnippets.info, l'articolo mostra come sia possibile utilizzare lo strumento di conversione di Google, per convertire i valori di valuta da un tipo ad un altro.
Lo script utilizza una richiesta cURL alle API di Google API della calcolatrice e passa 3 valori alla funzione, che sono rispettivamente la valuta attuale, la valuta che vogliamo ottenere e l’importo da convertire. Per passare le valute si devono utilizzare i rispettivi codici (es: USD, CAD o EUR).

Affinchè lo Script funzioni deve però essere attivato il supporto alle librerie cURL nella vostra installazione di PHP ed all'interno del php.ini.


Solo poche persone sanno che Google ha un integrato un servizio calcolatrice per il cambio di valute. (Basta digitare ad esempio: "100 $ in euro" nella casella di ricerca di Google, per avere la conversione in tempo reale), Questa calcolatrice funziona molto bene, ed è per questo che è possibile sfruttarla all'interno delle proprie applicazioni web.

Vediamo il codice PHP per ottenere la conversione.

function currency($from_Currency,$to_Currency,$amount) {
    $amount = urlencode($amount);
    $from_Currency = urlencode($from_Currency);
    $to_Currency = urlencode($to_Currency);
    $url = "http://www.google.com/ig/calculator?hl=en&q=$amount$from_Currency=?$to_Currency";
    $ch = curl_init();
    $timeout = 0;
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,  CURLOPT_USERAGENT , "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $rawdata = curl_exec($ch);
    curl_close($ch);
    $data = explode('"', $rawdata);
    $data = explode(' ', $data['3']);
    $var = $data['0'];
    return round($var,2);
}

ed dcco come utilizzare la funzione

echo currency("USD","EUR",100);

 

Tabelle html con struttura tabelle mysql




Prendo spunto dall'articolo trovato qui.
Lo script che vi presento oggi può esservi utile per ottenere lo schema di tutte le vostre tabelle Mysql in una pagina HTML. IL risultato è davvero soddisfacente. Date un'occhiata all'immagine allegata per capire di cosa sto parlando.

Per prima cosa un po di CSS

table.db-table         { border-right:1px solid #ccc; border-bottom:1px solid #ccc; }
table.db-table th    { background:#eee; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; font-size:12px; }
table.db-table td    { padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; font-size:12px; }
h3                { font-size:170%; color:#3b5998; padding:0 0 0 3px; }

e poi soprattutto il piccolo Script in Mysql, che utilizzando funzioni native del MYSQL, ci fa ottenere l'effetto desiderato

/* connessione al db */
$connection = mysql_connect('localhost','user','password');
mysql_select_db('pommo',$connection);

/* SHOW TABLES */
$result = mysql_query('SHOW TABLES',$connection) or die('cannot show tables');
while($tableName = mysql_fetch_row($result))
{
    $table = $tableName[0];
    
    echo '<h3>',$table,'</h3>';
    $result2 = mysql_query('SHOW COLUMNS FROM '.$table) or die('cannot show columns from '.$table);
    $ris="";
    if(mysql_num_rows($result2))
    {
        while($row2 = mysql_fetch_row($result2))
        {
            $ris.= '<tr>';
            foreach($row2 as $key=>$value)
            {
                $ris.= "<td>" . $value . "</td>";
            }
            $ris.= '</tr>';
        }
        echo '<table class="db-table" cellpadding="0" cellspacing="0"><tbody><tr><th>Field</th><th>Type</th><th>Null</th><th>Key</th><th>Default</th><th>Extra</th></tr>';
        echo $ris;
        echo '</tbody></table><br>';
    }
}

Il primo passo è l'accesso di tutte le tabelle all'interno del database a cui è stata effettuata la connessione. Una volta che tutte le tabelle sono stati scaricate e salvate nell'array $result, il passo successivo è quello di lciclare l'array di tabelle ottenuto e, per ogni tabella, costruire una nuova tabella HTML con le informazioni sulla colonna e sui tipi di dato.

 

 

SCRIPT n.2

In passato anche io sviluppai un qualcosa scrissi uno script molto simile, ma più completo in alcune parti per ottenere informazioni dal server Mysql. NOn ho rivisitato a dovere lo script, scritto ormai almeno 5 anni fa, e ve lo ripropongo così com'era.

<strong>CONNESSIONI SUL SERVER</strong>
&
lt;?php
mysql_connect("localhost","user","password");
$processes = mysql_list_processes();
echo "<table cellpadding='10'>";

echo "<tr><th>ID</th><th>User</th><th>Host</th><th>DB</th>
<th>Command</th><th>Time</th><th>State</th><th>Info</th>
</tr>";

while ($row = mysql_fetch_row($processes))
{
    list($id,$user,$host,$db,$command,$time,$state,$info) = $row;
    echo "<tr><td>$id</td><td>$user</td>
    <td>$host</td><td>$db</td><td>$command</td>
    <td>$time</td><td>$state</td><td>$info</td>
    </tr>";
}

echo "</table>";

?>
<br><br>
<strong>INFORMAZIONI SERVER MYSQL</strong>
<?php
    echo "<br>" . mysql_get_server_info();
?>

<br><br>
<strong>INFORMAZIONI HOST</strong>
<?php
    echo "<br>" . mysql_get_host_info();
?>

<br><br>
<strong>INFORMAZIONI CLIENT</strong>
<?php
    echo "<br>" . mysql_get_client_info();
?>

<br><br>
<strong>ALL STATUS</strong>
<br>
<?php
$status = explode(' ', mysql_stat());
foreach($status as $value) echo $value."<br />";
?>

<br><br>
<strong>LISTA DATABASE DEL SERVER E RELATIVE TABELLE</strong>
<br>
<?php
$dbs = mysql_list_dbs();
//CICLO DATABASE DEL SERVER
while (list($db) = mysql_fetch_row($dbs))
{
    echo "<strong><font size='4'>$db</font></strong> <br />";
    //CICLO LE TABELLE DEL DATABASE
    $tables = mysql_query("SHOW TABLES FROM $db");
    while (list($table) = mysql_fetch_row($tables))
    {
        echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>$table</strong> <br />";
        
        $campi = mysql_list_fields($db, $table);
        $colonne = mysql_num_fields($campi);
        for ($i = 0; $i < $colonne; $i++)
        {
            echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" . mysql_field_name($campi, $i) . " (<strong>TYPE</strong>:" . mysql_field_type($campi, $i) . "- <strong>ATTR</strong>:" . mysql_field_flags($campi, $i) . " -<strong>LEN</strong>:" . mysql_field_len($campi, $i) . ")<br>";
        } 
    }
}
?>

In particolare l'ultima parte delllo script ottiene informazioni simili (ma meno complete del primo Script), mentre inizialmente abbiamo informazioni aggiuntive come le connessioni attualmente attive sul server, la versione del server Mysql, Informazioni sull'Host, informazioni sul Client, seguiti dall'elenco si tutti i database, con relative tabelle e struttura.