PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

sha1> <setlocale
Last updated: Fri, 18 Jul 2008

view this page in

sha1_file

(PHP 4 >= 4.3.0, PHP 5, PECL hash:1.1-1.3)

sha1_file — Calcola l'hash sha1 di un file

Descrizione

string sha1_file ( string $filename [, bool $raw_output ] )

Calcola l'hash sha1 di filename usando il » US Secure Hash Algorithm 1, e restituisce l'hash. L'hash è un numero esadecimale di 40 caratteri.

Elenco dei parametri

filename

Il nome del file

raw_output

Quando è impostato a TRUE, l'hash sha1 è restituito in formato binario con una lunghezza di 20 caratteri. Per default vale FALSE.

Valori restituiti

Restituisce una stringa se ha successo, FALSE negli altri casi.

Log delle modifiche

Versione Descrizione
5.0.0 Aggiunto il parametro raw_output .
5.1.0 Modificata la funzione per utilizzare lr API streams. Ciò significa che si può utlizzare la funzione con i vari warppers, tipo sha1_file('http://example.com/..')

Vedere anche:



sha1> <setlocale
Last updated: Fri, 18 Jul 2008
 
add a note add a note User Contributed Notes
sha1_file
schiros at invisihosting dot com
06-Sep-2007 03:02
If you've got a script that allows user file upload, and you want to prevent multiple uploads of the same file:

    <?
        session_start
();
       
$isDuplicate = false;
        if(isset(
$_FILES["filename"]["tmp_name"]) && file_exists($_FILES["filename"]["tmp_name"])) {
           
$fileHash = sha1_file($_FILES["filename"]["tmp_name"]);
            if(!isset(
$_SESSION["check_filelist"])) {
               
$_SESSION["check_filelist"] = array($fileHash);
            }
            elseif(
in_array($fileHash,$_SESSION["check_filelist"])) {
               
$isDuplicate = true;   
            }
            else {
               
$_SESSION["check_filelist"][] = $fileHash;   
            }
           
            if(
$isDuplicate) {
                echo
"You've already uploaded that file";   
            }
            else{
               
// do some stuff   
           
}
        }
       
   
?>
admin at cmsrevolution dot com
05-Aug-2006 04:02
checking the sha1 of the file. ideal for download scripts making sure the file the user is downloading is not currupt
by checking the sha1 key

<?php
$filename
= './Path/To/Your/File.zip';

if (
file_exists($filename)) {
echo
"i see the file";
} else {
echo
"recheck the link file maybe broken";
}
$file = sha1_file('./Path/To/Your/File.zip');

echo
"<br>is file hash valid?";
echo
"hash = add the hash here<br>";
echo
"hash of file :";
print(
$file);
?>
gubatron at gmail dot com
10-Feb-2006 03:02
P2P programs like LimeWire utilize sha1 to identify files. However they do it in base32. Here's an utility class if you want to write a Gnutella client in PHP5

/**
Utility base32 SHA1 class for PHP5
Copyright (C) 2006  Karl Magdsick (original author for Python)
                    Angel Leon (ported to PHP5)
                    Lime Wire LLC

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/
class SHA1 {
  static $BASE32_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';

  /** Given a file it creates a magnetmix */
  static function fileSHA1($file) {
    $raw = sha1_file($file,true);
    return SHA1::base32encode($raw);
  } //fileSHA1

  /** Takes raw input and converts it to base32 */
  static function base32encode($input) {
    $output = '';
    $position = 0;
    $storedData = 0;
    $storedBitCount = 0;
    $index = 0;

    while ($index < strlen($input)) {
      $storedData <<= 8;
      $storedData += ord($input[$index]);
      $storedBitCount += 8;
      $index += 1;

      //take as much data as possible out of storedData
      while ($storedBitCount >= 5) {
        $storedBitCount -= 5;
        $output .= SHA1::$BASE32_ALPHABET[$storedData >> $storedBitCount];
        $storedData &= ((1 << $storedBitCount) - 1);
      }
    } //while

    //deal with leftover data
    if ($storedBitCount > 0) {
      $storedData <<= (5-$storedBitCount);
      $output .= SHA1::$BASE32_ALPHABET[$storedData];
    }

    return $output;
  } //base32encode

}

sha1> <setlocale
Last updated: Fri, 18 Jul 2008
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites