Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Update file sul PC utilizzando l'hash e PHP

    Ciao ragazzi,
    ho approntato una pagina in PHP che si connette ad un server in remoto, legge su di un file PHP il numero di versione di un software di mio interesse lo confronta con il numero di versione che ho sul mio PC su di un file php analogo.
    Se il numero di versione è più alto in remoto scarica un pacchetto zippato contenente il software aggiornato e sovrascrive i vecchi file in locale.
    Il mio obiettivo è però andare oltre: io non voglio fare un semplice controllo del versioning e scaricare quindi tutto un pacchetto ma vorrei tramite php fare un controllo dell'hash di tutti i file e scaricare in locale SOLO i file aggiornati.
    Capite bene che se facessi ciò eviterei ogni volta di scaricare gli aggiornamenti che già ho in locale da to che il zip è incrementale (li contiene tutti).
    Esiste qualcosa che può fare al caso mio? Esiste uno script già buttato giù da altri che posso riutilizzare o adattare?



    Grazie mille!!

    Tiziano

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Mah, in teoria non è che sia così difficile, basta leggere il contenuto di un file alla volta con file_get_contents() e calcolarne l'hash, leggere il corrispettivo in locale e calcolarne l'hash, confrontarli e se sono diversi scarichi il file remoto (tramite FTP ad esempio), altrimenti no.

  3. #3
    Ciao!
    Sono alle prime armi e non ho tempo per andarmi a studiare la classe.... cercavo qualcosa di già fatto che mi sarei modificato alla bisogna. E' mai possibile che in tutto il web non esistano esempi di questo genere? Ho cercato e ricercato ma non c'è nulla del genere!! Possibile? Mi date una mano?

  4. #4
    Ok, vediamo forse se cominciando per gradi magari riesco a trovare, col vostro aiuto i pezzi di codice da assemlbare.
    Mi servirebbe uno script che controlla l'hash di tutti i file presenti dentro ad un directory in locale.
    Un ciclo while che termina col termine di tutti i file.

    Una cosa così si dovrebbe trovare in teoria... anche se non sono riuscito.

    Il secondo step sarebbe:
    1)Calcola l'hash in locale del file X;
    2)Calcola l'hash in remoto del file X;
    3)Se l'hash del file X in remoto è diverso, copia il file X da remoto a locale.
    Così fino ad esaurire i file in remoto.

    Se in remoto sono presenti file che in locale non ci sono, limitati a copiarli in locale.
    Quindi forse dovremmo invertire il calcolo dell'hash, prima lo calcolo del file remoto, poi, se il file in locale esiste, lo confronto con l'hash e se è diverso copio il file da locale a remoto, se invece il file in locale non esiste mi limiti a copiare il file da remoto a locale.

    Qualcuno da darmi una mano??

    Grazie

    Tiziano

  5. #5
    Comincio io col postare qualche pezzo di codice:

    SCRIPT PER HASH DI TUTTI I FILE IN UNA DIRECTORY

    Codice PHP:
    <?php
    $files 
    scandir('..');
    for (
    $i=0;$i<count($files);$i++)
    {
     
    $file2 realpath($files[$i]);
     if (!
    is_dir($file2))
      
    $hash sha1_file($file2);
     else
      
    $hash 'Dir';
     echo 
    '<tr><td>'.$i.'</td><td>'.$file2.'</td><td>'.$hash.'</td><td>'.date ("F d Y H:i:s.",filemtime($file2)).'</td></tr>';
     
    $i;
    }
    ?>
    Questa è invece una funzione che fa la stessa cosa:

    Codice PHP:
    function verfiyFiles($path) {
     
    $files scandir($path);
     for (
    $i=0;$i<count($files);$i++)
     {
      
    $file2 realpath($files[$i]);
      if (!
    is_dir($file2))
       
    $hash sha1_file($file2);
      else
       
    $hash 'Dir';
      echo 
    '<tr><td>'.$i.'</td><td>'.$file2.'</td><td>'.$hash.'</td><td>'.date ("F d Y H:i:s.",filemtime($file2)).'</td></tr>';
      
    $i;
     }


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.