. */ require_once 'phing/Task.php'; /** * fileHash * * Calculate either MD5 or SHA hash value of a specified file and retun the * value in a property * * @author Johan Persson * @version $Id: c59aff266a03f0e2cf22dc33143f2decf2d5e05c $ * @package phing.tasks.ext */ class FileHashTask extends Task { /** * Property for File * @var PhingFile file */ private $file; /** * Property to be set * @var string $property */ private $propertyName = "filehashvalue"; /** * Specify which hash algorithm to use. * 0 = MD5 * 1 = SHA1 * * @var integer $hashtype */ private $hashtype=0; /** * Specify if MD5 or SHA1 hash should be used * @param integer $type 0=MD5, 1=SHA1 */ public function setHashtype($type) { $this->hashtype = $type; } /** * Which file to calculate the hash value of * @param PhingFile $file */ public function setFile($file) { $this->file = $file; } /** * Set the name of the property to store the hash value in * @param $property * @return void */ public function setPropertyName($property) { $this->propertyName = $property; } /** * Main-Method for the Task * * @return void * @throws BuildException */ public function main() { $this->checkFile(); $this->checkPropertyName(); // read file if( (int)$this->hashtype === 0 ) { $this->log("Calculating MD5 hash from: ".$this->file); $hashValue = md5_file($this->file,false); } elseif( (int)$this->hashtype === 1 ) { $this->log("Calculating SHA1 hash from: ".$this->file); $hashValue = sha1_file($this->file,false); } else { throw new BuildException( sprintf('[FileHash] Unknown hashtype specified %d. Must be either 0 (=MD5) or 1 (=SHA1).',$this->hashtype)); } // publish hash value $this->project->setProperty($this->propertyName, $hashValue); } /** * checks file attribute * @return void * @throws BuildException */ private function checkFile() { // check File if ($this->file === null || strlen($this->file) == 0) { throw new BuildException('[FileHash] You must specify an input file.', $this->file); } if( ! is_readable($this->file) ) { throw new BuildException(sprintf('[FileHash] Input file does not exist or is not readable: %s',$this->file)); } } /** * checks property attribute * @return void * @throws BuildException */ private function checkPropertyName() { if (is_null($this->propertyName) || strlen($this->propertyName) === 0) { throw new BuildException('Property name for publishing hashvalue is not set'); } } }