Jump to content
  • PHP Lezione #6 - Libreria CURL, Transazioni, PDO, PHPMailer, FTP


     Share

    Cos è CURL e a cosa Serve?

    cURL è un comando che serve per scriptare, cioè per scrivere degli script per trasferire dei dati, è usato nelle televisioni, nelle automobili, in una notevole varietà di dispositivi. Viene usato per le comunicazioni attraverso la rete.

    cURL è un tool da linea di comando quindi si può usare al di fuori di PHP, è uno strumento di networking, per interagire con sistemi remoti e ottenere delle risposte.

     

    Ci permette per esempio a Scaricare una pagina web:

     

    <?php
    	$handle = curl_init();
    	$url = "...url qui...";
    
    // Set the url
    	curl_setopt($handle, CURLOPT_URL, $url);
    
    // Set the result output to be a string
    	curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
    	$output = curl_exec($handle);
    	curl_close($handle);
    	echo $output;
    ?>

    curl_init() inizializza la sessione; curl setopt() opzioni della sessione; CURLOPT_URL connessione verso un dominio web; CURLOPT_RETURNTRANSFER trasferito come stringa; curl_exec() esegue la sessione con tutti i parametri; curl_close() chiude la connessione

     

    Scaricare un file remoto:

     

    <?php
    // Remote file
    	$url = "https://google.it/images/google.jpg";
    // Local file
    	$file = "img.jpg";
    	$handle = curl_init();
    // Open the local file for writing
    	$fp = fopen($file, "w");
    	curl_setopt_array($handle, array(CURLOPT_URL=> $url,CURLOPT_FILE => $fp, CURLOPT_HEADER => true ))
    	curl_exec($handle);
    	curl_close($handle);
    	fclose($fp);
    ?>

    CURLOPT_URL richiamo un url in remoto; CURLOPT_FILE file nel quale scrivere;

     

    Per gestire gli errori

     

    $responseCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
    $responseType = curl_getinfo($handle, CURLINFO_CONTENT_TYPE);
    
    if (curl_errno($handle)) {
    print curl_error($handle);
    }

     

    Inviare dati in POST via cURL

     

    Possiamo compilare un form di registrazione attraverso cURL passando in POST i valori:

     

    <?php
    	$handle = curl_init();
    	$url = "https://localhost/saw/registration.php";
    // Array with form fields names and values
    	$postData = array( 'firstname' => 'Mario',
    		'lastname' => 'Mar',
    		'email' => '[email protected]',
    		'pass'=>'aaa',
    		'confirm'=>'aaa' );
    	curl_setopt_array($handle, array(
    		CURLOPT_URL => $url,
    		CURLOPT_POST => true,
    		CURLOPT_POSTFIELDS => $postData,
    		CURLOPT_RETURNTRANSFER => true ));
    	$data = curl_exec($handle);
    	curl_close($handle);
    	echo $data;
    ?>

     

    Gestire i cookie con cURL

     

    <?php
    	$handle = curl_init();
    	$url = "....";
    	$file = "cookie.txt";
    	curl_setopt_array($handle,
    	array(CURLOPT_URL => $url,
    		CURLOPT_COOKIEFILE => $file,
    		CURLOPT_COOKIEJAR => $file,
    		CURLOPT_RETURNTRANSFER => true,));
    	$data = curl_exec($handle);
    	curl_close($handle);
    ?>

     

    TRANSAZIONI

    Operazioni che scrivono sul database, come inserimento modifica e cancellazione, quando si modifica per esempio bisogna assicurarsi che se ci sono delle interazioni concorrenti non si diano fastidio tra di loro.

    Per esempio una banca che deve spostare i soldi da un conto corrente all'altro, richiede 2 operazioni uno il prelievo a l'altro incremento di un altro saldo, se succede qualcosa nel mezzo dell'operazione vuol dire che non va bene. Ci vengono in aiuto le transazioni:

    • Iniziare la transazione
    • Eseguire le query
    • Se c'è Commit si finisce la transazione
    • Se c'è stato un errore si fa il Rollback si riporta indietro.

    MySQLi e Transazioni

    L'estensione MySQLi introduce nuove funzioni per sfruttare le caratteristiche transazionali di MySQL

     

    Queste funzioni sono equivalanti ai comandi SQL

    • START TRANSACTION (oppure BEGIN)
    • COMMIT
    • ROLLBACK

    Nota: per implementare le transazioni le tabelle del database devono essere di tipo InnoDB, BerkeleyDB, Falcon

     

    /* set autocommit to off */
    	$con->autocommit(FALSE);
    /* Insert some values */
    	$con->query("INSERT ...");
    	$con->query("UPDATE ...");
    /* commit transaction */
    	$con->commit();

    Vedi: http://www.php.net/manual/en/mysqli.commit.php

     

    Se le cose non vanno a buon fine si può tornare indietro usando il rollback

    /* rollback */
    	$con->rollback();

    Vedi: http://php.net/manual/it/mysqli.rollback.php

     

    . Supponiamo di avere una tabella che memorizza le informazioni dei conti corrente di una banca
    . Se prendiamo dei soldi da un conto e li depositiamo su un altro conto dobbiamo assicurarci che entrambe le operazioni vadano a buon fine, altrimenti si perde del denaro
    . Ci vogliono due query di UPDATE che devono andare entrambe a buon fine, altrimenti bisogna riportare tutto nella situazione iniziale

     

    $query = "UPDATE contocorrente SET saldo = saldo - ? WHERE numeroconto=?";
    $query = "UPDATE contocorrente SET saldo = saldo + ? WHERE numeroconto=?";

     

    DATABASE ABSTRACTION LAYER

    Sono delle librerie che offrono dei metodi per interagire con il database, bisogna installarli, quella più usata oggi è PDO (PHP Data Object), indipendentemente dal DB che c'è dietro il codice funziona lo stesso, grazie alla libreria nativa del dbms.

     

    Per la connessione al database si crea un'istanza della classe PDO

    Il costruttore accetta come primo parametro una stringa nella quale si specifica il tipo di DBMS cui si vuole accedere (DSN = Data Source Name)

    <?php
    $conn = new PDO("mysql:dbname=$dbname;host=$host", $username, $password);
    ?>
    <?php
    $conn = new PDO("pgsql:dbname=$dbname;host=$host", $username, $password);
    ?>

    Vedi: http://www.php.net/manual/en/class.pdo.php

     

    Per chiudere la connessione al database

    <?php
    $conn = null
    ?>

     

    Gli errori sono gestiti tramite blocchi try/catch

    <?php
    try {
    $conn = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
    }
    catch(PDOException $e) {
    echo $e->getMessage();
    }
    ?>

     

    Per tutte le altre operazioni si usano gli stessi metodi
    indipendentemente dal DBMS

    <?php
    $id = ...
    $name = ..
    $stmt = $conn->prepare("SELECT * FROM user WHERE id=? AND name=?")
    $stmt->bindParam(1, $id, PDO::PARAM_INT);
    $sth->bindParam(2, $name, PDO::PARAM_STR, 40);
    $stmt->execute();
    ?>

    Sintassi alternativa
    $stmt = $conn->prepare("SELECT * FROM user WHERE id = :id AND name = :name");

     

    Per tutte le altre operazioni si usano gli stessi metodi
    indipendentemente dal DBMS

    <?php
    $stmt->setFetchMode(PDO::FETCH_NUM);
    while ($row = $stmt->fetch()) {
    print $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
    }
    ?>

    PDO::FETCH_ASSOC
    PDO::FETCH_BOTH
    PDO::FETCH_OBJ
    ecc.

    INVIO EMAIL via PHP

    PHP mette a disposizione la funzione mail() per inviare messaggi di posta elettronica MA funziona solo se sul server è installato un programma per l'invio delle email

     

    PHPMailer è una libreria da installare e configurare per inviare email dal vostro server.

    Potete installare PHPMailer

    Istruzioni qui:
    http://www.sitepoint.com/sending-emails-php-phpmailer/

    HTTPS

    HTTP (HTTP e SSL/TLS) è obbligatorio, è un protocollo che crea un tunnel di sicurezza, tutti i dati che vanno in rete sono protetti da un livello di sicurezza, se qualcuno ci vuole rintracciare non lo può fare.

    Il certificato del server si può creare usando https://letsencrypt.org/

    Al giorno d'oggi Google non indicizza più i siti senza questo protocollo di sicurezza ma sono essenziali per aumentare la priorità nei siti di ricerca.

    sFTP

    Per collegarsi ad un server si utilizza il protocollo sftp, Filezilla è un client grafico, semplice e molto facile da utilizzare per trasferire file da un client a server web.

     

    .

     Share


    User Feedback

    Recommended Comments

    There are no comments to display.


×
×
  • Create New...

Important Information

Terms of Use Privacy Policy Guidelines We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.