Visualizzazione risultati 1 fino 7 di 7

Discussione: Upload file direttamente da altro server su spazio web altervista

  1. #1
    mytestwebspace non è connesso Neofita
    Data registrazione
    17-09-2012
    Messaggi
    7

    Question Upload file direttamente da altro server su spazio web altervista

    Ciao a tutti

    Obiettivo:
    Volevo provare a fare esperienza on line con alcuni cms, site builter, portali ecc... quali drupal, joomla, phpbb wordpress ed altri reperibili in giro on line per vedere se ne trovo uno che mi interessi poi approfondire in modo particolare o anche per avere ampia preparazione per aprirmi nuove opportunità di lavoro.

    Situazione:
    Notoriamente alcuni sono messi a disposizione da altervista installabili direttamente con pochi click, ma sono versioni relativamente datate. Vorrei quindi usare le ultime versioni direttamente disponibili sul sito degli sviluppatori. Per altre, invece, altervista non li mette a disposizione ma sono comunque installabili caricandoli su server dopo averli scaricato dal sito dello sviluppatore e caricati via ftp o tramite la funzione di upload di file compressi che purtroppo funziona sempre e solo da computer locale ma non server to server.

    Domande:
    Devo per forza scaricare in locale il file compresso dal sito dello sviluppatore, decomprimerlo in locale per poi ricaricare tutti i file decompressi online su altervista via ftp oppure posso fare un passaggio unico e diretto dal server dello sviluppatore al mio spazio su altervista?

    Ad esempio supponendo di voler caricare ed installare su altervista l'ultima versione di drupal direttamente dall'indirizzo https://www.drupal.org/download-latest/tar.gz direttamente sul mio spazio su altervista senza prima scaricarla in locale dal sito dello sviluppatore per poi decomprimerla e ricaricarla, esiste un modo per farlo senza prima scaricare il file sul mio pc, decomprimere il contenuto per poi caricare i file estratti via ftp?

    Proposta:
    Se un modo diretto ancora non esiste vorrei proporre allo staff altervista di prendere in considerazione l'idea di implementare tale funzionalità di connessione server to server e decompressione dei file direttamente online per future migliorie del pannello di controllo altervista. Molti altri siti hanno già la funzione Carica file da URL, e a mio parere sarebbe davvero comodissima anche su aletervista.

    Motivo:
    Riduzione delle tempistiche: alcune volte la connessione di noi utenti non è velocissima e impiega diverso tempo per fare l'upload dal pc locale al server.

    Grazie.
    Ultima modifica di mytestwebspace : 14-11-2018 alle ore 06.01.55

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    12,463

    Predefinito

    Grazie per il feedback.
    Esiste in realtà una cosa "intermedia", ma molto utile: la possibilità di caricare un file compresso e di decomprimerlo una volta caricato.
    Dalla sezione gestione file -> Invia files -> Invia archivi compressi

    A volte i CMS (esempio prestashop) hanno un doppio archivio, quindi una implementazione diretta potrebbe estrarre l'archivio superiore ma di fatto non rendere eseguibile l'installazione. La cosa migliore quindi direi che è utilizzare lo strumento per inviare gli archivi compressi.

    Altrimenti, potresti implementare uno script PHP per fare il tutto, tenendo a mente però il formato del file da estrarre.

    Ciao!

  3. #3
    mytestwebspace non è connesso Neofita
    Data registrazione
    17-09-2012
    Messaggi
    7

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    [...]
    Dalla sezione gestione file -> Invia files -> Invia archivi compressi
    [...]
    Ciao e Grazie della risposta, in effetti è la procedura che sto usando come detto nel post iniziale (vedasi ultima riga paragrafo Situazione:).

    Non ho capito cosa intendi per la questione dell'estrazione dell'archivio superiore senza rendere eseguibile l'installazione: Magari mi sfugge qualche cosa o forse non mi sono spiegato in modo chiaro prima. Provo a spiegarmi meglio: secondo me, una funzione Carica file da URL o eventualmente una funzione più specifica tipo Invia archivi compressi da URL avrebbe lo stesso identico risultato di Invia archivi compressi ma senza bisogno di scaricare il file sul computer locale per poi ricaricarlo su altervista. Credo che una funzione di fetch da URL sia inoltre implementabile con relativa facilità anche senza modificare troppo i campi del modulo della funzione Invia archivi compressi già esistente: basterebbe a mio modesto parere anche solo mettere una checkbox Preleva da URL e una funzione che corrispondentemente esegue il fetch da url appunto, mentre tutte le altre operazioni eseguite (compresa la decompressione dell'archivio) sarebbero eseguite dalle stesse funzioni già esistenti attualmente. Quindi il risultato sarebbe lo stesso ma evitando di scaricare sul computer locale dell'utente il file compresso. Con il checkbox che attiva la relativa funzione sarebbe possibile usare lo stesso campo, senza modificare troppo l'aspetto del form di caricamento file, basterebbe solo convertire il campo File in un campo di testo normale in cui incollare URL del file compresso contenente i sorgenti da cui la funzione di fetch si prende l'URL del file da copiare sul server altervista e decomprimere.

    Se mi è consentito, ho trovato su https://stackoverflow.com/questions/...erver-from-url alcune idee per l'implementazione di una tale funzionalità sul pannello di controllo di altervista.

    Ciao!
    Ultima modifica di mytestwebspace : 15-11-2018 alle ore 16.33.52

  4. #4
    forteweb non è connesso Neofita
    Data registrazione
    26-06-2017
    Messaggi
    5

    Predefinito

    io ho fatto due file php per velocizzare come dici
    per caricare da url https://yourdev.me/blog/php-download-file-url/
    per unzippare il file zippato di sopra http://php.net/manual/en/ziparchive.extractto.php

  5. #5
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    12,463

    Predefinito

    Ah certo, in PHP puoi fare tutto quel che vuoi; se ti serve avevo fatto anche uno scriptino (è necessario abilitare le connessioni server to server):
    Codice PHP:
    <?php

    if(isset($_POST['url'],$_POST['directory']))
    {
        if (
    filter_var($_POST['url'], FILTER_VALIDATE_URL))
        {
            
    $localZip basename(parse_url($_POST['url'], PHP_URL_PATH));
            if (!
    copy($_POST['url'], $localZip))
            {
                
    $M[] = 'Errore durante la copia del file nello spazio';
            }
            
    $zip = new ZipArchive();
            if (
    $zip->open($localZipZIPARCHIVE::CREATE)!==TRUE)
            {
                
    $M[] = 'Errore durante apertura file zip';
            }
            
            if(
    $zip->extractTo($_POST['directory']) !== TRUE)
            {
                
    $M[] = 'Errore durante estrazione zip';
            }
            if(isset(
    $_POST['delete']))
            {
                if(
    unlink($localZip) !== TRUE)
                    
    $M[] = 'Errore durante eliminazione zip';
            }
            
    $mess 'Operazione completata'.(isset($M)?'con errori':'');
            
    $M[] = $mess;
            
        }
    }
    ?><!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title> Carica file da URL </title>
    </head>
    <body>
    <?php
    if(isset($M))
    {
        foreach(
    $M as $mess)
            echo 
    '<p style="color:red">'.$mess.'</p>';
    }
    ?>
    <form action="<?= $_SERVER['PHP_SELF'?>" method="POST">
    <label for="url">File da importare: </label><input type="text" name="url" id="url"><br>
    <label for="directory">Cartella: </label><input type="text" name="directory" id="directory" value="./"><br>
    <label for="delete">Elimina zip </label><input type="checkbox" name="delete" id="delete">
    <input type="submit" value="importa">
    </form>

    </body>
    </html>
    Ovviamente andrebbe "protetto" da malintenzionati che potrebbero sfruttarlo per caricare qualsiasi script nel tuo spazio.
    Non l'ho riprovato, ma dovrebbe funzionare.
    Si potrebbe anche fare qualcosa di più serio tramite javascript.

    Ciao!
    Ultima modifica di alemoppo : 24-11-2018 alle ore 02.06.08

  6. #6
    forteweb non è connesso Neofita
    Data registrazione
    26-06-2017
    Messaggi
    5

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Ah certo, in PHP puoi fare tutto quel che vuoi; se ti serve avevo fatto anche uno scriptino (è necessario abilitare le connessioni server to server):
    Codice PHP:
    <?php

    if(isset($_POST['url'],$_POST['directory']))
    {
        if (
    filter_var($_POST['url'], FILTER_VALIDATE_URL))
        {
            
    $localZip basename(parse_url($_POST['url'], PHP_URL_PATH));
            if (!
    copy($_POST['url'], $localZip))
            {
                
    $M[] = 'Errore durante la copia del file nello spazio';
            }
            
    $zip = new ZipArchive();
            if (
    $zip->open($localZipZIPARCHIVE::CREATE)!==TRUE)
            {
                
    $M[] = 'Errore durante apertura file zip';
            }
            
            if(
    $zip->extractTo($_POST['directory']) !== TRUE)
            {
                
    $M[] = 'Errore durante estrazione zip';
            }
            if(isset(
    $_POST['delete']))
            {
                if(
    unlink($localZip) !== TRUE)
                    
    $M[] = 'Errore durante eliminazione zip';
            }
            
    $mess 'Operazione completata'.(isset($M)?'con errori':'');
            
    $M[] = $mess;
            
        }
    }
    ?><!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title> Carica file da URL </title>
    </head>
    <body>
    <?php
    if(isset($M))
    {
        foreach(
    $M as $mess)
            echo 
    '<p style="color:red">'.$mess.'</p>';
    }
    ?>
    <form action="<?= $_SERVER['PHP_SELF'?>" method="POST">
    <label for="url">File da importare: </label><input type="text" name="url" id="url"><br>
    <label for="directory">Cartella: </label><input type="text" name="directory" id="directory" value="./"><br>
    <label for="delete">Elimina zip </label><input type="checkbox" name="delete" id="delete">
    <input type="submit" value="importa">
    </form>

    </body>
    </html>
    Ovviamente andrebbe "protetto" da malintenzionati che potrebbero sfruttarlo per caricare qualsiasi script nel tuo spazio.
    Non l'ho riprovato, ma dovrebbe funzionare.
    Si potrebbe anche fare qualcosa di più serio tramite javascript.

    Ciao!
    ho provato da drupal non scarica file da 20 mb,mentre un file da 1mb l'ha scaricato

  7. #7
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    12,463

    Predefinito

    Non è tanto la dimensione del file, ma il numero di file troppo alto che manda in timeout lo script durante l'estrazione di drupal; ho provato anche a fare la versione con javascript:
    Codice PHP:
    <?php
    if(isset($_POST['action']))
    {
        switch (
    $_POST['action'])
        {
            case 
    'import':
                
    import_file();
                
    done('File importato correttamente.');
                break;
            case 
    'extract':
                
    extract_file();
                
    done('File estratto correttamente');
                break;
            case 
    'delete':
                
    delete_file();
                break;
            default:
                
    error('comando non conosciuto');
        }
    }

    function 
    error($str)
    {
        
    header('Content-Type: application/json');
        echo 
    json_encode(array('message'=>$str,'error'=>1));
        exit();
    }
    function 
    done($str)
    {
        
    header('Content-Type: application/json');
        echo 
    json_encode(array('message'=>$str,'error'=>0));
        exit();
    }

    function 
    checkUrl($url false)
    {
        if(
    $url === false)
        {
            if(isset(
    $_POST['url']))
                
    $url $_POST['url'];            
            else
                
    error('URL inesistente!');
        }
        
        if(empty(
    $url))
            
    error('url vuota ('.$url.') - ('.$_POST['url'].')'.'['.$_POST['action'].']');
        
        if ((
    $url filter_var($urlFILTER_VALIDATE_URL)) === FALSE)
            
    error('url non ben definita');
        else 
            return 
    $url;
        
        return 
    false;
    }

    function 
    import_file()
    {
        
        
    $url_post checkUrl();
        
    $localZip basename(parse_url($url_postPHP_URL_PATH));

        if (!
    copy($url_post$localZip))
            
    error('Errore durante la copia del file nello spazio');

    }

    function 
    extract_file()
    {
        
    $localZip checkUrl();
        
    $localZip basename(parse_url($localZipPHP_URL_PATH));
        
    $directory $_POST['directory'];    //check?
        
        
    $zip = new ZipArchive();
        
        if (
    $zip->open($directory.$localZip)!== TRUE)
        {
            
    error('Errore durante apertura file zip');
        }
        
        if(
    $zip->extractTo($directory) !== TRUE)
        {
            
    error('Errore durante estrazione zip');
        }
        
        
    $zip->close();
    }

    function 
    delete_file()
    {
        
    $localZip checkUrl();
        
    $localZip basename(parse_url($localZipPHP_URL_PATH));
        
    $directory $_POST['directory'];    //check?
        
    if(unlink($directory.$localZip) == FALSE)
            
    error('Errore durante cancellazione file zip');
        else
            
    done('File '.$directory.$localZip.' eliminato correttamente');
    }

    ?><!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title> Carica file da URL </title>
    <style>
    #loader {
      display:none;
      border-radius: 50%;
      border-top: 3px solid blue;
      width: 10px;
      height: 10px;
      -webkit-animation: spin 2s linear infinite;
      animation: spin 2s linear infinite;
      float:left;
    }

    @-webkit-keyframes spin {
      0% { -webkit-transform: rotate(0deg); }
      100% { -webkit-transform: rotate(360deg); }
    }

    @keyframes spin {
      0% { transform: rotate(0deg); }
      100% { transform: rotate(360deg); }
    }

    #current_op
    {
        margin-left:10px;
    }

    p{ margin:0px;}
    </style>
    <script>
    var states = [
      ['import','Importazione file'],
      ['extract', 'Estrazione file'],
      ['delete', 'Cancellazione file']
    ];
    var state = 0;
    function request()
    {
        var f_url = document.getElementById('url').value;
        var f_directory = document.getElementById('directory').value;
        var f_delete = document.getElementById('delete').checked;
        
        
        document.getElementById('loader').style.display = 'inline';
        document.getElementById('current_op').innerHTML = states[state][1];
        
        /**/
        
        fetch('<?= $_SERVER['PHP_SELF']; ?>', {
          method: 'post',
          headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
          },
          body: 'action='+states[state][0]+'&directory='+f_directory+'&url='+f_url
        }).then(
            function(response) {
                var contentType = response.headers.get("content-type");
                if(contentType && contentType.includes("application/json")) {
                  return response.json();
                }
                throw new TypeError("JSON non corretto!");
                return false;
            }
        ).then(
            function (data)
            {
                feedback(data['message'],data['error']);
                document.getElementById('loader').style.display = 'none';
                document.getElementById('current_op').innerHTML = '';
                if(data['error'] == 0)
                    switch (state)
                    {
                        case 0:
                            state = 1;
                            request();
                            break;
                        case 1:
                            if(f_delete)
                            {
                                state = 2;
                                request();
                            }
                            break;
                    }
                
            }
        ).catch(function(error) {
            feedback('Problemi con la comunicazione server',1);
            document.getElementById('loader').style.display = 'none';
            return false;
        });
            
        /**/
        
        
    }

    function feedback(text,error)
    {
        var feed = document.getElementById('feed');
        if(error)
            status = '✘';
        else
            status = '&#10004';
        feed.innerHTML = '<p>'+status+' '+text+'</p>'+feed.innerHTML;
    }
    function reset_feedback()
    {
        document.getElementById('feed').innerHTML = '';
    }

    window.onload = function(){ 
        document.getElementById('form_import').addEventListener('submit', function(evt){
            evt.preventDefault();
            reset_feedback();
            state = 0;
            request();
            
        });
    }

    </script>
    </head>
    <body>
    <div id="loader"></div> <span id="current_op"></span>
    <div id="feed"></div>
    <form id="form_import" method="POST">
    <label for="url">File da importare: </label><input type="text" name="url" id="url"><br>
    <label for="directory">Cartella: </label><input type="text" name="directory" id="directory" value="./"><br>
    <label for="delete">Elimina zip </label><input type="checkbox" name="delete" id="delete">
    <input type="submit" value="importa">
    </form>

    </body>
    </html>
    Ma niente da fare, si vede che termina nell'estrazione.
    Per altri CMS (come wordpress) funziona.

    Ciao!
    Ultima modifica di alemoppo : 24-11-2018 alle ore 17.16.56

Regole di scrittura

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