Visualizzazione risultati 1 fino 6 di 6

Discussione: gestione immagini da link esterni

  1. #1
    Guest

    Predefinito gestione immagini da link esterni

    Ciao a tutti...

    ho scritto uno script per l'upload di immagini, e l'ho addattato al mio sito... ora ho l'esigenza di arricchirlo permettendo agli utenti, di caricare le immagini, sia dal proprio pc (lo fa il mio scrit) ma anche dar loro la possibilità di inserire un link...

    da questo link lo script prende l'immagine, se è sotto un certo tot di kb la salva nella cartella...

    è possibile questo??

    (per intenderci, stile wordpress)

  2. #2
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    Mmm, hai bisogno di usare le librerire cURL o fsockopen (e devi disattivare le restrizioni dal pannello di controllo). Con le curl + php5 dovrei essere in grado di farlo.

    Codice PHP:
    <?php
    error_reporting
    (E_ALL); // debugger :P

    $dir = "img/"; // cartella dove sarà caricata l'immagine
    $url = "http://www.google.it/intl/it_it/images/logo.gif"; // prendiamo per esempio il logo di G
    $max_kb = 1024;
    $consentiti = array("gif", "png", "jpg", "jpeg"); // estensioni consentite aggiungine altre se vuoi.
    $tpm_file = rand(0, 9) . time() . rand(10, 20); // genero un nome casuale dove salverò il contenuto dell'immagine.
    $info = pathinfo($url); // alcune informazioni, estensione, nome...

    $ch = curl_init($url); // apro una connessione verso l'url indicato sopra
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // imposto qualche parametro...
    $code = curl_exec($ch); // qui ho il contenuto dell'immagine.
    curl_close($ch); // chiudo la connessione

    file_put_contents($dir . $tpm_file, $code); // creo il file temporaneo.

    $peso = ceil(filesize($dir . $tpm_file) / 1024);

    if(
    $peso > $max_kb) {
    exit(
    "Il peso del file &egrave; superiore a {$max_kb}kb!"); // interrompo lo script
    } else if(!in_array($info["extension"], $consentiti)) {
    exit(
    "Estensione non consentita!"); // interrompo lo script
    }

    if(
    file_put_contents($dir . $info["basename"], $code)) {
    unlink($dir . $tpm_file); // cancello il file temporaneo...
    echo "File caricato con successo!";
    }
    ?>
    Non lo ho ancora provato, appena ho tempo lo provo subito.

    Il problema principale è che anche se il file occupà più delle dimensioni consentite, prima verrà caricato nel server e poi verrà cancellato.

    Credo che anche qualcos'altro si possa migliorare.
    Al limite modifico il post....


    Saluti!

    P.S. L'ho provato e funziona!
    Ultima modifica di mycarlo : 26-10-2009 alle ore 20.43.19

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da mycarlo Visualizza messaggio
    Mmm, hai bisogno di usare le librerire cURL o fsockopen (e devi disattivare le restrizioni dal pannello di controllo). Con le curl + php5 dovrei essere in grado di farlo.
    Intanto un "grazie mille" per la pronta risposta...

    non ho capito bene che intendi nella parte soprariportata...

  4. #4
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    Per accedere ad url esterni al tuo sito, altervista mette a disposizione 2 funzioni chiamate curl (che in realtà è una libreria) e fsockopen.
    Queste funzioni hanno una serie di restrizioni, cioè possono accedere soltanto ad una lista che fornisce altervista stessa.

    Per le tue necessità hai bisogno di rimuovere queste restrizioni:

    Accedi al pannello di controllo: http://it.altervista.org/cplogin.php
    Clicchi su AlterSito -> Risorse & Upgrade -> Server To Server -> Procedi con l'identificazione e segui le istruzioni presenti sul sito.

    Ed eccoti il codice nella sua versione finale

    Codice PHP:
    <?php
    error_reporting
    (E_ALL); // debugger :P

    $dir = "img/"; // cartella dove sarà caricata l'immagine
    $url = isset($_GET["url"]) ? $_GET["url"] : null
    ;
    if(!
    preg_match("/(http):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/", $url)) {
    exit(
    "Inserisci un url valido!");
    }

    $consentiti = array("gif", "png", "jpg", "jpeg"); // estensioni consentite aggiungine altre se vuoi.
    $tpm_file = rand(0, 9) . time() . rand(10, 20); // genero un nome casuale dove salverò il contenuto dell'immagine.
    $info = pathinfo($url); // alcune informazioni, estensione, nome...
    $max_kb = 512;

    if(!
    in_array($info["extension"], $consentiti)) {
    exit(
    "Estensione non consentita!");
    }

    $ch = curl_init($url); // apro una connessione verso l'url indicato sopra
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // imposto qualche parametro...
    $code = curl_exec($ch); // qui ho il contenuto dell'immagine.
    curl_close($ch); // chiudo la connessione

    file_put_contents($dir . $tpm_file, $code); // creo il file temporaneo.

    $peso = ceil(filesize($dir . $tpm_file) / 1024);

    if(
    $peso > $max_kb) {
    unlink($dir . $tpm_file);
    exit(
    "Il peso del file &egrave; superiore a {$max_kb}kb!"); // interrompo lo script
    }

    $name = $dir . $info["basename"];
    $id = 1;

    $n = pathinfo($name, PATHINFO_FILENAME);
    $e = pathinfo($name, PATHINFO_EXTENSION);

    while(
    file_exists($name)) {
    $name = $dir . $n . $id . "." . $e;
    $id++;
    }

    if(
    file_put_contents($name, $code)) {
    unlink($dir . $tpm_file); // cancello il file temporaneo...
    echo "File caricato con successo!";
    }
    ?>
    Saluti!
    Ultima modifica di mycarlo : 26-10-2009 alle ore 21.33.38

  5. #5
    Guest

    Predefinito

    ma funziona anche al di fuori di altervista?

    cmq mi da:

    Codice PHP:
    Fatal error: Call to undefined function: file_put_contents() in /membri/sezioneffe/1.php on line 33
    un'altra cosa, perche devo sbloccare quella opzione? quando con wordpress riuscivo benissim?
    Ultima modifica di sezioneffe : 26-10-2009 alle ore 21.53.53

  6. #6
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    Ti ho detto che devi eliminare le restrizioni altrimenti funziona solo con alcuni siti presenti nella whitelist di altervista.

    Per quella funzione devi attivare php5! Sempre dal pannello di controllo AlterSito -> Gestione Files -> Ingranaggio blu () -> Attiva Supporto php5 = on

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •