public function zip($sSourceFile, $sDestinationFile=null)
	{
		if($sDestinationFile === null)
			$sDestinationFile = $this->getDefaultDestinationFilename($sSourceFile);

		if(! ($fh = fopen($sSourceFile, 'rb')))
			throw new FileOpenException($sSourceFile);

		if(! ($zp = gzopen($sDestinationFile, 'wb9')))
			throw new FileOpenException($sDestinationFile);

		while(! feof($fh))
		{
			$data = fread($fh, static::READ_SIZE);
			if(false === $data)
				throw new FileReadException($sSourceFile);

			$sz = strlen($data);
			if($sz !== gzwrite($zp, $data, $sz))
				throw new FileWriteException($sDestinationFile);
		}

		gzclose($zp);
		fclose($fh);

		return $sDestinationFile;
	}