title: Methods with the same name as their class will not be constructors in a future version of PHP; PasswordHash has a deprecated constructor
body: <p>Iam new to codeigniter,and try to build login registration with tank auth.Tank auth is showing the following error.</p>
  
  <p>A PHP Error was encountered</p>
  
  <p>Severity: 8192</p>
  
  <p>Message: Methods with the same name as their class will not be constructors in a future version of PHP; PasswordHash has a deprecated constructor</p>
  
  <p>Filename: phpass-0.1/PasswordHash.php</p>
  
  <p>Line Number: 27</p>
  
  <p>Code</p>
  
  <p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
  <div class="snippet-code">
  <pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;?php
  #
  # Portable PHP password hashing framework.
  #
  # Version 0.1 / genuine.
  #
  # Written by Solar Designer &lt;solar at openwall.com&gt; in 2004-2006 and placed in
  # the public domain.
  #
  # There's absolutely no warranty.
  #
  # The homepage URL for this framework is:
  #
  # http://www.openwall.com/phpass/
  #
  # Please be sure to update the Version line if you edit this file in any way.
  # It is suggested that you leave the main version number intact, but indicate
  # your project name (after the slash) and add your own revision information.
  #
  # Please do not change the "private" password hashing method implemented in
  # here, thereby making your hashes incompatible.  However, if you must, please
  # change the hash type identifier (the "$P$") to something different.
  #
  # Obviously, since this code is in the public domain, the above are not
  # requirements (there can be none), but merely suggestions.
  #
  class PasswordHash {
   var $itoa64;
   var $iteration_count_log2;
   var $portable_hashes;
   var $random_state;
  
   function PasswordHash($iteration_count_log2, $portable_hashes)
   {
    $this-&gt;itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
  
    if ($iteration_count_log2 &lt; 4 || $iteration_count_log2 &gt; 31)
     $iteration_count_log2 = 8;
    $this-&gt;iteration_count_log2 = $iteration_count_log2;
  
    $this-&gt;portable_hashes = $portable_hashes;
  
    $this-&gt;random_state = microtime() . getmypid();
   }
  
   function get_random_bytes($count)
   {
    $output = '';
    if (($fh = @fopen('/dev/urandom', 'rb'))) {
     $output = fread($fh, $count);
     fclose($fh);
    }
  
    if (strlen($output) &lt; $count) {
     $output = '';
     for ($i = 0; $i &lt; $count; $i += 16) {
      $this-&gt;random_state =
          md5(microtime() . $this-&gt;random_state);
      $output .=
          pack('H*', md5($this-&gt;random_state));
     }
     $output = substr($output, 0, $count);
    }
  
    return $output;
   }
  
   function encode64($input, $count)
   {
    $output = '';
    $i = 0;
    do {
     $value = ord($input[$i++]);
     $output .= $this-&gt;itoa64[$value &amp; 0x3f];
     if ($i &lt; $count)
      $value |= ord($input[$i]) &lt;&lt; 8;
     $output .= $this-&gt;itoa64[($value &gt;&gt; 6) &amp; 0x3f];
     if ($i++ &gt;= $count)
      break;
     if ($i &lt; $count)
      $value |= ord($input[$i]) &lt;&lt; 16;
     $output .= $this-&gt;itoa64[($value &gt;&gt; 12) &amp; 0x3f];
     if ($i++ &gt;= $count)
      break;
     $output .= $this-&gt;itoa64[($value &gt;&gt; 18) &amp; 0x3f];
    } while ($i &lt; $count);
  
    return $output;
   }
  
   function gensalt_private($input)
   {
    $output = '$P$';
    $output .= $this-&gt;itoa64[min($this-&gt;iteration_count_log2 +
     ((PHP_VERSION &gt;= '5') ? 5 : 3), 30)];
    $output .= $this-&gt;encode64($input, 6);
  
    return $output;
   }
  
   function crypt_private($password, $setting)
   {
    $output = '*0';
    if (substr($setting, 0, 2) == $output)
     $output = '*1';
  
    if (substr($setting, 0, 3) != '$P$')
     return $output;
  
    $count_log2 = strpos($this-&gt;itoa64, $setting[3]);
    if ($count_log2 &lt; 7 || $count_log2 &gt; 30)
     return $output;
  
    $count = 1 &lt;&lt; $count_log2;
  
    $salt = substr($setting, 4, 8);
    if (strlen($salt) != 8)
     return $output;
  
    # We're kind of forced to use MD5 here since it's the only
    # cryptographic primitive available in all versions of PHP
    # currently in use.  To implement our own low-level crypto
    # in PHP would result in much worse performance and
    # consequently in lower iteration counts and hashes that are
    # quicker to crack (by non-PHP code).
    if (PHP_VERSION &gt;= '5') {
     $hash = md5($salt . $password, TRUE);
     do {
      $hash = md5($hash . $password, TRUE);
     } while (--$count);
    } else {
     $hash = pack('H*', md5($salt . $password));
     do {
      $hash = pack('H*', md5($hash . $password));
     } while (--$count);
    }
  
    $output = substr($setting, 0, 12);
    $output .= $this-&gt;encode64($hash, 16);
  
    return $output;
   }
  
   function gensalt_extended($input)
   {
    $count_log2 = min($this-&gt;iteration_count_log2 + 8, 24);
    # This should be odd to not reveal weak DES keys, and the
    # maximum valid value is (2**24 - 1) which is odd anyway.
    $count = (1 &lt;&lt; $count_log2) - 1;
  
    $output = '_';
    $output .= $this-&gt;itoa64[$count &amp; 0x3f];
    $output .= $this-&gt;itoa64[($count &gt;&gt; 6) &amp; 0x3f];
    $output .= $this-&gt;itoa64[($count &gt;&gt; 12) &amp; 0x3f];
    $output .= $this-&gt;itoa64[($count &gt;&gt; 18) &amp; 0x3f];
  
    $output .= $this-&gt;encode64($input, 3);
  
    return $output;
   }
  
   function gensalt_blowfish($input)
   {
    # This one needs to use a different order of characters and a
    # different encoding scheme from the one in encode64() above.
    # We care because the last character in our encoded string will
    # only represent 2 bits.  While two known implementations of
    # bcrypt will happily accept and correct a salt string which
    # has the 4 unused bits set to non-zero, we do not want to take
    # chances and we also do not want to waste an additional byte
    # of entropy.
    $itoa64 = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  
    $output = '$2a$';
    $output .= chr(ord('0') + $this-&gt;iteration_count_log2 / 10);
    $output .= chr(ord('0') + $this-&gt;iteration_count_log2 % 10);
    $output .= '$';
  
    $i = 0;
    do {
     $c1 = ord($input[$i++]);
     $output .= $itoa64[$c1 &gt;&gt; 2];
     $c1 = ($c1 &amp; 0x03) &lt;&lt; 4;
     if ($i &gt;= 16) {
      $output .= $itoa64[$c1];
      break;
     }
  
     $c2 = ord($input[$i++]);
     $c1 |= $c2 &gt;&gt; 4;
     $output .= $itoa64[$c1];
     $c1 = ($c2 &amp; 0x0f) &lt;&lt; 2;
  
     $c2 = ord($input[$i++]);
     $c1 |= $c2 &gt;&gt; 6;
     $output .= $itoa64[$c1];
     $output .= $itoa64[$c2 &amp; 0x3f];
    } while (1);
  
    return $output;
   }
  
   function HashPassword($password)
   {
    $random = '';
  
    if (CRYPT_BLOWFISH == 1 &amp;&amp; !$this-&gt;portable_hashes) {
     $random = $this-&gt;get_random_bytes(16);
     $hash =
         crypt($password, $this-&gt;gensalt_blowfish($random));
     if (strlen($hash) == 60)
      return $hash;
    }
  
    if (CRYPT_EXT_DES == 1 &amp;&amp; !$this-&gt;portable_hashes) {
     if (strlen($random) &lt; 3)
      $random = $this-&gt;get_random_bytes(3);
     $hash =
         crypt($password, $this-&gt;gensalt_extended($random));
     if (strlen($hash) == 20)
      return $hash;
    }
  
    if (strlen($random) &lt; 6)
     $random = $this-&gt;get_random_bytes(6);
    $hash =
        $this-&gt;crypt_private($password,
        $this-&gt;gensalt_private($random));
    if (strlen($hash) == 34)
     return $hash;
  
    # Returning '*' on error is safe here, but would _not_ be safe
    # in a crypt(3)-like function used _both_ for generating new
    # hashes and for validating passwords against existing hashes.
    return '*';
   }
  
   function CheckPassword($password, $stored_hash)
   {
    $hash = $this-&gt;crypt_private($password, $stored_hash);
    if ($hash[0] == '*')
     $hash = crypt($password, $stored_hash);
  
    return $hash == $stored_hash;
   }
  }
  
  ?&gt;</code></pre>
  </div>
  </div>
  </p>